You are on page 1of 58

Chƣơng 3

TẬP LỆNH ATmega324P

- Các phƣơng pháp định địa chỉ.


- Các nhóm lệnh.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
CÁC PHƢƠNG PHÁP ĐỊNH ĐỊ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:
- Thanh ghi đơn.
- Thanh ghi.
- Dữ liệu(SRAM) trực tiếp.
- Dữ liệu(SRAM) gián tiếp.
- FLASH trực tiếp.
- FLASH gián tiếp.
- Định vị tƣơng đối.
- Định vị BIT
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PHƢƠNG PHÁP THANH GHI ĐƠN - 1
GPRs
11 bits 5 bits
0
Từ gợi nhớ Toán hạng Tác vụ
OP-CODE Rd
INC Rd  Rd +1
Rd
I
DEC Rd  Rd -1
{d:031} d
VD: INC R2
DEC R16
31

16 bit Opcode
INC 1001 010d dddd 0011
DEC 1001 010d dddd 1010

INC 1001 0100 0010 0011 0x9423


DEC 1001 0101 0000 1010 0x950A

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
PHƢƠNG PHÁP THANH GHI ĐƠN - 2
GPRs
4 bits 8 bits 5 bits
0
Từ gợi nhớ Toán hạng Tác vụ
OP Immediate Rd
LDI Rd  K
Rd,K
SUBI I Rd  Rd - K
{d:1631, K:0255} d

VD: LDI R16,200


SUBI R20,5
31

16 bit Opcode
LDI 1110 KKKK dddd KKKK
SUBI 0101 KKKK dddd KKKK

LDI 1110 1100 0000 1000 0xEC08


SUBI 0101 0000 0100 0101 0x5045
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PHƢƠNG PHÁP THANH GHI
6 bits 5 bits 5 bits GPRs
0

Từ gợi nhớ Toán hạng Tác vụ OP Rr Rd


MOV Rd  Rr
Rd,Rr
ADD I Rd  Rd+Rr
d
{d,r:031}
VD: MOV R2,R3
ADD R1,R16

31

16 bit Opcode
MOV 0010 11rd dddd rrrr
ADD 0000 11rd dddd rrrr

MOV 0010 1100 0010 0011 0x2C23


ADD 0000 1110 0001 0000 0x0E10
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PHƢƠNG PHÁP TRỰC TIẾP – I/ORs
5 bits 5 bits 6 bits GPRs
0

Từ gợi nhớ Toán hạng Tác vụ OP Rd/Rr P


IN Rd,P Rd  P
OUT P,Rr I P  Rr
P
{d,r:031, P:063}
VD: IN R3,PINB {PINB$3}
OUT PORTC,R7 {PORTC$8}

63

16 bit Opcode
IN 1011 0AAd dddd AAAA
OUT 1011 1AAr rrrr AAAA

IN 1011 0000 0011 0011 0xB033


OUT 1011 1000 0111 1000 0xB878
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PHƢƠNG PHÁP TRỰC TIẾP – DATA SRAM
11 bits 5 bits SRAM
0
Từ gợi nhớ Toán hạng Tác vụ OP Rr/Rd
LDS Rd,k Rd  k Data address
STS k,Rr I k  Rr
{d,r:031, k:08FFH} k

VD: STS $100,R16

RAMEND 8FF

32 bit Opcode
1001 001d/r dddd/rrrr 0000
kkkk kkkk kkkk kkkk

1001 0011 0000 0000 0x9300


0000 0001 0000 0000 0x0100
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PHƢƠNG PHÁP GIÁN TIẾP – DATA SRAM
11 bits 5 bits SRAM
0
Từ gợi nhớ Toán hạng Tác vụ OP(X,Y,Z) Rr/Rd
LDD Rd,Rx Rd  (Rx)
STD Rx,RrI (Rx)  Rr
{d,r:031, Rx:X,Y,Z} k
X=R27:R26, Y=R29:R28, Z=R31:R30
VD: LD R10,X
ST Y,R20

RAMEND 8FF

16 bit Opcode
LD (X) 1001 000d dddd 1100
ST (Y) 1000 001r rrrr 1000

LD (X) 1001 0000 1010 1100 0x90AC


