CHƯƠNG 3
TẬP LỆNH
MCU ATmega324P
* Chương 3: Tập lệnh ATmega324P BMĐT - 1 - HCMUT Nguyễn Trọng Luật *
GPRs
(R0 ÷ R31)
NHÓM LỆNH CHUYỂN DỮ LIỆU
SRAM
I/O mở rộng FLASH
Thanh ghi I/O
chuẩn STACK
Hằng số
Nhóm lệnh này trao đổi dữ liệu giữa 2 toán hạng: 1 toán hạng thanh ghi trong
tập thanh ghi GPRs toán hạng còn lại các thành phần của bộ nhớ: thanh ghi
GPR, thanh ghi I/O, SRAM, stack, FLASH hay hằng số.
MOV, MOVW
LPM
ST, STD, STS
LD, LDD, LDS
IN
OUT
PUSH
POP
LDI
* Chương 3: Tập lệnh ATmega324P BMĐT - 2 - HCMUT Nguyễn Trọng Luật *
1. Thanh ghi GPRs:
Vd: chuyển nội dung thanh ghi R16 vào thanh ghi R1 MOV R1, R16
Mnemonics
Operands
Operation
Words
Clocks
Note
MOV
Rd,
Rr
Rd
Rr 1 1 d,r : 0 ÷ 31
MOVW
MOVW
Rd+1:Rd
, Rr+1:Rr
Rd,
Rr
Rd+1:Rd
Rr+1:Rr 1 1 d,r : 0, 2, .., 30
Vd: chuyển nội dung cặp thanh ghi R1:R0 vào thanh ghi Z
MOVW R31:R30, R1:R0 MOVW R30, R0
Thanh ghi với thanh ghi :
Thanh ghi với hằng số :
Mnemonics
Operands
Operation
Words
Clocks
Note
LDI
Rd, K
Rd
K 1 1 d : 16 ÷ 31, K : 0 ÷ 255
Vd: nạp giá trị 0x0F vào thanh ghi R1 R20 LDI R20, 0x0F
MOV R1, R20
* Chương 3: Tập lệnh ATmega324P BMĐT - 3 - HCMUT Nguyễn Trọng Luật *
2. GPRs với SRAM:
Truy xuất SRAM bằng pp địa chỉ trực tiếp :
Operands
Operation
Words
Clocks
Note
Rd, k
Rd
(k) *
2 2
d,r
: 0 ÷ 31, k địa chỉ bộ nhớ SRAM k: 0 ÷
8FFH
nếu 60H k FFH thể thay bằng tên tghi
I/O
k,
Rr
(k)
Rr 2 2
Lệnh Load: LD Rd, th ; Rd th: chuyển dữ liệu từ toán hạng th vào GPRs
Lệnh Store: ST th, Rd ; th Rd: chuyển dữ liệu từ GPRs vào toán hạng th
Vd: ghi giá trị 100 vào ô nhớ SRAM địa chỉ 20FH LDI R16, 100
STS 0x20F, R16
Vd: chuyển nội dung ô nhớ SRAM địa chỉ B2H vào ô nhớ địa chỉ cao nhất
LDS R10, 0xB2
STS 0x8FF, R10 hay LDS R10, TCNT2
nhớ địa chỉ B2H thanh ghi I/O tên TCNT2)
* (k) ô nhớ địa chỉ k
* Chương 3: Tập lệnh ATmega324P BMĐT - 4 - HCMUT Nguyễn Trọng Luật *
Truy xuất SRAM bằng pp địa chỉ gián tiếp :
Mnemonics
Operands
Operation
Words
Clocks
Note
LD
Rd,
I_reg
Rd
(I_reg) * 1 2 d, r : 0 ÷ 31
I_reg: X, Y, Z
(con trỏ ô nhớ)
X=XH:XL
R27:R26
Y=YH:YL
R29:R28
Z=ZH:ZL
R31:R30
LD
Rd,
I_reg +
Rd
(I_reg), I_reg I_reg
+ 1
1 2
LD
Rd,
- I_reg
I_reg
I_reg - 1, Rd (I_reg) 1 2
ST
I_reg
, Rr
(
I_reg) Rr 1 2
ST
I_reg
+, Rr
(I_reg
) Rr, I_reg I_reg + 1 1 2
ST
-
I_reg, Rr
I_reg
I_reg 1, (I_reg)
Rr
1 2
Vd: xóa ô nhớ SRAM địa chỉ 2FFH
LDI R16, 0
LDI R26, 0xFF
LDI R27, 0x02
ST X, R16
LDI R16, 0
LDI XL, 0xFF
LDI XH, 0x02
ST X, R16
LDI R16, 0
LDI XL, 0xFF
LDI XH, 0x02
ST X+, R16
LDI R16, 0
LDI XL, 0x00
LDI XH, 0x03
ST - X, R16
XH:XL R27:R26 X = 300H X = 2FFH
I_reg+, -I_reg thuận tiện khi truy xuất chuỗi ô nhớ SRAM địa chỉ liên tiếp
* (I_reg) ô nhớ địa chỉ con trỏ I_reg
* Chương 3: Tập lệnh ATmega324P BMĐT - 5 - HCMUT Nguyễn Trọng Luật *