Professional Documents
Culture Documents
Muốn sử dụng bộ vi xử lý đa năng cần bổ sung RAM, ROM, cổng vào ra và bộ định
thời ngoài thì hệ thống mới hoạt động được
• Ưu: Linh hoạt tuỳ từng ứng dụng
• Nhược: Hệ thống cồng kềnh, đắt hơn
Đối với các bộ vi điều khiển: Bộ xử lý, RAM, ROM, cổng vào ra và bộ định thời, tất
cả cùng được nhúng trên chip vi điều khiển.
1.2.1 Lịch sử
1.2.2 Thành phần cơ bản
1.2.2.1 Cổng
1.2.2.2 Đệm 3 trạng thái
1.2.2.3 Bus
1.2.3 Kiến trúc và nguyên lý hoạt động
1.2.3.1 Kiến trúc Harvard
1.2.3.2 Kiến trúc Von Neumann
1.2.3.3 Chu trình thực hiện lệnh
1.2.3.4 Sơ đồ khối của VXL
1.2.3.5 Hoạt động ngắt
2.1.3 Sơ đồ chân
Tr 57/285
• 8051 có 40 chân với các chức năng: vào ra I/O, đọc RD, ghi WR, địa chỉ, dữ liệu
và ngắt
▪ 32 chân dành cho 4 cổng P0, P1, P2, P3. Mỗi cổng 8 chân
… Chi tiết xem trang 60. Tạm thời chưa viết kỹ
▪ Chân số 40: nguồn Vcc, cung cấp điện áp nguồn +5V cho chip
▪ Chân số 20: đất GND
▪ Chân dao động thạch anh (18 & 19): XTAL1, XTAL2. Ở 8051, 1 chu kỳ
máy bằng 12 chu kỳ dao động đồng hồ
▪ Chân số 9: Khởi động lại RST. Chân vào mức tích cực cao bình thường
mức thấp.
▪ Chân số 31: Truy cập được địa chỉ ngoài ̅̅̅̅
𝐸𝐴 (External Access), được nối
với Vcc hoặc với GND chứ không bao giờ để hở
▪ Cho phép cất chương trình ̅̅̅̅̅̅̅̅
𝑃𝑆𝐸𝑁 (Program Store Enable)
▪ Cho phép chốt địa chỉ ALE (Address Latch Enable)
2.1.4 Tổ chức bộ nhớ
Phân vùng bộ nhớ dữ liệu bên trong của 8051
8051 có 128 byte RAM được gán địa chỉ từ 00H đến 7FH
• Từ ngăn nhớ 00 đến 1FH tổng cộng 32 byte – các thanh ghi và ngăn xếp
• Từ ngăn nhớ 20H đến 2FH tổng cộng 16 byte – bộ nhớ đọc/ghi định địa chỉ theo
bit
• Từ ngăn nhớ 30H đến 7FH tổng cộng 80 byte – bảng nháp dùng để lưu dữ liệu và
tham số
Băng thanh ghi mặc định
Băng thanh ghi 0 là mặc định được truy cập khi 8051 được cấp nguồn
MOVR0, #99H ; Nạp R0 giá trị 99H
MOV 00,#99H ; Nạp R0 giá trị 99H – sử dụng địa chỉ
ngăn nhớ RAM làm địa chỉ đích, không dùng tên thanh ghi
Chuyển băng thanh ghi
Ta sử dụng bit D3 và D4 của thanh ghi PSW như bảng dưới:
Có thể dùng các lệnh định địa chỉ theo bit như SETB và CLR. Ví dụ:
SETB PSW.4
MOVR0, #99H
MOVR1, #85H
MOVR7, #63H
Theo mặc định PSW.3 = 0 và PSW.4 = 0. Do vậy, lệnh “SETB PSW.4” sẽ bật bit RS1 =
1 và RS0 = 0, khi đó băng thanh ghi 2 được chọn. Băng 2 sử dụng các ngăn nhớ từ 10H
đến 17H.
Sau khi thực hiện đoạn chương trình trên ta có:
Ngăn nhớ vị trí 10H có giá trị 99H
Ngăn nhớ vị trí 11H có giá trị 85H
Ngăn nhớ vị trí 17H có giá trị 63H
Ngăn xếp của 8051
Ngăn xếp là một vùng bộ nhớ RAM được CPU sử dụng để lưu thông tin tạm thời
(dữ liệu hoặc địa chỉ). CPU cần không gian lưu trữ này vì số các thanh ghi bị hạn chế.
Truy cập ngăn xếp
Thanh ghi được dùng để trỏ đến ngăn xếp được gọi là thanh ghi con trỏ ngăn xếp
SP (Stack Pointer). Con trỏ ngăn xếp của 8051 rộng 8 bit, tức là chỉ có thể trỏ được các
địa chỉ từ 00 đến FFH.
Khi 8051 được cấp nguồn thì SP = 07, nghĩa là ngăn nhớ 08 của RAM là ngăn nhớ
đầu tiên dùng làm ngăn xếp.
Cất thanh ghi vào ngăn xếp
Khi cất dữ liệu vào ngăn xếp thì con trỏ ngăn xếp SP được tăng lên 1 (đối với các
bộ vi xử lý x86, SP giảm xuống khi cất dữ liệu vào ngăn xếp).
Để cất giá trị thanh ghi vào ngăn xếp, ta cũng có thể sử dụng địa chỉ RAM của
chúng.
Xác định ngăn xếp và con trỏ ngăn xếp ở đoạn chương trình sau. Giả thiết vùng ngăn xếp
là mặc định.
MOV R6, #25H; Nạp R6 giá trị 25H
MOV R1, #12H; Nạp R1 giá trị 12H
MOV R4, #0F3H; Nạp R4 giá trị 0F3H
PUSH 6; Cất thanh ghi R6 vào ngăn xếp, SP tăng lên 1
PUSH 1
PUSH 4
Bắt đầu SP=07
Thanh ghi thường được sử dụng nhất là A (thanh chứa), B, R0 – R7, DPTR (con trỏ dữ
liệu) và PC (bộ đếm chương trình)
Thanh ghi tích luỹ A được sử dụng ở các phép toán số học và logic
Lệnh chuyển dữ liệu MOV
Cú pháp:
MOV đích, nguồn ;Sao dữ liệu nguồn vào đích
Để tính tổng các toán hạng thì cờ nhớ phải được kiểm tra sau mỗi lần cộng một toán
hạng. Ở ví dụ này, dùng R7 để tích luỹ giá trị nhớ mỗi khi toán hạng được cộng vào A.
▪ Ở lần lặp đầu tiên, 7DH được cộng vào A với CY (phép nhớ từ D7) = 0 và R7 =
00 và bộ đếm R2 = 04.
▪ Ở lần lặp thứ hai, EBH được cộng vào A và kết quả trong A là 68H còn CY = 1.
Vì cờ nhớ xuất hiện, R7 được tăng lên. Bộ đếm R2 = 03.
▪ Ở lần lặp thứ ba, C5H được cộng vào A nên A = 2DH và cờ nhớ lại tiếp tục nhớ,
R7 được tăng lên và R2 = 02.
Khi vòng lặp kết thúc, giá trị tổng được lưu ở thanh ghi A và R7, trong đó A chứa
byte thấp và R7 chứa byte cao (lưu giữ ở 8 bit tiếp theo)
2.5.1.1.3 Cộng có nhớ và cộng các số 16 bit
2.5.1.2 Số BCD
Số BCD dạng không nén
Để biểu diễn số BCD không nén cần dùng 1 byte bộ nhớ hay 1 thanh ghi 8 bit.
Số BCD nén
1 byte chứa được 2 số BCD. Sử dụng BCD nén thì hiệu quả lưu dữ liệu tăng gấp đôi
nhưng sau khi cộng BCD nén thì đôi khi kết quả không còn là số BCD nữa. Có 1 lệnh
chuyên xử lý vấn đề này, ở 8051, đó là lệnh “DAA”.
2.5.1.3 Lệnh DA (Decimal Adjust for Addition)
Lệnh DA sẽ cộng 6 vào 4 bit thấp hoặc 4 bit cao khi cần (dựa vào cờ nhớ AC hoặc
CY) Còn bình thường lệnh để nguyên kết quả tìm được.
DA được dùng sau phép cộng ADD mà không bao giờ dùng sau kệnh INC
1 số lệnh tác động lên cờ nhớ CY trong các ví dụ:
JNC đích; Nhảy tới đích nếu CY=0
JC đích; Nhảy tới đích nếu CY=1
DJNZ R2, AGAIN; Giảm thanh ghi và lặp lại nếu R2 khác 0
INC R0; Tăng giá trị của thanh ghi lên 1
Chức năng của các thanh ghi trong Ví dụ trên:
▪ R0 – Con trỏ
▪ R2 – Bộ đếm
▪ R7 – Lưu byte cao của tổng
2.5.1.4 Trừ các số không dấu
SUBB A, nguồn ;A=A-nguồn-CY
Các bộ vxl thông thường có 2 lệnh trừ, phép trừ SUB và trừ có mượn SUBB
(Substract With Borrow). 8051 chỉ có 1 lệnh SUBB duy nhất.
Lệnh SUBB khi CY = 0
Các bước CPU tiến hành lệnh SUBB:
▪ Lấy bù 2 của số trừ (toán hạng nguồn)
▪ Cộng số vừa tìm được với số bị trừ (A)
▪ Đảo có nhớ
Lệnh SUBB khi CY = 1
Nếu CY = 1 trước khi thực hiện SUBB thì kết quả cũng được trừ đi 1
Ứng dụng: Thực hiện chuyển dổi bộ tín hiệu tương tự sang tín hiệu số. Đầu vào
của ADC là giá trị nhiệt độ hay áp suất, còn đầu ra là dữ liệu 9 bit ở dạng hexa.
2.5.1.6 Tăng INC
▪ Lệnh tăng toán hạng lên 1
▪ Nếu giá trị trước khi tăng là FF thì sau khi tăng sẽ là 00
▪ Không tác động đến cờ nhớ
▪ 4 chế độ địa chỉ của toán hạng:
INC A; Thanh ghi định nghĩa trước (thanh ghi A)
INC Rn; Thanh ghi (R0-R7)
INC direct; Trực tiếp
INC @Ri; Gián tiếp
INC DPTR
▪ Tăng nội dung thanh ghi 16 bit DPTR lên 1
▪ Không tác động đến cờ
INC DPTR;
2.5.1.7 Giảm DEC
2.5.1.8 Số có dấu và các phép tính số học
2.5.1.8.1 Tràn ở các phép toán số có dấu
Tràn là gì?
Nếu kết quả của 1 phép toán trên các số có dấu mà lớn quá kích thước thanh ghi thì
xuất hiện tràn. Khi tràn, 8051 chỉ báo có lỗi bằng cách thiết lập cờ tràn OV lên 1.
2.5.1.8.2 Thiết lập cờ tràn OV
Ở phép toán với số có dấu 8 bit thì cờ OV được bật lên 1 khi xuất hiện 1 trong 2 đk sau:
▪ Có nhớ từ D6 sang D7 nhưng không có nhớ ra từ D7 (cờ CY = 0)
▪ Có nhớ từ D7 (CY = 1) nhưng không có nhớ từ D6 sang D7
Nếu đồng thời xảy ra cả 2 đk trên thì OV = 0
Ở phép cộng các số không dấu, cần theo dõi cờ nhớ CY, còn phép cộng các số có
dấu thì đó là cờ tràn OV.
Đối với 8051, JNC và JC cho phép chương trình rẽ nhánh ngay sau phép cộng các
số không dấu, tuy nhiên vẫn có thể thực hiện điều này bằng lệnh “JB PSW.2” hoặc “JNB
PSW.2” vì PSW là thanh ghi cờ có thể định địa chỉ bit.
2.5.2 Logic
2.5.2.1 Lệnh logic và so sánh
2.5.2.1.1 Lệnh AND
ANL đích, nguồn; đích = đích AND nguồn
Toán hạng đích và nguồn đặt kết quả vào đích. Đích thường là thanh ghi A (thanh ghi
tích luỹ). Toán hạng nguồn có thể là thanh ghi, bộ nhớ hoặc giá trị cho sẵn
2.5.2.1.2 Lệnh OR
Đối với lệnh DJNZ thì ở vị trí thanh ghi có thể là bất kỳ thanh ghi nào trong số R0-R7
4 VÀO RA SỐ
5 GHÉP NỐI CƠ BẢN