ST (Y) 1000 0011 0100 1000 0x8348
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PP GIÁN TIẾP (Rx)+ - DATA SRAM
11 bits 5 bits
SRAM
Từ gợi nhớ Toán hạng Tác vụ OP(X,Y,Z) Rr/Rd 0
LD Rd,Rx+ Rd(Rx), RxRx+1
ST Rx+,Rr I (Rx)  Rr, RxRx+1
{d,r:031, Rx:X,Y,Z}
X=R27:R26, Y=R29:R28, Z=R31:R30 k
+
VD: LD R10,X+
ST Z+,R20
X,Y,Z
8FF
RAMEND

16 bit Opcode
LD (X+) 1001 000d dddd 1101
ST (Z+) 1001 001r rrrr 0001

LD (X+) 1001 0000 1010 1101 0x90AD


ST (Z+) 1001 0011 0100 0001 0x9341
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PP GIÁN TIẾP -(Rx) - DATA SRAM
11 bits 5 bits
SRAM
Từ gợi nhớ Toán hạng Tác vụ OP(X,Y,Z) Rr/Rd 0
LD Rd,-Rx RxRx-1, Rd(Rx)
ST -Rx,Rr I RxRx-1, (Rx)  Rr
{d,r:031, Rx:X,Y,Z} -1 +
X=R27:R26, Y=R29:R28, Z=R31:R30 k
VD: LD R10,-Y
ST -Z,R20
RAMEND 8FF

16 bit Opcode
LD (-Y) 1001 000d dddd 1010
ST (-Z) 1001 001r rrrr 0010

LD (-Y) 1001 0000 1010 1010 0x90AA


ST (-Z) 1001 0011 0100 0010 0x9342
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PP GIÁN TIẾP (Rx+q) - DATA SRAM
5 bits 5 bits 6 bits
SRAM
Từ gợi nhớ Toán hạng Tác vụ 0
OP(X,Y,Z) Rr/Rd q
LDD Rd,Rx+q RxRx-1, Rd(Rx)
STD Rx+q,Rr I RxRx-1, (Rx)  Rr
+
{d,r:031, Rx:Y,Z,q:063}
X=R27:R26, Y=R29:R28, Z=R31:R30 k
VD: LDD R10,Y+5
STD Z+50,R20
RAMEND 8FF

16 bit Opcode
LDD (Y+q) 10q0 qq0d dddd 1qqq
STD (Z+q) 10q0 qq1r rrrr 0qqq

LDD (Y+q) 1000 0000 1010 1101 0x80AD


STD (Z+q) 1010 1011 0100 0010 0xAB42
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
PP TRỰC TIẾP - FLASH
10 bits 6 bits FLASH
0
Từ gợi nhớ Toán hạng Tác vụ
OP 6MSB
JMP
k I PCk k
CALL
{k:03FFF} k

VD: JMP LABEL {LABEL=0x2000} PC

22 bits
FLASHEND 3FFF

32 bit Opcode
1001 010k kkkk 110k
JMP
kkkk kkkk kkkk kkkk

1001 0100 0000 1100 0x940C


JMP
0010 0000 0000 0000 0x2000
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 DỮ LIỆU
FLASH
0
Từ gợi nhớ Toán hạng Tác vụ Z LSB
/ R0(Z)
LPM Rd,Z I Rd(Z) 1 0
Rd,Z+ Rd(Z), Z  Z+1
{d:031}
VD: LPM R5,Z k
LPM R18,Z+

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
/ PCZ
ICALL
k

PC

22 bits
FLASHEND 3FFF

16 bit Opcode cố định


IJMP 1001 0100 0000 1001 0x9409
ICALL 1001 0101 0000 1001 0x9509

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
PP ĐỊNH VỊ TƢƠNG ĐỐI KHÔNG ĐIỀU KIỆN
FLASH
PC
0

Từ gợi nhớ Toán hạng Tác vụ


RJMP k
PCPC+k+1 1 + k
RCALL I
(LABEL)
4bits 12 bits
{K=PC+k+1,
k(OFFSET):2KW  -20482047}
OP k

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 (-20482047)  MÃ MÁY: 0xC0FE

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
PP ĐỊNH VỊ TƢƠNG ĐỐI CÓ ĐIỀU KIỆN
SRAM
PC
0
Từ gợi nhớ Toán hạng Tác vụ
BRBS (SREG)s=1:
s,k
BRBC PCPC+k+1 1 + SREG k

