Professional Documents
Culture Documents
16 bit Opcode
INC 1001 010d dddd 0011
DEC 1001 010d dddd 1010
16 bit Opcode
LDI 1110 KKKK dddd KKKK
SUBI 0101 KKKK dddd KKKK
31
16 bit Opcode
MOV 0010 11rd dddd rrrr
ADD 0000 11rd dddd rrrr
63
16 bit Opcode
IN 1011 0AAd dddd AAAA
OUT 1011 1AAr rrrr AAAA
RAMEND 8FF
32 bit Opcode
1001 001d/r dddd/rrrr 0000
kkkk kkkk kkkk kkkk
RAMEND 8FF
16 bit Opcode
LD (X) 1001 000d dddd 1100
ST (Y) 1000 001r rrrr 1000
16 bit Opcode
LD (X+) 1001 000d dddd 1101
ST (Z+) 1001 001r rrrr 0001
16 bit Opcode
LD (-Y) 1001 000d dddd 1010
ST (-Z) 1001 001r rrrr 0010
16 bit Opcode
LDD (Y+q) 10q0 qq0d dddd 1qqq
STD (Z+q) 10q0 qq1r rrrr 0qqq
22 bits
FLASHEND 3FFF
32 bit Opcode
1001 010k kkkk 110k
JMP
kkkk kkkk kkkk kkkk
FLASHEND 3FFF
16 bit Opcode
LPM Rd,Z 1001 000d dddd 0100
LPM Rd,Z+ 1001 000d dddd 0101
LPM 0x95C8
LPM R5,Z 1001 0000 0101 0100 0x9054
LPM R7,Z+ 1001 0000 0111 0101 0x9075
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PP GIÁN TIẾP FLASH – TRUY XUẤT ĐỊA CHỈ
FLASH
0
Từ gợi nhớ Toán hạng Tác vụ
IJMP I Z
/ PCZ
ICALL
k
PC
22 bits
FLASHEND 3FFF
FLASHEND 3FFF
16 bit Opcode
RJMP 1100 kkkk kkkk kkkk
RCALL 1101 kkkk kkkk kkkk
VD: Tính mã máy cho lệnh RJMP LABEL. Giả sử địa chỉ của lệnh và nhãn
LABEL lần lượt đặt tại 0x2000 và 0x20FF.
K=0x20FF k=K-(PC+1)=0xFE (-20482047) MÃ MÁY: 0xC0FE
{k: -6463}I
6bits 7 bits 3bits
PP này cũng sử dụng trong lệnh CPSE Rd,Rr
hoặc các lệnh rẽ nhánh xác định riêng cho từng OP k s
cờ trong thanh ghi SREG: BREQ(Z=1),
BRCS(C=1).. RAMEND 8FF
SREG: I T H S V N Z C
16 bit Opcode
BRBS 1111 00kk kkkk ksss
BRBC 1111 01kk kkkk ksss
CPSE 0001 00rd dddd rrrr
VD: Tính mã máy cho lệnh BRBS 3,LABEL. Giả sử địa chỉ của lệnh và nhãn LABEL
lần lượt đặt tại 0x50và 0x40.
k =LABEL-(PC+1)=0xEF(k=-17=1101111) MÃ MÁY: 0xF37B
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PP ĐỊNH VỊ BIT – BIT THEO BYTE
8bits 5 bits 3bits
SRAM
OP P/Rd/Rr b 0
Từ gợi nhớ Toán hạng Tác vụ
Rd/Rr 001F
SBI/CBI P,b I IO(P,b)1/0
BST/BLD Rr/Rd,b TRr(b)/Rd(b) T
{r,d: 031, b: 07} P
005F
RAMEND 8FF
16 bit Opcode
SBI 1001 1010 AAAA Abbb
CBI 1001 1000 AAAA Abbb
BST 1111 101r rrrr 0bbb
BLD 1111 100d dddd 0bbb
OP s 0
Từ gợi nhớ Toán hạng Tác vụ
BSET/BCLR s SREG(s)1/0
SREG 005F
I
SEC/CLC / C(Carry)1/0
SEZ/CLZ Z(Zero)1/0
……
{s: 07}
RAMEND 3FFF
SREG: I T H S V N Z C
16 bit Opcode
BSET 1001 0100 0sss 1000
BCLR 1001 0100 1sss 1000
SEC 1001 0100 0000 1000
CLC 1001 0100 1000 1000
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 = 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
SRAM FLASH
(Data memory) (Program memory)
Constant
Flags: None
Rx +, Rr{Rx Rr , Rx =(Rx + 1) }
Rd, +Rx {Rd (Rx), Rx =(Rx + 1) }
d,r:031, Rx:X,Y,Z
STS k, Rr {(k)Rr }
LDS Rd, k {Rd (k) } ,d,r:031, k:0 $8FF
Flags: None
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH DI CHUYỂN DỮ LIỆU
I/O CƠ BẢN GPRs
IN Rd,P {Rd P }
OUT P,Rr {P Rr }
r:031, P:0 $3F
Flags: None
STACK GPRs
Flags: None
CHÚ Ý:
- Không có lệnh chuyển dữ liệu từ GPRs vào FLASH.
- Có thể tạo data trong vùng FLASH bằng cách sử dụng các chỉ
dẫn của trình biên dịch như DB, DW, DD & DQ (tham khảo
chương 4).
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH DI CHUYỂN DỮ LIỆU
SỬ DỤNG CHỈ DẪN CỦA LẬP TRÌNH HỢP NGỮ ĐỂ NẠP
ĐỊA CHỈ VÀO Z
- CỘNG
- TRỪ
- NHÂN: số nguyên, số lẻ
- TĂNG THANH GHI
- GIẢM THANH GHI
ADIW Rdl,K
{Rdh:Rdl= (Rdh:Rdl) +K}
dl:24,26,28,30; K=0 $3F
Flags: S,V,N,Z,C
Flags: Z,C
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH SỐ HỌC
LƢU Ý TRONG PHÉP NHÂN:
Định dạng số lẻ:
- Ngầm hiểu dấu chấm cơ số nằm giữa bit 7 và 6 của 2 thanh ghi
Rd,Rr.
VD: 0.5 = 0.100 0000B Rd,r =40H
-0.5 = 1.100 0000B Rd,r =C0H
- Kết quả của phép toán là một giá trị 16bit đặt trong 2 thanh ghi
R1(HIGH)_R0(LOW) thì dấu chấm cơ số được ngầm hiểu giữa bit
15 và 14.
1. Viết chương trình cộng 2 số không dấu nhận được từ 2 cổng portA
và portB.
a. Giả sử kết quả của phép toán không lớn hơn FFH. Kết quả cất
vào vùng DATA_SRAM tại địa chỉ $200.
b. Trong trường hợp tổng quát(giả sử phép toán có thể lớn hơn
FFH) thì cất kết quả vào địa chỉ đầu là $200H.
2. Viết chương trình thực hiện phép nhân 2 số nguyên không dấu 8 bit
được đặt tại 2 ô nhớ $200H và $201H trong vùng DATA_SRAM.
Kết quả xuất ra các cổng IO của vi điều khiển là portA và portB.
Trong đó byte cao và byte thấp lần lượt xuất ra vị trí tương ứng của
portA và portB.
OR Rd,Rr {Rd = Rd | Rr }
OR d,r:031
ORI Rd,K {Rd = Rd | K}
d:1631, K=0 255
Flags: S,V=0,N,Z
Flags: S, N, Z, V=0
KIỂM TRA
TST Rd {Rd=Rd&Rd }
n.dung t.ghi d:031
Flags: S, N, Z, V=0
IJMP {PC Z }
Flags: None
CÁC CỜ SREG s s
Lƣu ý:
Cờ nhớ - C 0 SREG_C
Toán hạng s trong lệnh có
thể dùng theo chỉ số qui định Cờ không – Z 1 SREG_Z
BRLT
GỢI {S =1 PC= PC+k+1}
k THUẬT
Ý GIẢI
(rẽ nhánh nếu nhỏ hơn)
k: -6463
Flags: None
Dùng trong so sánh lớn hơn/bằng hoặc nhỏ hơn cho số không
dấu(C) và số có dấu (S).
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH
Lệnh gọi chương trình con và trở về từ CTC
Có tác động đến vùng STACK
Khái niệm
Gọi chƣơng trình con
MAIN: ...
CALL SUBLABEL
...
...
SUBLABEL: ...
...
Chƣơng trình con
RET
ICALL {PC Z}
Flags: None
Cất PCHH vào vùng stack(lưu PCL vào (SP) trước, PCH sau)
STACK PC + 1(RCALL,ICALL) +2(CALL)
SP SP – 2
RET
RETI (Flags: I=1)
Lấy lại địa chỉ lệnh kế từ vùng stack (lấy PCH trước)
PC STACK
SP SP + 2
Lƣu ý:
- Các lệnh xử lý bit trên các thanh ghi GPRs đã được trình bày
trong nhóm lệnh logic.
- Vùng RAM nội của AVR không được định vị bit, tập lệnh AVR
cũng không cung cấp các lệnh xử lý bit ở vùng này, nên việc thao
tác lệnh trên các bit của vùng RAM nội phải được xử lý trung gian
qua các thanh ghi GPRs.
BCLR s { SREG(s) 0 }
s:07 Flags: S=V=N=0, Z=1
SEC {C 1 } SES {S 1 }
CLC {C 0 } CLS {S 0 }
SEN {N 1 } SEV {V 1 }
CLN {N 0 } CLV {V 0 }
SEZ {Z 1 } SET {T 1 }
CLZ {Z 0 } CLT {T 0 }
SEI {I 1 } SEH {H 1 }
CLI {I 0 } CLH {H 0 }
- NOP
- SLEEP
- WDR
- BREAK
* EEAR
* EEDR
* EECR
* GHI DATA
1. Chờ bit EEPE=0 chờ EEPROM ở trạng thái sẵn sàng.
2. Đặt địa chỉ truy xuất EEPROM vào EEARH-RRARL.
3. Ghi data vào EEDR.
4. Đặt bit EEMPE=1 cho phép lập trình vào EEPROM.
5. Đặt bit EEPE=1 data được ghi vào EEPROM với địa chỉ tương ứng.
Một số lƣu ý:
- Khi thực thi lệnh đặt EEPE=1 xong, MCU sẽ treo 2 chu kỳ CK
mới thực thi lệnh kế tiếp.
- Khi ghi xong data, phần cứng sẽ xóa bit EEPE=0.
- Thời gian ghi cần khoảng 3.3ms.
* ĐỌC DATA
1. Chờ bit EEPE=0 kiểm tra trạng thái của EEPROM.
2. Đặt địa chỉ truy xuất EEPROM vào EEARH-RRARL.
3. Đặt bit EERE=1
4. Đọc data từ EEPROM qua thanh ghi EEDR với địa chỉ tương ứng.
Một số lƣu ý:
- Khi thực thi lệnh đọc EEPROM, MCU sẽ treo 4 chu kỳ CK mới
thực thi lệnh kế tiếp.
- Sau khi đọc xong data, phần cứng sẽ xóa bit EERE=0.
ÁP DỤNG:
Viết chương trình thực hiện việc ghi chuỗi ký tự tương ứng với tên
của SV vào EEPROM tại địa chỉ 1FFH. Sau đó lần lượt xuất các
ký tự ra portA bắt đầu từ ký tự đầu tiên.