SlideShare a Scribd company logo
1 of 29
Download to read offline
Chuong 3- TAP LENH AVR Atmega 324P P1
Ky Thuat Robot (rường Đại học Bách khoa, Đại học Quốc gia Thành phố Hồ Chí Minh)
Scan to open on Studocu
Studocu is not sponsored or endorsed by any college or university
Chuong 3- TAP LENH AVR Atmega 324P P1
Ky Thuat Robot (rường Đại học Bách khoa, Đại học Quốc gia Thành phố Hồ Chí Minh)
Scan to open on Studocu
Studocu is not sponsored or endorsed by any college or university
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
Chương 3
Tập lệnh AVR
Nguyễn Lý Thiên Trường 1
Tài liệu tham khảo:
1. Chương 3: Tập lệnh AVR (Giáo trình VXL)
2. AVR Instruction Set
3. Muhammad Ali Mazidi, AVR Microcontroller and Embedded Systems: Using Assembly and C,
Pearson New International Edition, 2014.
4. Datasheet ATmega324P
5. https://nicerland.com/avr/
6. http://www.hocavr.com/
7. https://www.youtube.com/watch?v=Fr2K9pzec8g&list=PLgwJf8NK-
2e55CdbY_WnY6pejPHoojCkJ
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
Nguyễn Lý Thiên Trường 2
3.1 Giới thiệu
3.2 Các phương pháp định vị địa chỉ
3.3 Các nhóm lệnh
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
Nguyễn Lý Thiên Trường 3
3.1 Giới thiệu
▪ Các lệnh của vi điều khiển AVR được truy xuất theo từ (word).
▪ Mỗi word (2 byte) mã máy được cất trong bộ nhớ chương
trình (Flash ROM) theo kiểu Little endian (tức là byte cao được
lưu ở địa chỉ cao, byte thấp được lưu ở địa chỉ thấp).
▪ Đa số các lệnh có mã máy dài 2 byte, một số lệnh dài 4 byte.
▪ Thời gian thực thi cho mỗi lệnh đa số là 1, 2 chu kỳ máy (MC)
và một số lệnh 3, 4 chu kỳ máy.
▪ Với mỗi chip vi điều khiển khác nhau thuộc họ AVR sẽ có một
chút khác biệt có thể là về phần cứng cũng như tập lệnh đi
kèm, do đó khi sử dụng một chip cụ thể nào chúng ta cần phải
tham khảo datasheet tương ứng.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
16 but
little endian: bye cao dc lưu ở địa chỉ cao và bye thấy dc lưu ở địa chỉ thấp
Nguyễn Lý Thiên Trường 4
3.1 Giới thiệu
▪ Little endian và Big endian.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
103 là ô nhớ có đc cao và 100 là ô nhớ có đc thấp thì theo kiểu data
wowr byte cao là 01 sẽ dc lưu vào 103 và 04 sẽ dc lưu vào 100
Nguyễn Lý Thiên Trường 5
3.2 Các phương pháp định vị địa chỉ
▪ Tổng cộng có 15 phương pháp định địa chỉ khác nhau. Có thể
chia thành 8 nhóm như sau:
• Định địa chỉ thanh ghi đơn.
• Định địa chỉ thanh ghi (cả 2 toán hạng đều là thanh ghi).
• Định địa chỉ trực tiếp bộ nhớ SRAM.
• Định địa chỉ gián tiếp bộ nhớ SRAM (qua thanh ghi con trỏ).
• Định địa chỉ trực tiếp bộ nhớ FLASH.
• Định địa chỉ gián tiếp bộ nhớ FLASH (qua thanh ghi con trỏ).
• Định địa chỉ tương đối.
• Định địa chỉ bit.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
Nguyễn Lý Thiên Trường 6
3.2 Các phương pháp định vị địa chỉ
▪ Các ký hiệu dùng trong phương pháp định địa chỉ và tập lệnh:
Các thanh ghi và toán hạng trong lệnh
Rd: thanh ghi đích/nguồn trong tập thanh ghi
Rr: thanh ghi nguồn trong tập thanh ghi
R: kết quả sau khi thực thi lệnh
K: hằng số dữ liệu
k: hằng số địa chỉ
b: bit trong tập GPRs hoặc I/O REGs (3-bit)
s: Bit trong SREG (3-bit)
X,Y,Z: Thanh ghi địa chỉ gián tiếp (con trỏ).
X=R27:R26, Y=R29:R28, Z=R31:R30
P: địa chỉ các I/O REGs cơ bản (I/O chuẩn).
q: độ dời hoặc địa chỉ trực tiếp (6-bit)
Thanh ghi trạng thái SREG và các bit trong thanh ghi
SREG: thanh ghi trạng thái
C: Cờ Carry
Z: Cờ Zero
N: Cờ âm
V: Cờ tràn bù 2
S: Cờ dấu (S = N ⊕ V)
H: Cờ nhớ phân nửa
T: bit sao chép sử dụng trong các lệnh BLD và BST
I: Cờ cho phép/không cho phép ngắt toàn cục
Hằng số và nội dung ô nhớ
A: hằng số dữ liệu A hay ô nhớ có địa chỉ là A
(A): nội dung ô nhớ có địa chỉ là A
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
x,y,z là những thanh ghi 16bit
7
3.2.1 Định địa chỉ thanh ghi đơn
▪ Phương pháp này gồm có 2 kiểu tùy theo các toán hạng được
sử dụng trong lệnh: toán hạng chỉ là một thanh ghi đơn, hay
1 thanh ghi với 1 giá trị tức thời K.
▪ Đối với phương pháp có toán hạng chỉ là một thanh ghi đơn
sẽ dùng 11 bit cho opcode và 5 bit để mã hóa cho vị trí của
Rd (0d31).
Nguyễn Lý Thiên Trường
Ví dụ:
INC R2; tăng nội dung thanh ghi R2 lên 1
NEG R16; tính bù 2 nội dung thanh ghi R16
Mã máy:
INC R2; 0x9423 [0b1001 0100 0010 0011]
NEG R16; 0x9501 [0b1001 0101 0000 0001]
Cấu trúc mã lệnh với toán hạng chỉ là 1 thanh ghi đơn:
Lưu ý: lệnh CLR Rd
có cấu trúc mã máy
như lệnh EOR Rd,Rd
(xem tập lệnh).
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
8
Nguyễn Lý Thiên Trường
ATmega Instruction Set
Ví dụ:
INC R2; tăng nội dung thanh ghi R2 lên 1
Mã máy: 0x9423 [0b1001 0100 0010 0011]
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
9
Nguyễn Lý Thiên Trường
ATmega Instruction Set
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
ko bị ảnh
hưởng
bị ảnh hưởng
10
3.2.1 Định địa chỉ thanh ghi đơn
▪ Phương pháp định địa chỉ thanh ghi đơn với một giá trị tức thời
(hằng số 8 bit) sử dụng 4 bit cho opcode, 4 bit cho Rd (16d31) và
8 bit cho dữ liệu K (Nhị phân, thập phân, thập lục phân, mã ASCII).
Nguyễn Lý Thiên Trường
Ví dụ:
LDI R16,200; R16 = 200
SUBI R28,0x20; R28  R28 - 20H
Mã máy:
LDI R16,200; 0xEC08 [0b1110 1100 0000 1000]
SUBI R28,0x20; 0x52C0 [0b0101 0010 1100 0000]
Cấu trúc mã lệnh với toán hạng là 1 thanh ghi với giá trị tức thời:
12 11
Lưu ý: chỉ được phép
sử dụng với các thanh
ghi từ R16÷R31 → được
mã hóa bằng 4 bit nhị
phân có giá trị tương
ứng từ 0÷15.
I = Immediate: tức thời Nếu K là
số âm thì
K ≥ −256
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
sử dụng thập lúc phân thì kí hiệu là 0x hoặc $
lúc này thì R16 tương ứng là 0000, R17 tương ứng 0001 và R31 là 1111
200 đổi qa nhị phân bằng 1100 1000 thì
11
3.2.2 Định địa chỉ thanh ghi (cả 2 toán hạng)
Nguyễn Lý Thiên Trường
Ví dụ:
MOV R2,R3; R2  R3
ADD R1,R16; R1  R1 + R16
Mã máy:
MOV R2,R3; 0x2C23 [0b0010 1100 0010 0011]
ADD R1,R16; 0x0E10 [0b0000 1110 0001 0000]
Cấu trúc mã lệnh với cả 2 toán hạng đều là thanh ghi:
▪ Phương pháp định địa chỉ thanh ghi sử dụng trong câu lệnh có 2 toán hạng là
các thanh ghi Rd và Rr (GPRs).
▪ Thực hiện các thao tác lệnh trên các dữ liệu được đặt trong 2 thanh ghi Rd và
Rr, quy ước Rr là toán hạng nguồn, Rd là toán hạng đích, kết quả cất vào Rd.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
12
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
Nguyễn Lý Thiên Trường
Mã máy:
OUT PORTA,R1; 0xB812 [1011 1000 0001 0010]
OUT $02,R1; 0xB812 [1011 1000 0001 0010]
Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản:
▪ Dùng để truy xuất trực tiếp đến các thanh ghi I/O và vùng SRAM (Data memory).
▪ Ký hiệu P (0 ≤ P ≤ 63) trong tập lệnh thực hiện trên các toán hạng là các thanh ghi I/O cơ bản,
k (0 ≤ k ≤ 8FFH) là địa chỉ các ô nhớ SRAM (toàn bộ bộ nhớ SRAM).
▪ Nếu 60H ≤ k ≤ FFH (thuộc vùng I/O mở rộng): có thể thay bằng tên thanh ghi I/O tương ứng
thay vì dùng địa chỉ bộ nhớ (SRAM).
▪ Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn). Thông thường là
sử dụng tên thanh ghi I/O thay vì địa chỉ I/O.
Ví dụ:
OUT PORTA,R1; PORTA  R1
OUT $02,R1; (02H)  R1 ⇔ PORTA  R1
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
cái bit 10:9 và 3:0 sẽ mã hóa cho địa chỉ I/O của PortA
13
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
Nguyễn Lý Thiên Trường
Mã máy:
IN R3,PINB; 0xB033 [1011 0000 0011 0011]
IN R3,$03; 0xB033 [1011 0000 0011 0011]
Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản:
▪ Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn).
Ví dụ:
IN R3,PINB; R3  PINB
IN R3,$03; R3  (03H) ⇔ R3  PINB
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
14
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
Nguyễn Lý Thiên Trường
Mã máy:
OUT PORTA,R1; 0xB812 (2 byte), 1MC
STS $22,R1; 0x9210, 0x0022 (4 byte)
; Thời gian thực thi: 2MC
▪ Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng
đó là địa chỉ I/O và địa chỉ bộ nhớ (hay địa chỉ mem, địa chỉ dữ liệu).
Ví dụ:
OUT PORTA,R1; PORTA  R1
STS $22,R1; (22H)  R1
▪ Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2
phương pháp định địa chỉ khác nhau để thực hiện lệnh
(OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã
lệnh và thời gian thực thi lệnh khác nhau.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
64 thanh ghi I/O cơ bản
có đc I/O từ 0x00 đến 0x3F
khi use lệnh STS phải thao tác trên
đc bộ nhớ
2 câu lệnh này tương tương
nhau về mặt chức năng
15
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
Nguyễn Lý Thiên Trường
Mã máy:
IN R3,PINB; 0xB033 (2 byte), 1MC
LDS R3,$23; 0x9030, 0x0023 (4 byte), 2MC
▪ Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng
đó là địa chỉ I/O và địa chỉ dữ liệu (hay địa chỉ bộ nhớ, địa chỉ mem).
Ví dụ:
IN R3,PINB; R3  PINB
LDS R3,$23; R3  (23H)
▪ Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2
phương pháp định địa chỉ khác nhau để thực hiện lệnh
(OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã
lệnh và thời gian thực thi lệnh khác nhau.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
lệnh này cg chỉ thao tác trên vùng
địa chỉ bộ nhớ
NX: nếu truy cập đến vùng I/O cơ bản thì nên use lệnh OUT/IN
16
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
Nguyễn Lý Thiên Trường
Mã máy:
LDS R0,UDR0; 0x9000, 0x00C6
STS $100,R0; 0x9200, 0x0100
Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O mở rộng và SRAM:
▪ Sử dụng các lệnh STS và LDS để truy cập vùng I/O mở rộng và vùng Data SRAM (2KB).
➢ Lưu ý: các lệnh STS và LDS dùng để truy cập trực tiếp
đến tất cả nội dung SRAM từ 000H đến 8FFH.
Ví dụ:
LDS R0,UDR0; R0  UDR0
STS $100,R0; (100H)  R0
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
I/O
cơ
bản
I/O
mở
rộng
vùng IO mở rộng
thì ko có địa chỉ IO
có thể use cái tên
lưu lưu nội dung R0 vào ô nhớ SRAM có đc
100H
vùng IO cơ bản thì nên use
IN/OUT
17
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
▪ Phương pháp định địa chỉ gián tiếp qua thanh ghi thực hiện trên các lệnh dùng để truy
xuất dữ liệu vùng SRAM sử dụng các thanh ghi con trỏ X, Y hoặc Z.
▪ Các thanh ghi X, Y, Z hoạt động như các con trỏ (pointer) và nội dung của các thanh ghi
này là địa chỉ của các ô nhớ trong vùng SRAM, nơi mà dữ liệu sẽ được đọc hoặc là ghi.
▪ Phương pháp này được chia ra làm 4 kiểu khác nhau: dữ liệu gián tiếp, dữ liệu gián
tiếp với tiền tố trừ (-), dữ liệu gián tiếp với hậu tố cộng (+) và dữ liệu gián tiếp với một
độ chuyển dời q (6 bit, 0 ≤ q ≤ 63) thông qua các lệnh LD, LDD, ST, STD.
Ví dụ: Để thực hiện việc ghi giá trị 0xCC vào địa chỉ SRAM 0x800 cùng với việc chọn
thanh ghi Y làm con trỏ trong phương pháp định địa chỉ này, ta thực hiện các lệnh sau:
LDI R16,0xCC ;lưu dữ liệu cần ghi vào R16
LDI R28,0x00 ;lưu địa chỉ ô nhớ vào Y
LDI R29,0X08 ;Y  YH:YL  R29:R28
ST Y, R16;ghi dữ liệu
0xCC
Bộ nhớ SRAM
0x800
0x801
0x7FF
Trực tiếp?
Gián tiếp:
LDI R16,0xCC ;R16 = CCH
STS 0x800, R16; (0x800)  R16
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
Store là lưu trữ
LDS và STS dc dùng để
truy cập trực tiếp
còn LD, LDD, ST, STD là truy cập gián tiếp, mà gián tiếp thì phải thông qua con trỏ
ko thể ghi trực tiếp giá trị
0xCC vào ô nhớ này dc mà
phải thông qua R16
18
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi X làm
con trỏ. Kết quả lưu vào thanh ghi R7.
LDI R27,0x08 ;lưu byte cao địa chỉ ô nhớ vào X
LDI R26,0x00 ; lưu byte thấp địa chỉ ô nhớ vào X
LD R7, X; đọc dữ liệu
0xCC
Bộ nhớ SRAM
0x800
0x801
0x7FF
Trực tiếp?
Gián tiếp:
LDS R7,0x800; R7  (0x800)
➢ Lưu ý: Thanh ghi X ≡ XH:XL ≡ R27:R26
LDI XH,0x08 ;lưu byte cao địa chỉ ô nhớ vào X
LDI XL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào X
LD R7, X; đọc dữ liệu
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
1
2
sau 2 câu lệnh 1 và 2 thì nội dung thanh ghi X là 0x0800
19
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi Z làm
con trỏ kết hợp với tiền tố trừ. Kết quả lưu vào thanh ghi R7.
LDI R31,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z
LDI R30,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z
LD R7, -Z ;Z  Z - 1, đọc dữ liệu
0xCC
Bộ nhớ SRAM
0x800
0x801
0x7FF
Gián tiếp:
➢ Lưu ý: Thanh ghi Z ≡ ZH:ZL ≡ R31:R30
LDI ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z
LDI ZL,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z
LD R7, -Z ;Z  Z - 1, đọc dữ liệu
▪ Phương pháp định địa chỉ gián tiếp với tiền tố trừ (-) thực hiện trong câu lệnh có
các toán hạng là các thanh ghi con trỏ với ký hiệu dấu trừ phía trước X, Y, Z (-X, -Y,
-Z).
▪ Địa chỉ của các toán hạng được xác định bằng cách lấy nội dung của các con trỏ trừ
đi 1 trước khi thực hiện lệnh, và kết quả này sẽ giữ nguyên trong con trỏ sau khi
thực hiện xong lệnh.
▪ Lưu ý: hậu tố trừ sau X, Y, Z (X-, Y-, Z-) : sai cú pháp.
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
tức là con trỏ sẽ bị thay đổi nội dung do là nó sẽ trừ trước khi truy cập đến địa chỉ 0800
nên ban đầu phải khởi tạo cái X có giá trị lớn hơn
là 0801
sau lệnh 3 thì R7 = 0xCC và Z = 0800
3
20
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 và 0x801 cùng với việc chọn thanh
ghi Z làm con trỏ kết hợp với hậu tố cộng. Kết quả lưu vào thanh ghi R7 và R8 tương
ứng.
LDI ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z
LDI ZL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào Z
LD R7, Z+ ;đọc dữ liệu, Z  Z + 1
LD R8, Z
0x2A
0xCC
0x12
Bộ nhớ SRAM
0x800
0x801
0x7FF
Gián tiếp:
▪ Phương pháp định địa chỉ gián tiếp với hậu tố cộng (+) thực hiện trong câu lệnh có
các toán hạng là các thanh ghi con trỏ với ký hiệu dấu cộng phía sau X, Y, Z (X+, Y+,
Z+).
▪ Phương pháp này thực hiện xong lệnh rồi tăng nội dung con trỏ lên 1. Kết quả này
sẽ giữ nguyên trong con trỏ sau khi thực hiện xong lệnh.
▪ Lưu ý: tiền tố cộng trước X, Y, Z (+X, +Y, +Z): sai cú pháp.
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
sau khi thực hiện xong thì nội dung con trỏ
sẽ tăng lên, tức là nội dung con trỏ sẽ thay
đổi sau khi thực hiện
sau lệnh này thì nó tự
động tăng z lên 1 là
0801
sau lệnh này thì z là 0801
21
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x7FF và 0x801 cùng với việc chọn thanh
ghi Z làm con trỏ kết hợp với độ dời. Kết quả lưu vào thanh ghi R7 và R8 tương ứng.
LDI ZH,0x07 ;lưu byte cao địa chỉ ô nhớ vào Z
LDI ZL,0xFF ;lưu byte thấp địa chỉ ô nhớ vào Z
LD R7, Z ;đọc dữ liệu
LDD R8, Z+2
0x2A
0xCC
0x12
Bộ nhớ SRAM
0x800
0x801
0x7FF
Gián tiếp:
▪ Phương pháp định địa chỉ gián tiếp với độ dời: việc xác định địa chỉ toán hạng
trong phương pháp này bằng cách cộng nội dung của con trỏ với một độ dời q có
giá trị nguyên 6 bit (0 ≤ q ≤ 63) rồi mới thực hiện lệnh. Con trỏ trong phương pháp
này chỉ được dùng với 2 thanh ghi Y và Z.
▪ Lưu ý: việc cộng với độ dời không làm thay đổi nội dung con trỏ. Không sử dụng độ
dời q < 0 (bị báo lỗi cú pháp).
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
r7=(0x7FF)=0x2A
r8=(0x801)=0x12
lệnh có độ dời phải là LDD
ban đầu sẽ lấy z cộng thêm 2 thành 801 rồi sau đó mới trỏ
đến r8. Sau lệnh này thì thằng z vẫn là 7FF
22
3.2.5 Định địa chỉ trực tiếp bộ nhớ FLASH
▪ Được dùng trong các câu lệnh JMP k và CALL k, với k = 0…3FFFH.
▪ Lưu ý: có thể sử dụng Nhãn thay vì địa chỉ k.
Ví dụ: Xét lệnh JMP LABEL, giả sử nhãn LABEL đặt tại địa chỉ 2000H và OP-CODE
tương ứng của lệnh JMP là 1001 0101 10 thì mã máy của lệnh sẽ là 4 byte
tương ứng là:
1001 0100 0000 1100 (0x940C)
0010 0000 0000 0000 (0x2000)
Nguyễn Lý Thiên Trường
Cấu trúc mã lệnh của lệnh JMP k
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
k = 2000H
23
3.2.6 Định địa chỉ gián tiếp bộ nhớ FLASH
▪ Truy xuất dữ liệu gián tiếp từ bộ nhớ chương trình:
• Một địa chỉ trong bộ nhớ chương trình (FLASH) cần được truy xuất sẽ
đặt trực tiếp vào thanh ghi Z tại các vị trí MSBs. Vì tổ chức của bộ
nhớ chương trình là một từ 16 bit, nên nội dung cần truy xuất sẽ
chọn dữ liệu là byte thấp hoặc byte cao của địa chỉ cần truy xuất, việc
này được xác định bởi bit LSB của thanh ghi Z.
• Phương pháp này được sử dụng trong các câu lệnh: LPM; LPM Rd,Z;
LPM Rd,Z+ hay SPM. Tuy nhiên, lệnh SPM không hoàn toàn có sẵn
trong tất cả các chip của họ AVR (ATmega324P có hỗ trợ lệnh SPM).
• Khi lệnh LPM không có toán hạng thì R0 là thanh ghi đích được hiểu
ngầm trong lệnh. Trong trường hợp này, mã máy cố định là: 0x95C8.
Ví dụ: Đọc byte thấp của
ô nhớ FLASH có địa chỉ
$0001 về R0
LDI ZH, HIGH(0x0001 << 1)
LDI ZL, LOW(0x0001 << 1)
LPM
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
địa chỉ byte thấp sẽ gấp đôi địa chỉ word, còn địa chỉ byte cao thì = địa chỉ byte thấp + 1
1
2
sau 2 cậu lệnh 1
và 2 thì z = 0x0002
24
3.2.6 Định địa chỉ gián tiếp bộ nhớ FLASH
▪ Truy xuất gián tiếp địa chỉ bộ nhớ chương trình:
• Trong phương pháp định địa chỉ này, thanh ghi PC được nạp địa chỉ
thực thi gián tiếp qua thanh ghi Z.
• Phương pháp định địa chỉ gián tiếp qua thanh ghi Z sử dụng trong các
lệnh IJMP và ICALL, không có toán hạng và mã máy là 1 giá trị cố
định: IJMP (0x9409) và ICALL (0x9509).
• Định vị địa chỉ này còn gọi là định vị địa chỉ tuyệt đối (Absolute
Adressing).
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
25
3.2.7 Định địa chỉ tương đối
▪ Định địa chỉ tương đối không điều kiện: Phương pháp này được sử dụng trong các
lệnh RJMP và RCALL. Toán hạng trong lệnh là một nhãn hoặc một địa chỉ nằm trong
phạm vi một độ dời tương đối k (hay offset), với k là 1 số có dấu 12 bit so với PC của
lệnh kế, có giá trị từ -2048 đến +2047. Địa chỉ đích = PC lệnh kế + k
▪ Cấu trúc mã lệnh RCALL (Relative Call to Subroutine):
▪ Cấu trúc mã lệnh RJMP (Relative Jump):
Ví dụ: tính mã máy cho lệnh RCALL DELAY, giả sử rằng lệnh RCALL đặt tại địa chỉ 2000H và
nhãn DELAY đặt tại 200BH.
→ PC lệnh hiện tại (lệnh RCALL DELAY) là 2000H → PC của lệnh kế là 2001H (vì lệnh RCALL
dài 1 word) → k (hay offset) = 12 bit của kết quả (200BH – 2001H) = +10 (số thập phân).
→ Mã máy (hay mã lệnh) tương ứng của lệnh RCALL DELAY là: 1101 0000 0000 1010.
Nguyễn Lý Thiên Trường
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
12 bit độ dời có dấu bù 2
chỉ lấy 12bit của kết quả 200BH-2001H
+10 là 12bit có dấu bù 2 mà 10 là 1010
26
3.2.7 Định địa chỉ tương đối
▪ Định địa chỉ tương đối có điều kiện: Phương pháp này áp dụng cho các lệnh nhảy có
điều kiện xét theo các bit cờ trạng thái thanh ghi SREG hoặc so sánh giữa 2 thanh ghi.
Độ lệch k (offset) là số có dấu 7 bit nên k = -64 ÷ +63, do đó địa chỉ đích giới hạn trong
vùng: (PC lệnh kế - 64) ≤ địa chỉ đích ≤ (PC lệnh kế + 63); đc đích = PC lệnh kế + k
▪ Cấu trúc mã lệnh cho các lệnh rẽ nhánh có điều kiện:
Ví dụ: lệnh BRVS LOOP, lệnh này sẽ rẽ nhánh đến nhãn LOOP khi cờ tràn V trong thanh ghi
SREG bằng 1. Giả sử lệnh được đặt tại địa chỉ 50H và nhãn LOOP đặt tại 40H, lệnh này có
OP-CODE là 111100. Ta có k = 7 bit của (địa chỉ đích – PC lệnh kế) = 7 bit của (40H– 51H) =
1101111. Cờ V có vị trí ở bit 3 của thanh ghi SREG nên ta sẽ có mã máy tương ứng của lệnh
là: 1111 0011 0111 1011.
Vị trí cờ trong
thanh ghi SREG
Mã lệnh (ví dụ: BRVS → 111100) Độ dời (hay offset): 7 bit có dấu
SREG:
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
7 bit có dấu bù 2
27
3.2.8 Định địa chỉ bit
▪ Định địa chỉ bit theo BYTE: Phương pháp định địa chỉ này được sử dụng trong các
lệnh xử lý bit đối với các bit có địa chỉ bit thuộc các thanh ghi I/O có địa chỉ từ
001FH (thuộc vùng thanh ghi I/O cơ bản), hoặc bit của nhóm thanh ghi GPRs.
▪ Địa chỉ của toán hạng được xác định chính là địa chỉ bit và địa chỉ thanh ghi tương
ứng trong toán hạng của lệnh.
▪ Phương pháp này được sử dụng cho 2 nhóm lệnh: nhóm lệnh chỉ tác động trên các
bit của các thanh ghi I/O cơ bản (đ/c 001FH) gồm các lệnh SBI và CBI; nhóm còn lại
là 2 lệnh BST và BLD, liên quan đến bit T của thanh ghi SREG và các bit của các thanh
ghi GPRs, trong trường hợp này địa chỉ của bit T được hiểu ngầm trong mã lệnh.
Nguyễn Lý Thiên Trường
Ví dụ: lệnh SBI PORTA,6 sẽ đặt bit 6 (110)
của thanh ghi PORTA lên 1 (địa chỉ I/O
tương ứng của PORTA là 00010). Ta có mã
máy của lệnh là: 1001 1010 0001 0110.
Lệnh BLD R3,7 thực hiện lấy nội dung của
bit T trong thanh ghi SREG lưu vào bit 7
(111) của thanh ghi R3. Ta có mã máy
tương ứng của lệnh là: 1111 1000 0011
0111.
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
(R0-R31)
bi là mã hóa vị trí của bit trong thanh ghi đa dụng
28
3.2.8 Định địa chỉ bit
▪ Định địa chỉ bit theo BIT: Phương pháp định địa chỉ BIT theo BIT chỉ được thực hiện
trên các bit của thanh ghi SREG, thực hiện trên các lệnh đặt/xóa cờ BSET/BCLR hoặc
SE/CL.
Nguyễn Lý Thiên Trường
Ví dụ: lệnh BCLR 0 hoặc CLC cả 2 lệnh đều thực hiện việc xóa cờ Carry trong
thanh ghi SREG, có mã máy là 1001 0100 1000 1000.
b7 = 1: lệnh BCLR/CL
b7 = 0: lệnh BSET/SE
Downloaded by tran ivan (ivantrantien123@gmail.com)
lOMoARcPSD|36009385
vị trí của cờ C trong SREG là 0

More Related Content

Similar to chuong-3-tap-lenh-avr-atmega-324p-p1.pdf

CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdfCHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
TriuPhm15
 
Microprocessor final ver1_part2
Microprocessor final ver1_part2Microprocessor final ver1_part2
Microprocessor final ver1_part2
Mit Rin
 
Chuong10
Chuong10Chuong10
Chuong10
na
 
1.gioi thieu 8051
1.gioi thieu 80511.gioi thieu 8051
1.gioi thieu 8051
DngBi73
 

Similar to chuong-3-tap-lenh-avr-atmega-324p-p1.pdf (20)

1616 bai tap_vxl
1616 bai tap_vxl1616 bai tap_vxl
1616 bai tap_vxl
 
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdfCHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
CHUONG-3-LẬP-TRÌNH-CHO-HỌ-VI-ĐIỀU-KHIỂN-8051.pdf
 
Vi xu ly_4_2
Vi xu ly_4_2Vi xu ly_4_2
Vi xu ly_4_2
 
Microprocessor final ver1_part2
Microprocessor final ver1_part2Microprocessor final ver1_part2
Microprocessor final ver1_part2
 
ky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.pptky thuat vi xu lychuong4.ppt
ky thuat vi xu lychuong4.ppt
 
Tap lenh co_ban
Tap lenh co_banTap lenh co_ban
Tap lenh co_ban
 
Chuong10
Chuong10Chuong10
Chuong10
 
Chuong2
Chuong2Chuong2
Chuong2
 
Giao tiếp máy tính.pdf
Giao tiếp máy tính.pdfGiao tiếp máy tính.pdf
Giao tiếp máy tính.pdf
 
slide 8051
slide 8051 slide 8051
slide 8051
 
Msptieuluan
MsptieuluanMsptieuluan
Msptieuluan
 
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCDĐồ Án Đo Điện Áp Hiển Thị Trên LCD
Đồ Án Đo Điện Áp Hiển Thị Trên LCD
 
ghsx.pdf
ghsx.pdfghsx.pdf
ghsx.pdf
 
Baitap vxl
Baitap vxlBaitap vxl
Baitap vxl
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
 
Tailieu.vncty.com do-an-vi-dieu-khien
Tailieu.vncty.com   do-an-vi-dieu-khienTailieu.vncty.com   do-an-vi-dieu-khien
Tailieu.vncty.com do-an-vi-dieu-khien
 
1.gioi thieu 8051
1.gioi thieu 80511.gioi thieu 8051
1.gioi thieu 8051
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Nhóm-HM.docx
Nhóm-HM.docxNhóm-HM.docx
Nhóm-HM.docx
 
Chuong2 cấu trúc phần cứng 8051
Chuong2 cấu trúc phần cứng 8051Chuong2 cấu trúc phần cứng 8051
Chuong2 cấu trúc phần cứng 8051
 

Recently uploaded

xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfxemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
Xem Số Mệnh
 
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptxBài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
DungxPeach
 
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
ChuThNgnFEFPLHN
 
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdfSLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
hoangtuansinh1
 

Recently uploaded (20)

1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgspowerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
 
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfxemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
 
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng ĐồngGiới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
Giới thiệu Dự án Sản Phụ Khoa - Y Học Cộng Đồng
 
Access: Chuong III Thiet ke truy van Query.ppt
Access: Chuong III Thiet ke truy van Query.pptAccess: Chuong III Thiet ke truy van Query.ppt
Access: Chuong III Thiet ke truy van Query.ppt
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptxBài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
Bài tập nhóm Kỹ Năng Gỉai Quyết Tranh Chấp Lao Động (1).pptx
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
 
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
 
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdfSLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
SLIDE - Tu van, huong dan cong tac tuyen sinh-2024 (đầy đủ chi tiết).pdf
 
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
 
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
1.DOANNGOCPHUONGTHAO-APDUNGSTEMTHIETKEBTHHHGIUPHSHOCHIEUQUA (1).docx
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 

chuong-3-tap-lenh-avr-atmega-324p-p1.pdf

  • 1. Chuong 3- TAP LENH AVR Atmega 324P P1 Ky Thuat Robot (rường Đại học Bách khoa, Đại học Quốc gia Thành phố Hồ Chí Minh) Scan to open on Studocu Studocu is not sponsored or endorsed by any college or university Chuong 3- TAP LENH AVR Atmega 324P P1 Ky Thuat Robot (rường Đại học Bách khoa, Đại học Quốc gia Thành phố Hồ Chí Minh) Scan to open on Studocu Studocu is not sponsored or endorsed by any college or university Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 2. Chương 3 Tập lệnh AVR Nguyễn Lý Thiên Trường 1 Tài liệu tham khảo: 1. Chương 3: Tập lệnh AVR (Giáo trình VXL) 2. AVR Instruction Set 3. Muhammad Ali Mazidi, AVR Microcontroller and Embedded Systems: Using Assembly and C, Pearson New International Edition, 2014. 4. Datasheet ATmega324P 5. https://nicerland.com/avr/ 6. http://www.hocavr.com/ 7. https://www.youtube.com/watch?v=Fr2K9pzec8g&list=PLgwJf8NK- 2e55CdbY_WnY6pejPHoojCkJ Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 3. Nguyễn Lý Thiên Trường 2 3.1 Giới thiệu 3.2 Các phương pháp định vị địa chỉ 3.3 Các nhóm lệnh Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 4. Nguyễn Lý Thiên Trường 3 3.1 Giới thiệu ▪ Các lệnh của vi điều khiển AVR được truy xuất theo từ (word). ▪ Mỗi word (2 byte) mã máy được cất trong bộ nhớ chương trình (Flash ROM) theo kiểu Little endian (tức là byte cao được lưu ở địa chỉ cao, byte thấp được lưu ở địa chỉ thấp). ▪ Đa số các lệnh có mã máy dài 2 byte, một số lệnh dài 4 byte. ▪ Thời gian thực thi cho mỗi lệnh đa số là 1, 2 chu kỳ máy (MC) và một số lệnh 3, 4 chu kỳ máy. ▪ Với mỗi chip vi điều khiển khác nhau thuộc họ AVR sẽ có một chút khác biệt có thể là về phần cứng cũng như tập lệnh đi kèm, do đó khi sử dụng một chip cụ thể nào chúng ta cần phải tham khảo datasheet tương ứng. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 16 but little endian: bye cao dc lưu ở địa chỉ cao và bye thấy dc lưu ở địa chỉ thấp
  • 5. Nguyễn Lý Thiên Trường 4 3.1 Giới thiệu ▪ Little endian và Big endian. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 103 là ô nhớ có đc cao và 100 là ô nhớ có đc thấp thì theo kiểu data wowr byte cao là 01 sẽ dc lưu vào 103 và 04 sẽ dc lưu vào 100
  • 6. Nguyễn Lý Thiên Trường 5 3.2 Các phương pháp định vị địa chỉ ▪ Tổng cộng có 15 phương pháp định địa chỉ khác nhau. Có thể chia thành 8 nhóm như sau: • Định địa chỉ thanh ghi đơn. • Định địa chỉ thanh ghi (cả 2 toán hạng đều là thanh ghi). • Định địa chỉ trực tiếp bộ nhớ SRAM. • Định địa chỉ gián tiếp bộ nhớ SRAM (qua thanh ghi con trỏ). • Định địa chỉ trực tiếp bộ nhớ FLASH. • Định địa chỉ gián tiếp bộ nhớ FLASH (qua thanh ghi con trỏ). • Định địa chỉ tương đối. • Định địa chỉ bit. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 7. Nguyễn Lý Thiên Trường 6 3.2 Các phương pháp định vị địa chỉ ▪ Các ký hiệu dùng trong phương pháp định địa chỉ và tập lệnh: Các thanh ghi và toán hạng trong lệnh Rd: thanh ghi đích/nguồn trong tập thanh ghi Rr: thanh ghi nguồn trong tập thanh ghi R: kết quả sau khi thực thi lệnh K: hằng số dữ liệu k: hằng số địa chỉ b: bit trong tập GPRs hoặc I/O REGs (3-bit) s: Bit trong SREG (3-bit) X,Y,Z: Thanh ghi địa chỉ gián tiếp (con trỏ). X=R27:R26, Y=R29:R28, Z=R31:R30 P: địa chỉ các I/O REGs cơ bản (I/O chuẩn). q: độ dời hoặc địa chỉ trực tiếp (6-bit) Thanh ghi trạng thái SREG và các bit trong thanh ghi SREG: thanh ghi trạng thái C: Cờ Carry Z: Cờ Zero N: Cờ âm V: Cờ tràn bù 2 S: Cờ dấu (S = N ⊕ V) H: Cờ nhớ phân nửa T: bit sao chép sử dụng trong các lệnh BLD và BST I: Cờ cho phép/không cho phép ngắt toàn cục Hằng số và nội dung ô nhớ A: hằng số dữ liệu A hay ô nhớ có địa chỉ là A (A): nội dung ô nhớ có địa chỉ là A Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 x,y,z là những thanh ghi 16bit
  • 8. 7 3.2.1 Định địa chỉ thanh ghi đơn ▪ Phương pháp này gồm có 2 kiểu tùy theo các toán hạng được sử dụng trong lệnh: toán hạng chỉ là một thanh ghi đơn, hay 1 thanh ghi với 1 giá trị tức thời K. ▪ Đối với phương pháp có toán hạng chỉ là một thanh ghi đơn sẽ dùng 11 bit cho opcode và 5 bit để mã hóa cho vị trí của Rd (0d31). Nguyễn Lý Thiên Trường Ví dụ: INC R2; tăng nội dung thanh ghi R2 lên 1 NEG R16; tính bù 2 nội dung thanh ghi R16 Mã máy: INC R2; 0x9423 [0b1001 0100 0010 0011] NEG R16; 0x9501 [0b1001 0101 0000 0001] Cấu trúc mã lệnh với toán hạng chỉ là 1 thanh ghi đơn: Lưu ý: lệnh CLR Rd có cấu trúc mã máy như lệnh EOR Rd,Rd (xem tập lệnh). Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 9. 8 Nguyễn Lý Thiên Trường ATmega Instruction Set Ví dụ: INC R2; tăng nội dung thanh ghi R2 lên 1 Mã máy: 0x9423 [0b1001 0100 0010 0011] Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 10. 9 Nguyễn Lý Thiên Trường ATmega Instruction Set Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 ko bị ảnh hưởng bị ảnh hưởng
  • 11. 10 3.2.1 Định địa chỉ thanh ghi đơn ▪ Phương pháp định địa chỉ thanh ghi đơn với một giá trị tức thời (hằng số 8 bit) sử dụng 4 bit cho opcode, 4 bit cho Rd (16d31) và 8 bit cho dữ liệu K (Nhị phân, thập phân, thập lục phân, mã ASCII). Nguyễn Lý Thiên Trường Ví dụ: LDI R16,200; R16 = 200 SUBI R28,0x20; R28  R28 - 20H Mã máy: LDI R16,200; 0xEC08 [0b1110 1100 0000 1000] SUBI R28,0x20; 0x52C0 [0b0101 0010 1100 0000] Cấu trúc mã lệnh với toán hạng là 1 thanh ghi với giá trị tức thời: 12 11 Lưu ý: chỉ được phép sử dụng với các thanh ghi từ R16÷R31 → được mã hóa bằng 4 bit nhị phân có giá trị tương ứng từ 0÷15. I = Immediate: tức thời Nếu K là số âm thì K ≥ −256 Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 sử dụng thập lúc phân thì kí hiệu là 0x hoặc $ lúc này thì R16 tương ứng là 0000, R17 tương ứng 0001 và R31 là 1111 200 đổi qa nhị phân bằng 1100 1000 thì
  • 12. 11 3.2.2 Định địa chỉ thanh ghi (cả 2 toán hạng) Nguyễn Lý Thiên Trường Ví dụ: MOV R2,R3; R2  R3 ADD R1,R16; R1  R1 + R16 Mã máy: MOV R2,R3; 0x2C23 [0b0010 1100 0010 0011] ADD R1,R16; 0x0E10 [0b0000 1110 0001 0000] Cấu trúc mã lệnh với cả 2 toán hạng đều là thanh ghi: ▪ Phương pháp định địa chỉ thanh ghi sử dụng trong câu lệnh có 2 toán hạng là các thanh ghi Rd và Rr (GPRs). ▪ Thực hiện các thao tác lệnh trên các dữ liệu được đặt trong 2 thanh ghi Rd và Rr, quy ước Rr là toán hạng nguồn, Rd là toán hạng đích, kết quả cất vào Rd. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 13. 12 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM Nguyễn Lý Thiên Trường Mã máy: OUT PORTA,R1; 0xB812 [1011 1000 0001 0010] OUT $02,R1; 0xB812 [1011 1000 0001 0010] Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản: ▪ Dùng để truy xuất trực tiếp đến các thanh ghi I/O và vùng SRAM (Data memory). ▪ Ký hiệu P (0 ≤ P ≤ 63) trong tập lệnh thực hiện trên các toán hạng là các thanh ghi I/O cơ bản, k (0 ≤ k ≤ 8FFH) là địa chỉ các ô nhớ SRAM (toàn bộ bộ nhớ SRAM). ▪ Nếu 60H ≤ k ≤ FFH (thuộc vùng I/O mở rộng): có thể thay bằng tên thanh ghi I/O tương ứng thay vì dùng địa chỉ bộ nhớ (SRAM). ▪ Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn). Thông thường là sử dụng tên thanh ghi I/O thay vì địa chỉ I/O. Ví dụ: OUT PORTA,R1; PORTA  R1 OUT $02,R1; (02H)  R1 ⇔ PORTA  R1 Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 cái bit 10:9 và 3:0 sẽ mã hóa cho địa chỉ I/O của PortA
  • 14. 13 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM Nguyễn Lý Thiên Trường Mã máy: IN R3,PINB; 0xB033 [1011 0000 0011 0011] IN R3,$03; 0xB033 [1011 0000 0011 0011] Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản: ▪ Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn). Ví dụ: IN R3,PINB; R3  PINB IN R3,$03; R3  (03H) ⇔ R3  PINB Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 15. 14 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM Nguyễn Lý Thiên Trường Mã máy: OUT PORTA,R1; 0xB812 (2 byte), 1MC STS $22,R1; 0x9210, 0x0022 (4 byte) ; Thời gian thực thi: 2MC ▪ Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng đó là địa chỉ I/O và địa chỉ bộ nhớ (hay địa chỉ mem, địa chỉ dữ liệu). Ví dụ: OUT PORTA,R1; PORTA  R1 STS $22,R1; (22H)  R1 ▪ Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2 phương pháp định địa chỉ khác nhau để thực hiện lệnh (OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã lệnh và thời gian thực thi lệnh khác nhau. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 64 thanh ghi I/O cơ bản có đc I/O từ 0x00 đến 0x3F khi use lệnh STS phải thao tác trên đc bộ nhớ 2 câu lệnh này tương tương nhau về mặt chức năng
  • 16. 15 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM Nguyễn Lý Thiên Trường Mã máy: IN R3,PINB; 0xB033 (2 byte), 1MC LDS R3,$23; 0x9030, 0x0023 (4 byte), 2MC ▪ Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng đó là địa chỉ I/O và địa chỉ dữ liệu (hay địa chỉ bộ nhớ, địa chỉ mem). Ví dụ: IN R3,PINB; R3  PINB LDS R3,$23; R3  (23H) ▪ Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2 phương pháp định địa chỉ khác nhau để thực hiện lệnh (OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã lệnh và thời gian thực thi lệnh khác nhau. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 lệnh này cg chỉ thao tác trên vùng địa chỉ bộ nhớ NX: nếu truy cập đến vùng I/O cơ bản thì nên use lệnh OUT/IN
  • 17. 16 3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM Nguyễn Lý Thiên Trường Mã máy: LDS R0,UDR0; 0x9000, 0x00C6 STS $100,R0; 0x9200, 0x0100 Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O mở rộng và SRAM: ▪ Sử dụng các lệnh STS và LDS để truy cập vùng I/O mở rộng và vùng Data SRAM (2KB). ➢ Lưu ý: các lệnh STS và LDS dùng để truy cập trực tiếp đến tất cả nội dung SRAM từ 000H đến 8FFH. Ví dụ: LDS R0,UDR0; R0  UDR0 STS $100,R0; (100H)  R0 Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 I/O cơ bản I/O mở rộng vùng IO mở rộng thì ko có địa chỉ IO có thể use cái tên lưu lưu nội dung R0 vào ô nhớ SRAM có đc 100H vùng IO cơ bản thì nên use IN/OUT
  • 18. 17 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM ▪ Phương pháp định địa chỉ gián tiếp qua thanh ghi thực hiện trên các lệnh dùng để truy xuất dữ liệu vùng SRAM sử dụng các thanh ghi con trỏ X, Y hoặc Z. ▪ Các thanh ghi X, Y, Z hoạt động như các con trỏ (pointer) và nội dung của các thanh ghi này là địa chỉ của các ô nhớ trong vùng SRAM, nơi mà dữ liệu sẽ được đọc hoặc là ghi. ▪ Phương pháp này được chia ra làm 4 kiểu khác nhau: dữ liệu gián tiếp, dữ liệu gián tiếp với tiền tố trừ (-), dữ liệu gián tiếp với hậu tố cộng (+) và dữ liệu gián tiếp với một độ chuyển dời q (6 bit, 0 ≤ q ≤ 63) thông qua các lệnh LD, LDD, ST, STD. Ví dụ: Để thực hiện việc ghi giá trị 0xCC vào địa chỉ SRAM 0x800 cùng với việc chọn thanh ghi Y làm con trỏ trong phương pháp định địa chỉ này, ta thực hiện các lệnh sau: LDI R16,0xCC ;lưu dữ liệu cần ghi vào R16 LDI R28,0x00 ;lưu địa chỉ ô nhớ vào Y LDI R29,0X08 ;Y  YH:YL  R29:R28 ST Y, R16;ghi dữ liệu 0xCC Bộ nhớ SRAM 0x800 0x801 0x7FF Trực tiếp? Gián tiếp: LDI R16,0xCC ;R16 = CCH STS 0x800, R16; (0x800)  R16 Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 Store là lưu trữ LDS và STS dc dùng để truy cập trực tiếp còn LD, LDD, ST, STD là truy cập gián tiếp, mà gián tiếp thì phải thông qua con trỏ ko thể ghi trực tiếp giá trị 0xCC vào ô nhớ này dc mà phải thông qua R16
  • 19. 18 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi X làm con trỏ. Kết quả lưu vào thanh ghi R7. LDI R27,0x08 ;lưu byte cao địa chỉ ô nhớ vào X LDI R26,0x00 ; lưu byte thấp địa chỉ ô nhớ vào X LD R7, X; đọc dữ liệu 0xCC Bộ nhớ SRAM 0x800 0x801 0x7FF Trực tiếp? Gián tiếp: LDS R7,0x800; R7  (0x800) ➢ Lưu ý: Thanh ghi X ≡ XH:XL ≡ R27:R26 LDI XH,0x08 ;lưu byte cao địa chỉ ô nhớ vào X LDI XL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào X LD R7, X; đọc dữ liệu Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 1 2 sau 2 câu lệnh 1 và 2 thì nội dung thanh ghi X là 0x0800
  • 20. 19 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi Z làm con trỏ kết hợp với tiền tố trừ. Kết quả lưu vào thanh ghi R7. LDI R31,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z LDI R30,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, -Z ;Z  Z - 1, đọc dữ liệu 0xCC Bộ nhớ SRAM 0x800 0x801 0x7FF Gián tiếp: ➢ Lưu ý: Thanh ghi Z ≡ ZH:ZL ≡ R31:R30 LDI ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z LDI ZL,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, -Z ;Z  Z - 1, đọc dữ liệu ▪ Phương pháp định địa chỉ gián tiếp với tiền tố trừ (-) thực hiện trong câu lệnh có các toán hạng là các thanh ghi con trỏ với ký hiệu dấu trừ phía trước X, Y, Z (-X, -Y, -Z). ▪ Địa chỉ của các toán hạng được xác định bằng cách lấy nội dung của các con trỏ trừ đi 1 trước khi thực hiện lệnh, và kết quả này sẽ giữ nguyên trong con trỏ sau khi thực hiện xong lệnh. ▪ Lưu ý: hậu tố trừ sau X, Y, Z (X-, Y-, Z-) : sai cú pháp. Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 tức là con trỏ sẽ bị thay đổi nội dung do là nó sẽ trừ trước khi truy cập đến địa chỉ 0800 nên ban đầu phải khởi tạo cái X có giá trị lớn hơn là 0801 sau lệnh 3 thì R7 = 0xCC và Z = 0800 3
  • 21. 20 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 và 0x801 cùng với việc chọn thanh ghi Z làm con trỏ kết hợp với hậu tố cộng. Kết quả lưu vào thanh ghi R7 và R8 tương ứng. LDI ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z LDI ZL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, Z+ ;đọc dữ liệu, Z  Z + 1 LD R8, Z 0x2A 0xCC 0x12 Bộ nhớ SRAM 0x800 0x801 0x7FF Gián tiếp: ▪ Phương pháp định địa chỉ gián tiếp với hậu tố cộng (+) thực hiện trong câu lệnh có các toán hạng là các thanh ghi con trỏ với ký hiệu dấu cộng phía sau X, Y, Z (X+, Y+, Z+). ▪ Phương pháp này thực hiện xong lệnh rồi tăng nội dung con trỏ lên 1. Kết quả này sẽ giữ nguyên trong con trỏ sau khi thực hiện xong lệnh. ▪ Lưu ý: tiền tố cộng trước X, Y, Z (+X, +Y, +Z): sai cú pháp. Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 sau khi thực hiện xong thì nội dung con trỏ sẽ tăng lên, tức là nội dung con trỏ sẽ thay đổi sau khi thực hiện sau lệnh này thì nó tự động tăng z lên 1 là 0801 sau lệnh này thì z là 0801
  • 22. 21 3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x7FF và 0x801 cùng với việc chọn thanh ghi Z làm con trỏ kết hợp với độ dời. Kết quả lưu vào thanh ghi R7 và R8 tương ứng. LDI ZH,0x07 ;lưu byte cao địa chỉ ô nhớ vào Z LDI ZL,0xFF ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, Z ;đọc dữ liệu LDD R8, Z+2 0x2A 0xCC 0x12 Bộ nhớ SRAM 0x800 0x801 0x7FF Gián tiếp: ▪ Phương pháp định địa chỉ gián tiếp với độ dời: việc xác định địa chỉ toán hạng trong phương pháp này bằng cách cộng nội dung của con trỏ với một độ dời q có giá trị nguyên 6 bit (0 ≤ q ≤ 63) rồi mới thực hiện lệnh. Con trỏ trong phương pháp này chỉ được dùng với 2 thanh ghi Y và Z. ▪ Lưu ý: việc cộng với độ dời không làm thay đổi nội dung con trỏ. Không sử dụng độ dời q < 0 (bị báo lỗi cú pháp). Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 r7=(0x7FF)=0x2A r8=(0x801)=0x12 lệnh có độ dời phải là LDD ban đầu sẽ lấy z cộng thêm 2 thành 801 rồi sau đó mới trỏ đến r8. Sau lệnh này thì thằng z vẫn là 7FF
  • 23. 22 3.2.5 Định địa chỉ trực tiếp bộ nhớ FLASH ▪ Được dùng trong các câu lệnh JMP k và CALL k, với k = 0…3FFFH. ▪ Lưu ý: có thể sử dụng Nhãn thay vì địa chỉ k. Ví dụ: Xét lệnh JMP LABEL, giả sử nhãn LABEL đặt tại địa chỉ 2000H và OP-CODE tương ứng của lệnh JMP là 1001 0101 10 thì mã máy của lệnh sẽ là 4 byte tương ứng là: 1001 0100 0000 1100 (0x940C) 0010 0000 0000 0000 (0x2000) Nguyễn Lý Thiên Trường Cấu trúc mã lệnh của lệnh JMP k Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 k = 2000H
  • 24. 23 3.2.6 Định địa chỉ gián tiếp bộ nhớ FLASH ▪ Truy xuất dữ liệu gián tiếp từ bộ nhớ chương trình: • Một địa chỉ trong bộ nhớ chương trình (FLASH) cần được truy xuất sẽ đặt trực tiếp vào thanh ghi Z tại các vị trí MSBs. Vì tổ chức của bộ nhớ chương trình là một từ 16 bit, nên nội dung cần truy xuất sẽ chọn dữ liệu là byte thấp hoặc byte cao của địa chỉ cần truy xuất, việc này được xác định bởi bit LSB của thanh ghi Z. • Phương pháp này được sử dụng trong các câu lệnh: LPM; LPM Rd,Z; LPM Rd,Z+ hay SPM. Tuy nhiên, lệnh SPM không hoàn toàn có sẵn trong tất cả các chip của họ AVR (ATmega324P có hỗ trợ lệnh SPM). • Khi lệnh LPM không có toán hạng thì R0 là thanh ghi đích được hiểu ngầm trong lệnh. Trong trường hợp này, mã máy cố định là: 0x95C8. Ví dụ: Đọc byte thấp của ô nhớ FLASH có địa chỉ $0001 về R0 LDI ZH, HIGH(0x0001 << 1) LDI ZL, LOW(0x0001 << 1) LPM Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 địa chỉ byte thấp sẽ gấp đôi địa chỉ word, còn địa chỉ byte cao thì = địa chỉ byte thấp + 1 1 2 sau 2 cậu lệnh 1 và 2 thì z = 0x0002
  • 25. 24 3.2.6 Định địa chỉ gián tiếp bộ nhớ FLASH ▪ Truy xuất gián tiếp địa chỉ bộ nhớ chương trình: • Trong phương pháp định địa chỉ này, thanh ghi PC được nạp địa chỉ thực thi gián tiếp qua thanh ghi Z. • Phương pháp định địa chỉ gián tiếp qua thanh ghi Z sử dụng trong các lệnh IJMP và ICALL, không có toán hạng và mã máy là 1 giá trị cố định: IJMP (0x9409) và ICALL (0x9509). • Định vị địa chỉ này còn gọi là định vị địa chỉ tuyệt đối (Absolute Adressing). Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385
  • 26. 25 3.2.7 Định địa chỉ tương đối ▪ Định địa chỉ tương đối không điều kiện: Phương pháp này được sử dụng trong các lệnh RJMP và RCALL. Toán hạng trong lệnh là một nhãn hoặc một địa chỉ nằm trong phạm vi một độ dời tương đối k (hay offset), với k là 1 số có dấu 12 bit so với PC của lệnh kế, có giá trị từ -2048 đến +2047. Địa chỉ đích = PC lệnh kế + k ▪ Cấu trúc mã lệnh RCALL (Relative Call to Subroutine): ▪ Cấu trúc mã lệnh RJMP (Relative Jump): Ví dụ: tính mã máy cho lệnh RCALL DELAY, giả sử rằng lệnh RCALL đặt tại địa chỉ 2000H và nhãn DELAY đặt tại 200BH. → PC lệnh hiện tại (lệnh RCALL DELAY) là 2000H → PC của lệnh kế là 2001H (vì lệnh RCALL dài 1 word) → k (hay offset) = 12 bit của kết quả (200BH – 2001H) = +10 (số thập phân). → Mã máy (hay mã lệnh) tương ứng của lệnh RCALL DELAY là: 1101 0000 0000 1010. Nguyễn Lý Thiên Trường Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 12 bit độ dời có dấu bù 2 chỉ lấy 12bit của kết quả 200BH-2001H +10 là 12bit có dấu bù 2 mà 10 là 1010
  • 27. 26 3.2.7 Định địa chỉ tương đối ▪ Định địa chỉ tương đối có điều kiện: Phương pháp này áp dụng cho các lệnh nhảy có điều kiện xét theo các bit cờ trạng thái thanh ghi SREG hoặc so sánh giữa 2 thanh ghi. Độ lệch k (offset) là số có dấu 7 bit nên k = -64 ÷ +63, do đó địa chỉ đích giới hạn trong vùng: (PC lệnh kế - 64) ≤ địa chỉ đích ≤ (PC lệnh kế + 63); đc đích = PC lệnh kế + k ▪ Cấu trúc mã lệnh cho các lệnh rẽ nhánh có điều kiện: Ví dụ: lệnh BRVS LOOP, lệnh này sẽ rẽ nhánh đến nhãn LOOP khi cờ tràn V trong thanh ghi SREG bằng 1. Giả sử lệnh được đặt tại địa chỉ 50H và nhãn LOOP đặt tại 40H, lệnh này có OP-CODE là 111100. Ta có k = 7 bit của (địa chỉ đích – PC lệnh kế) = 7 bit của (40H– 51H) = 1101111. Cờ V có vị trí ở bit 3 của thanh ghi SREG nên ta sẽ có mã máy tương ứng của lệnh là: 1111 0011 0111 1011. Vị trí cờ trong thanh ghi SREG Mã lệnh (ví dụ: BRVS → 111100) Độ dời (hay offset): 7 bit có dấu SREG: Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 7 bit có dấu bù 2
  • 28. 27 3.2.8 Định địa chỉ bit ▪ Định địa chỉ bit theo BYTE: Phương pháp định địa chỉ này được sử dụng trong các lệnh xử lý bit đối với các bit có địa chỉ bit thuộc các thanh ghi I/O có địa chỉ từ 001FH (thuộc vùng thanh ghi I/O cơ bản), hoặc bit của nhóm thanh ghi GPRs. ▪ Địa chỉ của toán hạng được xác định chính là địa chỉ bit và địa chỉ thanh ghi tương ứng trong toán hạng của lệnh. ▪ Phương pháp này được sử dụng cho 2 nhóm lệnh: nhóm lệnh chỉ tác động trên các bit của các thanh ghi I/O cơ bản (đ/c 001FH) gồm các lệnh SBI và CBI; nhóm còn lại là 2 lệnh BST và BLD, liên quan đến bit T của thanh ghi SREG và các bit của các thanh ghi GPRs, trong trường hợp này địa chỉ của bit T được hiểu ngầm trong mã lệnh. Nguyễn Lý Thiên Trường Ví dụ: lệnh SBI PORTA,6 sẽ đặt bit 6 (110) của thanh ghi PORTA lên 1 (địa chỉ I/O tương ứng của PORTA là 00010). Ta có mã máy của lệnh là: 1001 1010 0001 0110. Lệnh BLD R3,7 thực hiện lấy nội dung của bit T trong thanh ghi SREG lưu vào bit 7 (111) của thanh ghi R3. Ta có mã máy tương ứng của lệnh là: 1111 1000 0011 0111. Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 (R0-R31) bi là mã hóa vị trí của bit trong thanh ghi đa dụng
  • 29. 28 3.2.8 Định địa chỉ bit ▪ Định địa chỉ bit theo BIT: Phương pháp định địa chỉ BIT theo BIT chỉ được thực hiện trên các bit của thanh ghi SREG, thực hiện trên các lệnh đặt/xóa cờ BSET/BCLR hoặc SE/CL. Nguyễn Lý Thiên Trường Ví dụ: lệnh BCLR 0 hoặc CLC cả 2 lệnh đều thực hiện việc xóa cờ Carry trong thanh ghi SREG, có mã máy là 1001 0100 1000 1000. b7 = 1: lệnh BCLR/CL b7 = 0: lệnh BSET/SE Downloaded by tran ivan (ivantrantien123@gmail.com) lOMoARcPSD|36009385 vị trí của cờ C trong SREG là 0