{k: -6463}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 TRr(b)/Rd(b) T
{r,d: 031, b: 07} 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

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
PP ĐỊNH VỊ BIT – BIT THEO BIT
13bits 3bits
SRAM

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: 07}

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

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
TẬP LỆNH AVR-ATmega324P
Các ký hiệu đƣợc sử dụng trong tập lệnh

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

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
TẬP LỆNH AVR-ATmega324P

Các thanh ghi và toán hạng trong lệnh


Rd: thanh ghi đích trong tập thanh ghi
Rr: thanh ghi nguồn
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: T.ghi địa chỉ gián tiếp
P: địa chỉ các I/O REGs cơ bản.
q: độ dời hoặc địa chỉ trực tiếp (6-bit)

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
CÁC NHÓM LỆNH AVR

Các lệnh của AVR được chia làm 6 nhóm lệnh:


- Nhóm lệnh di chuyển dữ liệu.
- Nhóm lệnh số học.
- Nhóm lệnh logic.
- Nhóm lệnh rẽ nhánh.
- Nhóm lệnh xử lý bit.
- Nhóm lệnh điều khiển MCU.

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
NHẮC LẠI VỀ TỔ CHỨC BỘ NHỚ SRAM CỦA ATmega324P
R0 GPRs
SRAM
Phân vùng …… (General
(MEM)
Purpose
$0000 R31 Registers)
GPRs
…… (General Purpose
$001F Registers)
Đ.chỉ I/O
$0020 I/O REGs PINA $00
…. (Special Function …… …
$005F Register-SFRs)
SREG $3F
$0060
Ext I/O REGs
…. ADCL, ADCH,…
(SFRs)
TCNT1L, TCNT1H….
$00FF
$0100 DATA
… (k)
$08FF
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

SRAM FLASH
(Data memory) (Program memory)

st, std, sts lpm

ld, ldd, lds GPRs mov, movw


(General purpose
registers)
in
push pop
out
Standard ldi
I/O space(IORs) Stack

Constant

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
Vùng GPRs

LDI Rd,K {Rd  K}


d:1631, K:0 255(FF)

GPRs MOV Rd,Rr {Rd  Rr}


d,r:031

MOVW Rd+1:Rd, Rr+1:Rr


MOVW Rd, Rr
{Rd+1:Rd  Rr+1:R }
d,r(0,2,…28,30)

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
DATA SRAM GPRs
Rx, Rr {(Rx)  Rr}
Rd,Rx {Rd (Rx)}

ST -Rx, Rr {Rx = Rx - 1 , (Rx - 1)  Rr }


LD Rd, -Rx {Rx = Rx - 1 , Rd  (Rx -1)}

Rx +, Rr{Rx  Rr , Rx =(Rx + 1) }
Rd, +Rx {Rd (Rx), Rx =(Rx + 1) }
d,r:031, Rx:X,Y,Z

STD Rx + q, Rr {(Rx+q )  Rr}


LDD Rd, Rx + q {Rd(Rx+q )}, d,r:031, Rx:Y,Z, q:063

STS k, Rr {(k)Rr }
LDS Rd, k {Rd (k) } ,d,r:031, 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:031, P:0 $3F
Flags: None

STACK GPRs

PUSH Rr {Stack  Rr , SP  SP-1}


POP Rd {RdStack, SP  SP+1 }
r,d:031
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
FLASH  GPRs

LPM {R0  (Z) }

LPM Rd,Z {Rd  (Z) }

LPM Rd,Z+ {Rd  (Z), Z Z+1}

d:031, Z:03FFF, Zmax:FFFF

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 Byte THẤP dữ liệu :


LDI ZH, HIGH(ADDR<<1) ;dịch trái địa chỉ 1 bit
LDI ZL, LOW (ADDR<<1) ;  LSB(Z)=0

Đọc byte CAO dữ liệu :


LDI ZH, HIGH((ADDR<<1)|1) ;(ADDR<<1) OR (0b1)
LDI ZL, LOW ((ADDR<<1)|1) ;  LSB(Z)=1

