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