Việc xử lý byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện dễ dàng nhờ vào kiểu định địa chỉ nhanh dùng để tuy xuất trên RAM nội.. 3.1 Tổ chức bộ nhớ RAM 80 byte RAM đa
Trang 2Chương 1 Cấu trúc họ vi điều
khiển 8051
Trang 3MCS-51 là họ vi điều khiển do hãng intel sn xuất Các IC tiêu biểu cho họ là 8051 và 8031 Các sản phẩn MCS-51 thích hợp cho nhưng ứng dụng điều khiển Việc
xử lý byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện dễ dàng nhờ vào kiểu định địa chỉ nhanh dùng
để tuy xuất trên RAM nội Tập lệnh cung cấp một bảng tiện dụng của những lệnh số học 8 bit bao gồm tất cả các lệnh nhân và lệnh chia Hỗ trợ mở rộng trên chíp dùng cho những biến một bit như là kiểu dữ liệu riêng biệt cho phép quản lý và kiểm tra bit trực tiếp trong điều khiển và những hệ thống logic đòi hỏi xử lý bit
1 Giới thiệu họ MCS-51
Trang 4T1 1415 P3.5
20
RXD 10 P3.0 INT0/
INT1/
T0 TXD
12 P3.2P3.3
11 P3.1
13 P3.4
21 A8 P2.0
Vss
P2.2 P2.3 P2.1
P1.6 ALE
30 RST
P1.0
28 A15
27 A14 1
8051 P1.3
P1.2
P1.4
4 3 5
XTAL.2 30pF
29 PSEN/
12MHz
18
38 AD1 P0.1
Vcc
32 AD7 40
Sơ đồ chân của vi đIều khiển 8051
Trang 52 Giới thiệu cấu trúc phần cứng
họ MCS-51 (8051)
RST AE/
OSILLATOR
CPU
BUS CONTROL
TXD Address/data
P3 P0 P1 P2
RXD
SERIAL PORT I/O PORT
ALE PSEN/
128 byte RAM
128 byte RAM (8032/8052)
SERIAL PORT
INTERUP CONTROL
OTHER REGISTER
TIMER 2 TIMER 0 TIMER 1
INT1/
INT0/
TIMER 2 8032/8052 TIMER 1 TIMER 0
ROM 0K-8031/8032 4K-8051 8K-8052
T0 T1 T2 T2EX
Sơ đồ khối của vi đIũu khiển 8081
Trang 72.1 Chức năng các chân của 8051
2.1.2 Port 0
Port 0 (các chân từ 32 đến 39 ) có hai chức năng:
Làm nhiệm vụ xuất/nhập dữ liệu – 8bit
Làm nhiệm vụ bus địa chỉ – 8bit địa chỉ byte thấp
Địa chỉ của port 0 là 80H và có khả năng định địa chỉ bit
P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
Trang 8 Địa chỉ của port 1 là 90H và có khả năng định địa chỉ bit
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
Trang 9 Làm nhiệm vụ xuất/nhập dữ liệu – 8bit
Làm nhiệm vụ bus địa chỉ – 8bit địa chỉ byte cao
Địa chỉ của port 0 là A0H và có khả năng định địa chỉ bit
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
Trang 102.1 Chøc n¨ng c¸c ch©n cña 8051
Trang 11 Làm nhiệm vụ xuất/nhập dữ liệu – 8bit
Thực hiện các chức năng riêng (được mô tả trong bảng 1.1 )
Địa chỉ của port 3 là B0H và có khả năng định địa chỉ bit
P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0
Trang 122.1 Chức năng các chân của 8051
Bit Tên Địa chỉ bit Chức năng
P3.0 RXT B0H Ngõ vào dữ liệu của port nối tiếp
P3.1 TXD B1H Ngõ xuất dữ liệu của port nối tiếp
P3.2 INT0/ B2H Ngõ vào ngắt ngoài 0
P3.3 INT1/ B3H Ngõ vào ngắt ngoài 1
P3.4 T0 B4H Ngõ vào của bộ định thờ/ đếm 0
P3.5 T1 B5H Ngõ vào của bộ định thờ/ đếm 1
P3.6 WR/ B6H Điều khiển ghi bộ nhớ dữ liệu ngoài
P3.7 RD/ B7H Điều khiển đọc bộ nhớ dữ liệu ngoài
Bảng 1.1
Trang 142.1 Chøc n¨ng c¸c ch©n cña 8051
Trang 152.1 Chức năng các chân của 8051
2.1.6 Chân cho phép chốt địa chỉ ALE
Khi 8051 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu do đó phải tách các đương dữ liệu và địa chỉ Tín hiệu ra ALE ở chân
30 dùng làm tín hiệu điều khiển để giải đa hợp các
đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.
Tín hiệu ALE có tần số bằng 1/6 tần số dao động của
chip điều khiển (nếu dao động của chíp là 12MHz
thì tần của tín hiệu ALE là 2MHz )
Trang 162.1 Chức năng các chân của 8051
chương trình trong ROM nội.
chương trình trong ROM ngoài.
nạp chương trình cho EPROM nội (nạp
EPROM).
Trang 172.1 Chức năng các chân của 8051
của 8051 dùng để thiết lập lại trạng thái ban
đầu cho hệ thống hay gọi tắt là reset hệ thống Khi ngõ vào ở mức logíc 1 tối thiểu hai chu kỳ máy, các thanh ghi bên trong của 8051 được nạp các giá trị thích hợp cho việc khởi động lại
hệ thống
Trang 182.1 Chức năng các chân của 8051
khiển 8051, khi sử dụng 8051 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như
thạch anh thường sử dụng cho 8051 là 12Mhz.
Trang 20RAM Ngoµi
Trang 2182 Bank 1
08 00
07 Bank thanh ghi 0
(mặc định từ R0-R7)
81 88
17 0F 10 18 1F
87 Bank 2
83
Bank 3
88 89
DPL không đuợc địa chỉ hóa các bit
không đuợc địa chỉ hóa các bit 85
86
87 84 83
SP 80 81
82 P0
PCON không đuợc địa chỉ hóa các bit
không đuợc địa chỉ hóa các bit DPH
không đuợc địa chỉ hóa các bit
8B 8D
8E 8F 8C 8A 89 88 TCON
90
29 28 2B
2C 2F 2E 2D 2A 25
22 21 20
23 24
8C
11 10
16 15 14 13 12 17
0A 2 0C 0B 0F 0E 0D
1F 1E 1C 1B
25 26
27 24 23
19 18 8D
21 20 26
27
29 28
3A 32
37 36 35 34 33
3D 3F 3E 3C 3B
31 30
39 38 98
4A 42
4C 4B 4E 4D
2B 2C
2E 2D
62 5A 5F 5E 5D 5C 5B
74 73
76 75 77
6D 6E 6F 6C 6B
B0
71 70
69 68 30
D0 B8
RAM đa dụng
D E0
P2 A1 A0 A4 A3
không đuợc địa chỉ hóa các bit không đuợc địa chỉ hóa các bit
TL1 TL0 không đuợc địa chỉ hóa các bit TH1
9D 9F 9E 9C 9B 9A 99 98 SCON không đuợc địa chỉ hóa các bit BSUF
AF AC AB AA A9 A8 IE
B4 B3 B7 B6 B5 B2 B1 B0 P.3
PSW D0 D1 D3
D4 D6
D7 D5 D2
-
BC BB BA B9 B8 IP
E5 E6 E7 E4 E3 E2 E1 E0 ACC
Địa chỉ byte Địa chỉ bit
đặc biệt
Trang 22RAM bên trong 8051 được phân chia như sau:
Các thanh ghi R0ữR7có địa chỉ từ 00H đến 1FH
Ram địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH
Ram đa dụng từ 30H đến 7FH
Các thanh ghi có chức năng đặc biệt từ 80H đến FFH
3.1 Tổ chức bộ nhớ RAM
Trang 233.1 Tổ chức bộ nhớ RAM
80 byte RAM đa dụng chiếm các địa chỉ từ 30H đến 7FH
Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểu địa chỉ trực tiếp hoặc gián tiếp
VD: + địa chỉ trực tiếp
MOV A, 3FH + địa chỉ gián tiếp
MOV R0, #3FH MOV A, R0
Trang 243.1 Tổ chức bộ nhớ RAM
3.1.2 RAM có thể truy xuất từng bit:
Vi điều khiển 8051 chứa 210 địa chỉ bit, trong đó:
VD: SETB P1.0 ; đặt bit P1.0 lên mức logic 1
CLR P1.0 ; xoá bit P1.0 về mức logic 0
Trang 253.1 Tổ chức bộ nhớ RAM
3.1.3 Các dãy thanh ghi:
32 byte thấp của bộ nhớ nội được dành cho các dãy thanh ghi
Bộ lệnh 8051 hỗ trợ 8 thanh ghi có tên là R0 ữ R7 và theo mặc
định sau khi reset hệ thống, các thanh ghi này có địa chỉ từ 00H ữ 07H
Các lệnh dùng các thanh ghi R0 ữ R7 sẽ ngắn hơn và nhanh hơn
so với các lệnh dùng kiểu địa chỉ trực tiếp Các dữ liệu được dùng thường xuyên, nên dùng một trong các thanh ghi này
VD: Thanh ghi R0 có địa chỉ 00H
MOV A, 00H ; Kiểu địa chỉ trực tiếpMOV A, R0 ; Kiểu địa chỉ thanh ghi
Trang 263.1 Tổ chức bộ nhớ RAM
3.1.3 Các dãy thanh ghi (tiếp):
Các thanh ghi R0 ữ R7 có thể chuyển đổi vị trí trong các dãy thanh ghi (Bank1, Bank2, Bank3) bằng cách thay đổi các bit chọn dãy trong thanh ghi trạng thái (phần này sẽ đề cập đến sau)
Trang 273.1 Tổ chức bộ nhớ RAM
Cũng như các thanh ghi từ R0 ữ R7, 8051 có 21
thanh ghi có chức năng đặc biệt SFR (special
function register) chiếm phần trên của RAM nội tử
địa chỉ 80H đến FFH
1. Thanh ghi trạng thái chương trình PSW:
PSW có địa chỉ D0H chức các bít trạng thái có chức
năng chỉ ra trong b ảng sau:
Trang 28 Thanh ghi trạng thái chương trình(PSW: program status word):
Bit Ký hiệu địa chỉ Mô tả bit
PSW.7 CY D7H Cờ nhớ
PSW.6 AC D6H Cờ nhớ phụ
PSW.5 F0 D5H Cờ 0
PSW.4 RS1 D4H Chọn dãy thanh ghi (bit 1)
PSW.3 RS0 D3H Chọn dãy thanh gh (bit 0)
Trang 293.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
Cờ nhớ CY (carry flag).
Cờ có tác dụng kép Thông thường nó được dùng
cho các lệnh toán học:
C = 1 nếu phép toán cộng có sự tràn hoặc phép trừ
có mượn và ngược lại
C = 0 nếu phép toán cộng không tràn và phép trừ không mượn.
Trang 303.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
Cờ nhớ phụ AC(Auxiliary Carry flag):
decimal), cờ nhớ phụ AC được set nếu kết quả 4
Trang 31xóa sau khi reset hệ thống và
được thay đổi bởi phần mền khi
Trang 323.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
Cờ tràn OV (over flag):
Cờ tràn được set sau khi hoạt động cộng hoặc trừ nếu có
sự tràn toán học Khi các số có dấu được cộng hoặc trừ với nhau, phần mền có thể kiểm tra bit này để xác
định kết quả có nằm trong tầm xác định không Khi các số không có dấu được cộng bit OV được bỏ qua Các kết quả lớn hơn +127 hoặc nhỏ hơn -128 thì bit
OV = 1.
Trang 33Ví dụ: Thanh ghi A chứa 10101101B thì bit P set lên
1 để tổng số bit 1 trong A và P tạo thành số chẵn.
3.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
Trang 35 Con trỏ ngăn xếp stack SP (stack pointer):
VD: Khi gọi chương trình con
3.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
RET CTC:
CALL CTC
FFFFH FFFEH FFFDH
……
1005H 1004H 1003H 1002h 1001H 1000H
(SP) PC
PC
Trang 36 Con trỏ ngăn xếp stack SP (tiếp):
VD: Khi thực hiện cất thanh chứa ACC vào SP bằng lệnh PUSH
3.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
PUSH ACC
FFFFH FFFEH FFFDH
……
1005H 1004H 1003H 1002h 1001H 1000H
(SP)
Trang 37 Con trỏ ngăn xếp stack SP (tiếp):
VD: Khi thực hiện khôI phục lại thanh chứa ACC từ SP bằng lệnh POP
3.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
POP ACC
FFFFH FFFEH FFFDH
……
1005H 1004H 1003H 1002h 1001H 1000H
(SP) PC
ACC
Trang 38 Con trỏ ngăn xếp stack SP (tiếp):
Con trỏ ngăn xếp là một thanh ghi 8 bit ở địa chỉ 81H
SP chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh ngăn xếp.
là 07H
Ta có thể đặt vùng ngăn xếp ở bất cứ địa chỉ nào trong
VD: Lệnh sau sẽ đặt vùng ngăn xếp bắt đầu từ địa chỉ 5BH
3.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
Trang 39 Con trỏ dữ liệu DPTR (Data Poiter):
Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi 16 bit ở địa chỉ 82H
(DPL: byte thấp) và 83H (DPH: byte cao) Ba lệnh sau sẽ ghi giá trị 55H vào RAM ngoài ở địa chỉ
1000H.
MOV A, #55H MOV DPTR, #1000H MOVX @DPTR, A
3.1.4 Các thanh ghi có chức năng đặc biệt(tiếp)
Trang 404 Bộ nhớ ngoài (Eternal Memory):
VĐK 8051 có khả năng mở rộng bộ nhớ lên 64K byte
bộ nhớ chương trình và 64K byte bộ nhớ dữ liệu ngoài Do
đó có thể dùng thêm RAM và ROM nếu cần
Khi dùng bộ nhớ ngoài, Port 0 không còn chức năng I/O nữa Nó được kết hợp giữa bus địa chỉ A0 ữ A7 và bus dữ liệu D0 ữ D7 với tín hiệu ALE để chốt byte của bus địa chỉ, chỉ khi bắt đầu mỗi chu kỳ bộ nhớ ngoài Port 2 được cho là byte cao của bus địa chỉ
Trang 414 Bộ nhớ ngoài (Eternal Memory):
4.1 Truy xuất bộ nhớ chương trình ngoài
Bộ nhớ chương trình bên ngoài là bộ nhớ chỉ đọc (ROM)
được cho phép của tín hiệu PSEN/
Sự kết nối phần cứng của bộ nhớ EPROM như sau:
Trong một chu kỳ máy của 8051 có 12 chu kỳ dao
động Nếu bộ dao động trên chip có tần số 12MHz, một chu kỳ máy dài 1às Trong một chu kỳ máy điển hình, tín hiệu ALE có hai xung và hai byte của lệnh được đọc
từ bộ nhớ chương trình
Trang 424 Bộ nhớ ngoài (Eternal Memory):
4.1 Truy xuất bộ nhớ chương trình ngoài (tiếp)
D0 - D7 Port 0
74HC373
Trang 434 Bộ nhớ ngoài (Eternal Memory):
4.1 Truy xuất bộ nhớ chương trình ngoài (tiếp)
Trang 444 Bộ nhớ ngoài (Eternal Memory):
4.2 Truy xuất bộ nhớ dữ liệu ngoài
các tín hiệu RD/ và WR/ ở các chân P3.7 và P3.6 Lệnh MOVX được dùng để truy xuất bộ nhớ ngoài và dùng bộ đệm dữ liệu 16 bit
(DPTR) hoặc R0 hoặc R1 làm thanh ghi địa chỉ
trừ chân RD/ của 8051 nối với chân OE/ (output enable) của RAM và chân WR/ của 8051 nối với chân W/ của RAM Sự nối các bus địa chỉ và bus dữ liệu tương tự như cách nối của EPROM Bằng cách sử dụng các Port 0 và Port 2 như phần trên, ta có một dung lượng RAM ngoài lên đến 64K được kết nối với 8051.
Trang 454 Bé nhí ngoµi (Eternal Memory):
4.2 Truy xuÊt bé nhí d÷ liÖu ngoµI (tiÕp)
W/
A9
RAM
A0 - A7 D0 - D7
Trang 464 Bé nhí ngoµi (Eternal Memory):
4.2 Truy xuÊt bé nhí d÷ liÖu ngoµI (tiÕp)
Trang 474 Bé nhí ngoµi (Eternal Memory):
4.2 Truy xuÊt bé nhí d÷ liÖu ngoµI (tiÕp)
Trang 48Chương 2
Tóm tắt tập lệnh
của 8051
Trang 49<mã lệnh> : là mã gợi nhớ (ASSEMBLY) của lệnh
<toán hạng >, <toán hạng đích> và <toán hạng nguồn>: cung cấp các toán hạng cho lệnh và chúng có các loại địa chỉ khác nhau
Trang 51ADD A, R5 ; (A)<- (A)+(R5)Céng néi dung cña thanh chøa A víi néi dung cña thanh ghi R5, kÕt qu¶ lu ë thanh chøa A
Trang 52MOV P1, A ; (91H)<- (A) Chuyển nội dung của thanh chứa A ra port 1 có địa chỉ 90H
Trang 53chứa trong thanh ghi R1) vào thanh chứa A Lệnh trên tương đương với lệnh
MOV A, 40H
Trang 54MOV DPRT, #8000H ; (DTRT)<- 8000H ChuyÓn gi¸ trÞ 16 bit: 8000H vµo con trá d÷ liÖu DPTR
Trang 592 Các loại lệnh
1.2 Các lệnh số học:
Lệnh cộng: ADD A, <toán hạng>
Chức năng: Cộng nội dung thanh chứa A với
<toán hạng>, đặt kết quả vào A
<toán hạng> có thể nhận một trong bốn loại địa chỉ sau: trực tiếp, gián tiếp, thanh ghi và tức thời
Lệnh ADD được thực hiện trong 1 chu kỳ máy( 1 chu kỳ máy = 1/12 tần số mạch dao động)
Trang 60 Sè byte : 2 ADD A, R0 ; (A) (R0) + (A)
Sè byte : 1 ADD A, @R0 ; (A) ((R0)) + (A)
Sè byte : 1
Trang 612 Các loại lệnh
1.2 Các lệnh số học (tiếp):
Lệnh cộng có nhớ: ADDC A, <toán hạng>
Chức năng: Cộng đồng thời nội dung thanh chứa
A với <toán hạng> và cờ nhớ, đặt kết quả vào A Nếu phép cộng bị tràn số học thì cờ nhớ sẽ được
Trang 622 Các loại lệnh
1.2 Các lệnh số học (tiếp):
VD:
ADDC A, R1 ; (A) = (R1)+(A)+(C)
Nếu kết quả > FFH (255) thì cờ nhớ C = 1, ngược lại C = 0
Trang 642 Các loại lệnh
1.2 Các lệnh số học (tiếp):
Lệnh giảm 1 đơn vị: DEC <toán hạng>
<toán hạng> có thể nhận một trong ba loại địa chỉ sau: trực tiếp, gián tiếp, thanh ghi
Trang 652 Các loại lệnh
1.2 Các lệnh số học (tiếp):
Lệnh trừ : SUBB A, <toán hạng>
- Trừ bớt A bởi một toán hạng và cờ nhớ (số mượn)
- <toán hạng> có thể nhận một trong ba loại địa chỉ sau: trực tiếp, gián tiếp, thanh ghi
VD : SUBB A, R0 ; (A) = (A)-(R0)-(C)
SUBB A, @R0 ; (A) = (A)-((R0))-(C)SUBB A, 40H ; (A) = (A)-(40H)-(C)
Trang 661.2 Các lệnh số học (tiếp):
Lệnh nhân : MUL AB ;(A) x(B) = (A) (B)
-Tích số 16bit: A chứa byte cao ; B chứa byte thấp Lệnh chia:
DIV AB ; (A) /(B) = (A), số dư đặt vào B.
- Lệnh MUL và DIV chỉ tác dụng với thanh ghi A
và B
2 Các loại lệnh
Trang 672 C¸c lo¹i lÖnh
Trang 712 Các loại lệnh
1.3 Các lệnh di chuyển dữ liệu :
Lệnh MOV :
MOV <toán hạng đích>,<toán hạng nguồn>
Chức năng: Di chuyển nội dung của <toán hạng nguồn> đến
<toán hạng đích> trong RAM nội
- <toán hạng đích>: có thể là thanh ghi, địa chỉ trực tiếp, gián tiếp
- <toán hạng nguồn>: có thể là thanh ghi, địa chỉ trực tiếp, gián tiếp và tức thời
Trang 732 Các loại lệnh
1.3 Các lệnh di chuyển dữ liệu (tiếp) :
Lệnh MOVC :
MOVC A, @A+ <thanh ghi nền>
Chức năng: Di chuyển một byte mã hoặc byte hằng số
trong bộ nhớ chương trình (ROM) vào thanh ghi A
- <thanh ghi nền>: có thể là thanh ghi DPTR hoặc thanh ghi
bộ đếm chương trình PC
MOVC A, @A+ DPTR ;(A) = ((A)+(DPTR))
MOVC A, @A+ PC ;(A) = ((A)+(PC))
Trang 742 Các loại lệnh
1.3 Các lệnh di chuyển dữ liệu (tiếp) :
VD : Chương trình con sau đây sẽ thực hiện tra bảng mã:
BANG_MA: INC A
MOVC A, @A+PCRET
DB 00H
DB 11H
DB 22H
Trang 752 Các loại lệnh
1.3 Các lệnh di chuyển dữ liệu (tiếp) :
Lệnh MOVX :
MOVX <toán hạng đích>,<toán hạng nguồn>
Chức năng: Di chuyển nội dung của <toán hạng nguồn>
đến <toán hạng đích> trong RAM ngoài
- <toán hạng đích>, <toán hạng đích>: chỉ có thể là thanh ghi và địa chỉ gián tiếp
Trang 76LÖnh ghi d÷ liÖu tõ thanh ghi A ra RAM ngoµi:
MOVX @Ri, AMOVX @DPTR, A
Trang 772 Các loại lệnh
1.3 Các lệnh di chuyển dữ liệu (tiếp) :
Lệnh cất vào stack : PUSH <toán hạng>
Chức năng: Di chuyển nội dung của <toán hạng> vào trong
ngăn xếp (stack)
-<toán hạng> : chỉ có thể là địa chỉ trực tiếp và thanh ghi A
VD :
PUSH ACC ; cất thanh ghi A vào stack
PUSH 00H ; cất thanh ghi R0 vào stack
PUSH 50H ; cất ô nhớ có địa chỉ 50H vào stack