Những lƣu ý khi viết 1 câu lệnh


- Điều kiện sử dụng?
- Kết quả nhận được sau khi thực thi lệnh?
- Cờ nào trong thanh ghi SREG bị tác động?
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
ÁP DỤNG:
Viết chương trình tạo chuỗi data là TÊN tương ứng của SV trong
vùng FLASH có địa chỉ bắt đầu tại nhãn MYDATA. Sau đó ghi
chuỗi data này vào vùng SRAM bắt đầu từ địa chỉ $100.
a. Thực hiện việc ghi dữ liệu vào SRAM theo pp trực tiếp.
b. Thực hiện việc ghi dữ liệu vào SRAM theo pp gián tiếp qua
thanh ghi con trỏ.
c. Thực hiện việc ghi dữ liệu vào SRAM theo pp gián tiếp với hậu
tố cộng(tự động tăng).
d. Thực hiện việc ghi dữ liệu vào SRAM theo pp gián tiếp với tiền
tố trừ(tự động giảm).

Lƣu ý: chỉ sử dụng các lệnh trong nhóm di chuyển dữ liệu!!!

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH SỐ HỌC

Chỉ thực hiện trên nhóm các thanh ghi GPRs

- CỘNG
- TRỪ
- NHÂN: số nguyên, số lẻ
- TĂNG THANH GHI
- GIẢM THANH GHI

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH SỐ HỌC

ADD Rd,Rr {Rd=Rd+Rr}

ADC Rd,Rr {Rd=Rd+Rr+C}


d,r:031
Flags: H,S,V,N,Z,C
CỘNG

ADIW Rdl,K
{Rdh:Rdl= (Rdh:Rdl) +K}
dl:24,26,28,30; K=0  $3F
Flags: S,V,N,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
SUB Rd,Rr {Rd=Rd-Rr}
TRỪ SBC Rd,Rr {Rd=Rd-Rr - C}
d,r:031
SUBI Rd,K {Rd=Rd-K}
SBCI Rd,K {Rd=Rd-K-C}
d:1631 ,K:0255
Flags: H,S,V,N,Z,C
SBIW Rd+1:Rd,K
{Rd+1:Rd= (Rd+1:Rd) - K}
d:24,26,28,30, K=0  63
Flags: S,V,N,Z,C

TĂNG INC Rd {Rd=Rd+1}

GIẢM DEC Rd {Rd=Rd-1}


d:031
Flags: S,V,N,Z
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH SỐ HỌC
MUL Rd,Rr {Rd,Rr: unsigned}
d,r: 031
MULS Rd,Rr {Rd,Rr: signed}
MULSU Rd,Rr {Rd: signed, Rr: unsigned}
d,r: 1631

NHÂN KQ: R1_R0(HIGH_LOW)  Rd*Rr

FMUL Rd,Rr {Rd,Rr: unsigned}


FMULS Rd,Rr {Rd,Rr: signed}
FMULSU Rd,Rr {Rd: signed, Rr:unsigned}
d,r: 1623

KQ: R1_R0(HIGH_LOW)  Rd*Rr

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.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH SỐ HỌC
ÁP DỤNG:

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.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH LOGIC
Thực hiện các phép toán logic theo bit trong nhóm thanh ghi GPRs.
- AND
- OR
- EX-OR
- LẤY BÙ 1
- LẤY BÙ 2
- ĐẶT/XÓA cả thanh ghi
- ĐẶT/XÓA một số bit trong thanh ghi
- KIỂM TRA giá trị trong t.ghi(bằng 0?, số âm/dương?).

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH LOGIC

AND Rd,Rr {Rd = Rd & Rr }


AND d,r:031
ANDI Rd,K {Rd = Rd & K}
d:1631, K=0 255

OR Rd,Rr {Rd = Rd | Rr }
OR d,r:031
ORI Rd,K {Rd = Rd | K}
d:1631, K=0 255

EX-OR EOR Rd,Rr {Rd = Rd  Rr}


d,r:031

Flags: S,V=0,N,Z

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH LOGIC

BÙ 1 COM Rd {Rd = $FF - Rd }


d:031
Flags: S,V=0,N,Z,C=1

