Vi điều khiển 8051 - Chương 1: Giới thiệu AT89C51 - Lê Chí Thông
MSC-51 là một họ IC vi điều khiển (microcontroller), được phát triển chế tạo
và bán ở thị trường bởi hãng INTEL của Mỹ. Các nhà chế tạo IC khác như
SIEMENS của Đức, ADVANCED MICRO DEVICES, FUJITSU của Nhật và
PHILIPS của Hà Lan là các nhà cung cấp thiết bị trong họ MSC-51 được cấp
giấy bản quyền thứ hai, hãng ALMEL cũng là một hãng được cấp bảng quyền
và sản phẩm 8951, 8952 là hai IC tiêu biểu trong thiết kế của họ.
Chúng có các đặt điểm chung như sau:
- 4Kbyte ROM (đựơc lập trình bởi nhà sản xuất, chỉ có ở 8051 ).
- 4Kbyte EPROM ( cho ta có thể lập trình được nhiều lần ”khoảng 1000
lần”, chỉ có ở 8951 ).
- 128 byte RAM .
- 4 port I/O 8 bit.
- 2 bộ định thời 16 bit.
- 64 K không gian bộ nhớ chương trình mở rộng.
- 64 K không gian bộ nhớ dữ liệu mở rộng.
- Một bộ xử lý luận lý (hoạt động trên bít đơn).
- 210 bit được địa chỉ hoá.
- Bộ nhân / chia 4 µs.
((Rn)) ← ((Rn)) +1
INC DPTR : (DPTR) ← (DPTR) +1
DEC
DEC A : (A) ← (A) -1
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
45
DEC direct : (direct) ← (direct) -1
DEC Ri : (Ri) ← (Ri) -1
DEC Rn : (Rn) ← (Rn) –1
MUL AB : (A) ← LOW {(A) x (B)}; có ảnh hưởng cờ OV
(B) ← HIGH {(A) x(B)}; cờ Carry được xóa
DIV AB : (A) ← Integer Result of {(A)/(B)}; cờ Carry xóa
DA A : Điều chỉnh thanh ghi A thành số BCD đúng
trong phép cộng BCD (thường DA A đi kèm với : ADD,
ADDC).
Nếu {(A3 – A0) > 9} và {(AC) =1}→ (A3 ÷ A0) ← (A1 ÷ A0 ) + 6
Nếu {(A7 – A4) > 9} và {(AC) =1}→ (A3 ÷ A0) ← (A7 ÷ A4 ) + 6
2. Các hoạt động logic (Logic Operation) :
Tất cả các lệnh logic sử dụng thanh ghi A như là một trong những toán hạng
thực thi một chu kỳ máy, ngoài A ra mất hai chu kỳ mày. Những hoạt động logic
có thể được thực hiện trên bất kỳ byte nào trong vị trí nhớ dữ liệu nội mà không
qua thanh ghi A.
Các hoạt động logic được tóm tắt như sau :
ALN
ALN A, Rn : (A) ← (A) AND (Rn)
ALN A, direct : (A) ← (A) AND (direct)
ALN A, @Ri : (A) ← (A) AND (Ri)
ALN A, # data : (A) ← (A) AND (# data)
ALN direct, A : (direct) ← (direct) AND (A)
ALN direct, # data : (direct) ← (direct) AND (# data)
ORL
ORL A, Rn : (A) ← (A) OR (Rn)
ORL A, direct : (A) ← (A) OR (direct)
ORL A, @Ri : (A) ← (A) OR (Ri)
ORL A, # data : (A) ← (A) OR (# data)
ORL direct, A : (direct) ← (direct) OR (A)
ORL direct, # data : (direct) ← (direct) OR (# data)
XLR
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
46
XLR A, Rn : (A) ← (A) ⊕ (Rn)
XLR A, direct : (A) ← (A) ⊕ (direct)
XLR A, @Ri : (A) ← (A) ⊕ (Ri)
XLR A, # data : (A) ← (A) ⊕ (# data)
XLR direct, A : (direct) ← (direct) ⊕ (A)
XLR direct, # data : (direct) ← (direct) ⊕ (# data)
CLR A : (A) ← 0
CLR C : (C) ← 0
CLR Bit : (Bit) ← 0
RL A : quay vòng thanh ghi A qua trái 1 bit
(An + 1) ← (An) ; n = 0 ÷ 6
(A0) ← (A7)
RLC A : quay vòng thanh ghi A qua trái 1 bit có cờ carry
(An + 1) ← (An) ; n = 0 ÷ 6
(C) ← (A7)
(A0) ← (C)
RR A : quay vòng thanh ghi A qua phải 1 bit
(An) ← (An + 1) ; n = 0 ÷ 6
(A0) ← (A7)
RLC A : quay vòng thanh ghi A qua trái 1 bit có cờ carry
(An) ← (An + 1) ; n = 0 ÷ 6
(C) ← (A7)
(A7) ← (C)
SWAP A : đổi chỗ 4 bit thấp và 4 bit cao của A
cho nhau (A0 ÷ A3) ↔ (A7 ÷ A4)
3. Các lệnh rẽ nhánh chương trình (lệnh nhảy) :
Có nhiều lệnh để điều khiển chương trình bao gồm việc gọi hoặc trả lại từ
chương trình con hoặc chia nhánh có điều kiện hay không có điều kiện.
Tất cả các lệnh rẽ nhánh đều không ảnh hưởng đến cờ. Ta có thể định nhãn
cần nhảy tới mà không cần định rõ địa chỉ , trình biên dịch sẽ đặt lại địa chỉ nơi
cần nhảy tới vào đúng lệnh đã đưa ra.
Sau đây là tóm tắt hoạt động của lệnh nhảy :
JC rel : nhảy đến “rel” nếu carry set.
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
47
JNC rel : nhảy đến “rel” nếu carry = 0.
JB bit,rel : nhảy đến “rel” nếu bit set.
JNB bit,rel : nhảy đến “rel” nếu bit = 0.
JBC bit,rel : nhảy đến “rel” nếu bit set và xóa bit.
ACALL addr11 : lệnh gọi tuyệt đối trong page 2K
(PC) ← (PC) + 2
(SP) ← (SP) + 1
((SP)) ← (PC7 ÷ PC0)
(SP) ← (SP) + 1
((SP)) ← (PC15 ÷ PC8)
(PC10 ÷ PC0) ← page Address.
LCALL addr16 : lệnh gọi dài chương trình con trong 64K
(PC) ← (PC) + 3
(SP) ← (SP) + 1
((SP)) ← (PC7 ÷ PC0)
(SP) ← (SP) + 1
((SP)) ← (PC15 ÷ PC8)
(PC) ← Ạddr ÷ Addr0.
RET : kết thúc chương trình con và quay về chương trình chính
(PC15 ÷ PC8) ← ((SP))
(SP) ← (SP) – 1
(PC7 ÷ PC0) ← ((SP))
(SP) ← (SP) – 1
RETI :kết thúc thủ tục phục vụ ngắt quay về chương trình chính,
hoạt động tương tự RET.
AJMP Addr11:Nhảy tuyệt đối không điều kiện trong 2K.
(PC) ← (PC) + 2
(PC10 ÷ PC0) ← page Address
AJMP Addr16: Nhảy dài không điều kiện trong 64K.
(PC) ← (PC) + 2
(PC15 ÷ PC0) ← page Address
SJMP rel :nhảy ngắn không điều kiện trong -128 ÷ +127 byte
(PC) ← (PC) + 2
(PC) ← (PC) + byte 2
JMP @A + DPTR :nhảy không điều kiện đến add (A) + (DPTR)
(PC) ← (A) + (DPTR)
JZ rel :nhảy đến A=0. Thực hành lệnh kế nếu A # 0
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
48
(PC) ← (PC) + 2
(A) = 0 → (PC) ← (PC) + 2
JNZ rel :nhảy đến A # 0. Thực hành lệnh kế nếu A = 0
(PC) ← (PC) + 2
(A) # 0 → (PC) ← (PC) + 2byte
CJNE A,direct,rel :so sánh và nhảy đến rel nếu A # direct
(PC ) ← (PC) + 3
(A) (direct) → (PC) ← (PC) + Relative Add
(A) < (direct) → C = 1
(A) > (direct) → C = 0
(A)= direct. Thực hành lệnh kế tiếp
CJNE A,#data,rel :tương tự lệnh CJNE A,direct,rel.
CJNE Rn,#data,rel :tương tự lệnh CJNE A,direct,rel.
CJNE @Ri,#data,rel :tương tự lệnh CJNE A,direct,rel.
DJNZ Rn,rel :giảm Rn và nhảy nếu Rn # 0
(PC) ← (PC) + 2
(Rn) ← (Rn) – 1
(Rn) 0 → (PC) ← (PC) + byte 2
DJNZ direct,rel :tương tự lệnh DJNZ Rn,rel.
4. Các lệnh dịch chuyển dữ liệu :
Các lệnh dịch chuyển dữ liệu trong những vùng nhớ nội thực thi 1 hoặc 2 chu
kỳ máy. Mẫu lệnh MOV cho phép di chuyển dữ liệu bất kỳ 2
vùng nhớ nào của RAM nội hoặc các vùng nhớ của các thanh ghi chức năng đặc
biệt mà không thông qua thanh ghi A.
Vùng stack của 8951 chỉ chứa 128 byte RAM nôi, nếu con trỏ Stack SP được
tăng quá địa chỉ 7FH thì các byte được PUSH vào sẽ mất đi và các byte POP ra
sẽ không biết rõ.
Các lệnh dịch chuyển bộ nhớ nội và bộ nhớ ngoại dùng sự định vị gián tiếp.
Địa chỉ gián tiếp có thể dùng địa chỉ 1 byte (@Ri) hoặc địa chỉ 2 byte (@DPTR).
Tất cả các lệnh dịch chuyển hoạt động trên bộ nhớ ngoài thực thi trong hai chu
kỳ máy và dùng thanh ghi A làm toán hạng SOURCE hoặc toán hạng
DESTINATION.
Việc đọc và ghi RAM ngoài (RD và WR) chỉ tích cực trong suốt quá trình
thực thi của lệnh MOVX, còn bình thường thì RD và WR không tích cực (mức 1).
Tất cả các lệnh dịch chuyển đều không ảnh hưởng đến cờ. Hoạt động của
từng lệnh được tóm tắt như sau :
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
49
MOV A,Rn : (A) ← (Rn)
MOV A,direct : (A) ← (direct)
MOV A,@Ri : (A) ← ((Ri))
MOV A,#data : (A) ← #data
MOV Rn,A : (Rn) ← (A)
MOV Rn,direct : (Rn) ← (direct)
MOV Rn,#data : (Rn) ← #data
MOV direct,A : (direct) ← (A)
MOV direct,Rn : (direct) ← (Rn)
MOV direct,direct : (direct) ← (direct)
MOV direct,@Ri : (direct) ← ((Ri))
MOV direct,#data : (direct) ← #data
MOV @Ri,A : ((Ri)) ← (A)
MOV @Ri,direct : ((Ri)) ← (direct)
MOV @Ri,#data : ((Ri)) ← #data
MOV DPTR,#data16 : (DPTR) ← #data16
MOV A,@A + DPTR : (A) ← (A) + (DPTR)
MOV A,@A + PC : (PC) ← (PC) + 1
(A)← (A) + (PC)
MOVX A,@Ri : (A) ← ((Ri))
MOVX A,@DPTR : (A) ← ((DPTR))
MOVX @Ri,A : ((Ri)) ← (A)
MOVX @DPTR,A : ((DPTR)) ← (A)
PUSH direct : cất dữ liệu vào stack
(SP) ← (SP) + 1
(SP) ← (direct)
POP direct : lấy dữ liệu ra khỏi stack
(direct) ← (SP)
(SP) ← (SP) - 1
XCH A,Rn :đổi chỗ nội dung thanh ghi A với Rn
A (Rn)
XCH A,direct : (A) (direct)
XCH A,@Ri : (A) ((Ri))
XCHD A,@Ri : đổi chỗ 4 bit thấp của A với ((Ri))
(A3 ÷ A0) ((Ri3 ÷ Ri0))
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
50
5. Các lệnh luận lý (Boolean Instruction) :
8951 chứa một bộ xử lý luận lý đầy đủ cho các hoạt động đơn bit, đây là một
điểm mạnh của họ vi điều khiển MSC-51 mà các họ khác không có.
RAM nội chứa 128 bit định vị và vùng nhớ các thanh ghi chức năng đặc biệt
lên đến 128 bit định vị khác. Tất cả các đường port là bit định vị, mỗi đường có
thể xử lý như một port đơn bit riêng biệt. Các truy xuất các bit này không chỉ là
các lệnh rẽ nhánh không, mà là một danh mục đầy đủ các lệnh MOVE, SET,
CLEAR, COMPLEMENT, OR, AND.
Toàn bộ sự truy xuất của bit dùng sự định vị trực tiếp với những địa chỉ từ
00H ÷ 7FH trong 128 vùng nhớ thấp và 80H ÷ FFH ở vùng các thanh ghi chức
năng đặc biệt.
Bit Carry C trong thanh ghi PSW của từ trạng thái chương trình được dùng
như một sự tích lũy đơn của bộ xử lý luận lý. Bit carry cũng là một bit định vị và
có địa chỉ trực tiếp vì nó nằm trong PSW. Hai lệnh CLR C và CLR CY đều có
cùng tác dụng là xóa cờ Carry nhưng lệnh đầu mất 1 byte còn lệnh sau mất 2
byte.
Hoạt động của các lệnh luận lý được tóm tắt như sau :
CLR C : xóa cờ carry xuống 0, có ảnh hưởng cờ Carry
CLR BIT : xóa bit xuống 0, không ảnh hưởng cờ Carry
SET C : set cờ carry lên 1, có ảnh hưởng cờ Carry
SET BIT : set bit lên 1, không ảnh hưởng cờ Carry
CPL C : đảo bit cờ carry, có ảnh hưởng cờ carry
CPL BIT : đảo bit, không ảnh hưởng cờ carry
ALN C,BIT : (C) ← (C) AND (BIT) : có ảnh hưởng cờ Carry
ALN C,/BIT: (C) ← (C) AND NOT (BIT) : có ảnh hưởng cờ Carry
ORL C,BIT : (C) ← (C) OR (BIT) : có ảnh hưởng cờ Carry
ALN C,/BIT: (C) ← (C) OR NOT (BIT) : có ảnh hưởng cờ Carry
MOV C,BIT : (C) ← (BIT) : có ảnh hưởng cờ Carry
MOV BIT,C : (BIT) ← (C) : không ảnh hưởng cờ
Carry
6. Các lệnh xen vào (Miscellameous Instruction) :
NOP : không hoạt động gì cả, chỉ tốn 1 byte và một chu kỳ thực
thi máy, ta dùng để DELAY những khoảng thời gian nhỏ.
Vi Điều Khiển 8051 Lê Chí Thơng – chithong@gmail.com
51
Chú ý :
(A) : nội dung của thanh ghi A.
((Ri)) : nội dung của địa chỉ trong RAM nội mà Ri trỏ đến.
((DPTR)) : nội dung của địa chỉ trong RAM ngoại mà DPTR đang trỏ đến.
Rn : với n = 0 ÷ 7 (tức R0, R1, R2 : 8 thanh ghi).
File đính kèm:
vi_dieu_khien_8051_chuong_1_gioi_thieu_at89c51_le_chi_thong.pdf