BÙ 2 NEG Rd {Rd = $00 - Rd }


d:031
Flags: H,S,V,N,Z,C

ĐẶT SER Rd {Rd=$FF }


t.ghi d:031
Flags: None

XÓA CLR Rd {Rd=RdRd }


t.ghi d:031
Flags: S=V=N=0, Z=1
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH LOGIC

ĐẶT/XÓA SBR Rd, K {Rd=Rd | K}


1 số bit d:1631, K: 0 255
trong t.ghi
CBR Rd, K {Rd=Rd&($FF-K)}
d:1631, K: 0 255

Flags: S, N, Z, V=0

KIỂM TRA
TST Rd {Rd=Rd&Rd }
n.dung t.ghi d:031
Flags: S, N, Z, V=0

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 NHẢY KHÔNG ĐIỀU KIỆN


- LỆNH NHẢY CÓ ĐIỀU KIỆN: R(b), P(b), SREG(s).
- LỆNH GỌI CHƢƠNG TRÌNH CON
- LỆNH KẾT THÚC CT CON
- LỆNH KẾT THÚC CT PHỤC VỤ NGẮT

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH
JMP k {PC  k }
k: 016K(words),k max: 64K
LỆNH NHẢY RJMP k {PC  PC+k+1}
không điều kiện k: 2K(words)

IJMP {PC  Z }

Flags: None

CP Rd, Rr {Rd - Rr}

SO SÁNH CPC Rd, Rr {Rd - Rr - C}


r,d:031
CPI Rd, K {Rd - K}
d:1631, K:0 255
Flags: H, S, V, N, Z, C
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH

CPSE Rd, Rr {Rd=Rr PC=PC+2(or 3)}


Rẽ nhánh r,d:031
SBRC Rr, b {Rr(b) =0 PC=PC+2(or 3)}
có điều kiện r:031, b:0 7
R(b) SBRS Rr, b {Rr(b) =1 PC=PC+2(or 3)}
r:031, b:0 7
Flags: None

SBIC P, b {R(b) =0  PC= PC+2 (or 3)}


Rẽ nhánh
có điều kiện
P(b) SBIS P, b {R(b) =1  PC= PC+2(or 3)}
b:0 7, P: 031
Flags: None

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH

Rẽ nhánh BRBS s, k {s =1  PC= PC+k+1}


có điều kiện
P(b) BRBC s, k {s =0  PC= PC+k+1}
s:0 7, k: -6463
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

hoặc tên tương ứng như Cờ âm – N 2 SREG_N

bảng bên Cờ tràn bù 2 - V 3 SREG_V


Cờ dấu - S 4 SREG_S
Cờ nhớ phân nữa - H 5 SREG_H
Cờ sao chép - T 6 SREG_T
Cờ cho phép ngắt - I 7 SREG_I
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH
BRCS k {C =1  PC= PC+k+1 }
BRCC k {C =0  PC= PC+k+1 }
BREQ k {Z =1  PC = PC+k+1 }
BRNE k {Z =0  PC = PC+k+1 }
BRMI k {N =1  PC = PC+k+1 }
BRPL k {N =0  PC = PC+k+1 }
BRVS k {V =1  PC = PC+k+1 }
BRVC k {V =0  PC = PC+k+1 }
BRHS k {H =1  PC = PC+k+1 }
BRHC k {H =0  PC = PC+k+1 }
BRTS k {T =1  PC = PC+k+1 }
BRTC k {T =0  PC = PC+k+1 }
BRIE k {I =1  PC = PC+k+1 }
BRID k {I =0  PC = PC+k+1 }, k: -6463
Flags: None
Tương đương với các lệnh phía trên nhưng cờ được xét không cần có
trong toán hạng mà đã có sẵn trong mã lệnh.
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH

BRSH k {C =0  PC= PC+k+1 }


(rẽ nhánh nếu lớn hơn/bằng)

BRLO k {C =1  PC= PC+k+1 }


(rẽ nhánh nếu nhỏ hơn)

BRGE k {S =0  PC= PC+k+1}


(rẽ nhánh nếu lớn hơn/bằng)

BRLT
GỢI {S =1  PC= PC+k+1}
k THUẬT
Ý GIẢI
(rẽ nhánh nếu nhỏ hơn)
k: -6463
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

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH RẼ NHÁNH
CALL k {PC  k }
k: 016K(words), max: 64K

GỌI CTC RCALL k {PC  PC+k+1}


k: 2K(words)

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

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 trở về từ CTC và CT phục vụ ngắt

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

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
ÁP DỤNG ĐỂ VIẾT CTC DELAY
DELAY:
LDI R16, 0xFF ;1MC (m)
AGAIN:
NOP ;1MC
NOP ;1MC
DEC R16 ;1MC
BRNE AGAIN ;(2/1)MC
RET ;4MC

Tính chính xác thời gian thực hiện CTC trên:


1 + (1 + 1 + 1)*255 + 2*254 + 1 + 4 = 1279 MC
Tùy thuộc vào tần số hoạt động của hệ thống sẽ tính được thời gian trễ cụ thể của
CTC trên.

Tính gần đúng:


(1+1+1+2)*m  5m MC  1275 MC
Lưu ý: giá trị nạp tối đa của m là FFH(255).

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
ÁP DỤNG ĐỂ VIẾT CTC DELAY
SỬ DỤNG NHIỀU VÒNG LẶP CHO THỜI GIAN LỚN HƠN 255 MC:
DELAY:
LDI R21,80 ;1MC
L1: LDI R20,250 ;1MC
L2: DEC R20 ;1MC
NOP ;1MC
BRNE L2 ;2/1MC
DEC R21 ;1MC
BRNE L1 ;2/1MC
RET ;4MC
Tính chính xác thời gian thực hiện CTC trên:
=1+{[1+(1+1)*250+2*249+1]+1}*80+2*79+1+4
= 80244 MC

Tính gần đúng:


Vòng L2: (1+1+2)*250 = 1000
Vòng L1: 80
Cả 2 vòng:1000*80 = 80000 MC
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH XỬ LÝ BIT
- ĐẶT/XÓA BIT TRONG CÁC THANH GHI IO CƠ BẢN
- ĐẶT/XÓA CÁC BIT CỜ TRONG SREG
- DỊCH, XOAY, HOÁN ĐỔI 2 NỮA BYTE (NIBBLE) TRONG
GPRs

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.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH XỬ LÝ BIT
ĐẶT/XÓA bit(b) trong một số các thanh ghi IO CƠ BẢN
SBI P, b {IO REGs(P,b)  1}

CBI P, b {IO REGs(P,b)  0}


b:0 7, P: 031 Flags: None
ĐẶT/XÓA cờ(s) tương ứng trong SREG
BSET s { SREG(s)  1 }

BCLR s { SREG(s)  0 }
s:07 Flags: S=V=N=0, Z=1

SAO CHÉP giữa bit T (SREG) và bit b (GPRs)


BST Rr, b { T Rr(b) }
Flags: T
BLD Rd, b {Rd(b) T }
d,r:031, b:07 Flags: None
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH XỬ LÝ BIT
ĐẶT/XÓA cờ tương ứng trong SREG

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 }

Flags: cờ tương ứng

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NHÓM LỆNH ĐIỀU KHIỂN CPU

- NOP
- SLEEP
- WDR
- BREAK

- Các lệnh trên đều không sử dụng toán hạng.


- Điều khiển trạng thái hoạt động tương ứng cho CPU với
các chức năng đặc biệt.
- Cần tham khảo chi tiết trong tập lệnh cho những ứng dụng
cụ thể.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NGUYÊN TẮC TRUY XUẤT VÙNG EEPROM
Sử dụng các thanh ghi điều khiển sau:
- EEARH:EEARL  địa chỉ cần truy xuất.
- EEDR  DATA cần xử lý.
- EECR  điều khiển truy xuất (ĐỌC/GHI)

* EEAR

* EEDR

* EECR

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NGUYÊN TẮC TRUY XUẤT VÙNG EEPROM

* 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.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NGUYÊN TẮC TRUY XUẤT VÙNG EEPROM

* ĐỌ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.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh
Chƣơng 3
NGUYÊN TẮC TRUY XUẤT VÙNG EEPROM

Á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.

Bài giảng môn Vi xử lý


GV: Lê Thị Kim Anh

You might also like