Professional Documents
Culture Documents
VXL - Chương 2 - Kiến trúc phần cứng MCU 8051
VXL - Chương 2 - Kiến trúc phần cứng MCU 8051
MCU 8051 là MCU tiêu biểu của họ MCS51 của hãng Intel
- 8051 là CPU 8 bit được tối ưu hóa cho ứng dụng điều khiển
- Bộ nhớ nội (bộ nhớ on_chip): ROM 4KB và RAM 128 Byte
- Bộ nhớ ngoài: có thể mở rộng 64KB bộ nhớ chương trình (code) và
64KB bộ nhớ dữ liệu (data).
- 4 cổng xuất/ nhập (I/O Port) 8 bit
So sánh các MCU thuộc họ MCS51
- 2 bộ đếm/định thì 16 bit
Mã số Bộ nhớ Bộ nhớ Số
- Giao tiếp nối tiếp UART code data Timer
- Bộ điều khiển ngắt với 5 nguồn ngắt. on-chip on-chip
8051 4K ROM 128 byte 2
- Bộ xử lý bit với 210 bit có địa chỉ. 8031 0 128 byte 2
- Lệnh nhân/chia 4MC. 8052 8K ROM 256 byte 3
8032 0 256 byte 3
SƠ ĐỒ KHỐI MCU 8051
CHỨC NĂNG CÁC CHÂN (PINS) MCU 8051
MCU 8051 có dạng thông dụng là DIP40
gồm: 32 chân I/0 port, 6 chân điều khiển
và 2 chân nguồn
Port 0: (chân 32 đến 39) có 2 chức năng
* I/0 port: P0.0 – P0.7
* dồn kênh bus địa chỉ thấp và bus dữ
liệu AD0 – AD7
Port 1: (chân 1 đến 8) chỉ là chân I/0
port: P1.0 – P1.7. Ngoại trừ 8032/8052
dùng P1.0 và P1.1 làm ngõ vào Timer 2
1
CHỨC NĂNG CÁC CHÂN (PINS) MCU 8051
ALE (Address Latch Enable) : (chân 30) là ngõ ra, là tín hiệu phân
kênh (demux) bus địa chỉ và bus dữ liệu của Port 0 (AD0-AD7) khi
8051 truy xuất bộ nhớ ngoài.
* Nửa đầu chu kỳ truy xuất bộ nhớ, khi port 0 là A0 – A7 thì ALE = 1
* Nửa sau chu kỳ truy xuất bộ nhớ, khi port 0 là D0 – D7 thì ALE = 0
ROM gửi lệnh về 8051
a) Dao động trên chip với bộ thạch anh b) Dao động ngoài cấp cho MCU
VCC, VSS: (chân 40, 20) nối nguồn VCC = +5V và nối đất VSS = 0V
CẤU TRÚC CỔNG XUẤT/NHẬP (I/0 PORT)
* 4 I/O port: P0, P1, P2 và P3, mỗi port 8 bit; có thể giao tiếp trực tiếp với
ngoại vi chuẩn TTL. Các chân port có thể sử dụng riêng lẻ (P1.0 – P1.7)
* Mạch bên trong của chân port: ngoại trừ Port 0 không có điện trở kéo lên bên trong
* Xuất (OUT): dữ liệu từ CPU ghi vào
chốt D, ngõ ra Q điều khiển FET.
- ghi 0: Q = 0 làm FET dẫn,
chân port nối đất bằng 0.
- ghi 1: Q = 1 làm tắt FET, chân
port nối nguồn Vcc bằng 1.
* Nhập (IN): để đọc được chân port thì
trước đó cần ghi 1 vào chốt D để khóa
FET. Vì nếu trước đó chốt có Q = 0 thì
FET dẫn, chân port luôn bằng 0.
(Khi reset thì các chân port đều ghi 1)
* Tùy theo lệnh nhập, CPU có thể đọc chân port hoặc đọc chốt
ĐỊNH THÌ & CHU KỲ MÁY (MC Machine Cycle)
* Mạch dao động trên chip kết hợp với thạch anh tạo nguồn xung nhịp cho CPU.
Xung nhịp có vai trò đồng bộ và định thì
* Thời gian CPU thực hiện lệnh gọi là chu kỳ lệnh (instruction cycle)
* Mỗi chu kỳ lệnh có thể 1 hay nhiều chu kỳ máy (machine cycle)
* Mỗi chu kỳ máy (MC) gồm 6 trạng thái (state); 1 trạng thái (state) có thời
gian bằng 2 chu kỳ xung nhịp Tclock
1 MC = 12 Tclock = 12/Fosc
FFFFh FFFFh
External
PSEN RD WR
TỔ CHỨC BỘ NHỚ
Bit Ký hiệu Địa chỉ bit Mô tả * PSW chứa các bit trạng
PSW.7 CY D7H Cờ nhớ (Carry) thái (gọi là các cờ - flag)
PSW.6 AC D6H Cờ nhớ phụ (Auxillary Carry)
PSW.5 F0 D5H Cờ 0 (Flag 0) * Ký hiệu của bit tương
PSW.4 RS1 D4H Bit 1 chọn bank thanh ghi đương với địa chỉ bit
PSW.3 RS0 D3H Bit 0 chọn bank thanh ghi
Vd: bit RS1
RS1 RS0 = 00 : bank0
0D4h
RS1 RS0 = 01 : bank1
0D0h.4
RS1 RS0 = 10 : bank2
RS1 RS0 = 11 : bank3
PSW.4
PSW.2 OV D2H Cờ báo tràn (Overflow)
(địa chỉ bit hay địa chỉ byte
PSW.1 - D1H Dự trữ có số hex cao là chữ cái thì
PSW.0 P D0H Cờ parity chẵn khi biểu diễn thêm số 0)
TỔ CHỨC BỘ NHỚ : SFR
0 0 : bank0
0 1 : bank1
1 0 : bank2
1 1 : bank3
* Các bit chọn bank thanh ghi RS1-RS0 (Register Bank Select Bits): bit
có địa chỉ D4h và D3h; dùng để chọn bank thanh ghi hiện hành (mặc
định ban đầu RS1 RS0 = 00: bank thanh ghi hiện hành là bank 0)
Để chọn bank thanh ghi hiện hành khác, dùng lệnh xử lý bit để thay
đổi RS1 và RS0
Vd: chọn Bank 2: SETB RS1 ; (RS1) = 1
CLR RS0 ; (RS0) = 0
TỔ CHỨC BỘ NHỚ : SFR
* Stack nằm trong vùng nhớ RAM nội có địa chỉ thấp (00h-7Fh)
* Truy xuất vùng stack bằng phương pháp định địa chỉ gián tiếp qua thanh
ghi SP. Nội dung thanh ghi SP chứa địa chỉ của ô nhớ đang là đỉnh ngăn xếp
(Top of stack - TOS). Giá trị ban đầu (SP) = 07h
- Cất data vào stack (PUSH): tăng (SP) lên 1, sau đó cất data vào ô nhớ
có địa chỉ là nội dung của thanh ghi SP (TOS tăng 1)
Khi cất data vào STACK, đỉnh ngăn xếp TOS tăng 1
TỔ CHỨC BỘ NHỚ : SFR
Thanh ghi con trỏ ngăn xếp SP (Stack Pointer): thanh ghi có địa chỉ 81h
- Lấy data từ stack (POP): nội dung của ô nhớ có địa chỉ là nội dung của
thanh ghi SP là data được lấy, sau đó (SP) giảm bớt 1 (TOS giảm 1)
SP 0A
09
0B 18
Vd: POP: TOS 0A 2B
Data được lấy ra từ STACK là 2Bh TOS 09 62
08 F0
Khi lấy data từ STACK, đỉnh ngăn xếp TOS giảm 1
* Data được cất/lấy từ stack theo kiểu LIFO (Last In First Out)
* Stack được dùng trong các lệnh PUSH/POP, và khi thực thi chương trình con
* Sau khi reset thì mặc định (SP) = 07h, thì vùng stack là ram nội từ 08h ÷ 7Fh.
Ta có thể thay đổi vùng stack bằng lệnh.
Vd: chọn vùng Stack từ 60h ÷ 7Fh bằng lệnh MOV SP, #5Fh
TỔ CHỨC BỘ NHỚ : SFR
Thanh ghi con trỏ dữ liệu DPTR (Data Pointer):
* Là thanh ghi 16 bit ghép từ thanh ghi DPH (Data Pointer High) có
địa chỉ 83h và thanh ghi DPL (Data Pointer Low) có địa chỉ 82h
* Dùng để chứa địa chỉ của ô nhớ ngoài cần truy xuất
Vd: MOVX A, @DPTR ; (A) ← ((DPTR))
Các thanh ghi port P0, P1, P2, P3: có địa chỉ lần lượt 80h, 90h, A0h và B0h
* I/0 port kết nối trực tiếp với ngoại vi. Làm việc với ngoại vi thì
dùng thanh ghi port tương ứng I/O port kết nối với ngoại vi.
- Xuất data ra ngoại vi: dùng lệnh ghi data vào thanh ghi port
Vd: MOV P1, #00h ; xuất 8 bit 0 ra ngoại vi nối với Port 1
- Nhập data từ ngoại vi: dùng lệnh đọc thanh ghi port
Vd: MOV A, P2 ; nhập ngoại vi ở Port 2 về thanh ghi A
* Các thanh ghi port có địa chỉ mã hóa riêng từng bit, do vậy có thể
điều khiển ngoại vi riêng lẻ ở mỗi chân port; bằng cách sử dụng lệnh
xử lý bit trên bit của thanh ghi port (Vd: SETB P1.7)
TỔ CHỨC BỘ NHỚ : SFR
* Bit SMOD: dùng để tăng gấp đôi tốc độ baud cho port nối tiếp
* Cờ đa dụng GF1, GF0 (General Purpose Flag): 2 cờ tùy ý người sử dụng
TỔ CHỨC BỘ NHỚ : SFR
* Bit chế độ nghỉ IDL (Idle mode): IDL = 1 làm MCU vào chế độ nghỉ (họ CMOS)
- Lệnh làm IDL=1 là lệnh cuối cùng được thực hiện trước khi MCU nghỉ
- Vào chế độ nghỉ: xung nhịp không cung cấp cho CPU, nhưng vẫn có cho các chức
năng ngắt, timer và port nối tiếp. Trạng thái CPU và nội dung thanh ghi được giữ
nguyên. Các chân port giữ nguyên mức logic. Các tín hiệu ALE và /PSEN ở mức cao.
- Chế độ nghỉ kết thúc khi có ngắt hay reset hệ thống. Khi đó bit IDL được xóa
* Bit chế độ giảm nguồn PD (Power down mode): PD = 1 làm MCU vào chế độ
giảm nguồn (họ CMOS)
- Lệnh làm PD=1 là lệnh cuối cùng được thực hiện trước khi MCU vào chế độ này
- Vào chế độ giảm nguồn: dao động trên chip và các chức năng bị dừng. Nội dung ram
trên chip giữ nguyên. Các chân port giữ nguyên mức logic. Các tín hiệu ALE và
/PSEN ở mức thấp.
- Chế độ giảm nguồn chỉ kết thúc khi reset hệ thống.
- Có thể giảm Vcc xuống 2V sau khi vào chế độ này. Phải hồi phục Vcc lên 5V ít nhất
10 chu kỳ xung nhịp trước khi chân RST về 0 (reset để thoát chế độ giảm nguồn)
TỔ CHỨC BỘ NHỚ
Port 0 D0 - D7
74373
EA
D Q A0 - A7
ALE G
Port 2 A8 - A15
PSEN OE
CS
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
Định thì đọc bộ nhớ chương trình: thời gian MCU đọc lệnh từ bộ nhớ
chương trình gọi là chu kỳ nhận lệnh (opcode fetch)
Vd: Chu kỳ nhận lệnh của 1 lệnh 2 byte có thời gian thực hiện là 1
chu kỳ máy (MC): có 2 xung ALE và 2 byte lệnh được nhận
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
BỘ NHỚ DỮ LIỆU NGOÀI (External Data Memory)
MCU 8051 đọc/ghi bộ nhớ chương trình ngoài bởi tín hiệu RD và WR
8051 RAM
Port 0 D0 - D7
74373
EA + 5V
D Q A0 - A7
ALE G
Port 2 A8 - A15
RD OE
WR WE
CS
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
Lệnh để truy xuất ram ngoài là MOVX với thanh ghi DPTR chứa địa chỉ ram
Định thì của lệnh đọc ram ngoài MOVX A, @DPTR: lệnh 1 byte tốn 2 MC
- Chu kỳ máy thứ 1 để đọc byte lệnh MOVX từ bộ nhớ chương trình
- Chu kỳ máy thứ 2 để thực thi lệnh MOVX để đọc data từ bộ nhớ dữ liệu,
có 1 xung ALE bị mất.
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
MCU 8051 cho phép làm việc với bộ nhớ dữ liệu ngoài có dung lượng nhỏ là
256 byte, khi đó bus địa chỉ có 8 bit A0 – A7 nên chỉ dùng port 0
Lệnh MOVX dùng thanh ghi R0 hay R1 chứa địa chỉ ram ngoài cần truy xuất
8051 RAM
Port 0 D0 - D7
74373
EA + 5V
D Q A0 - A7
ALE G
Port 2
RD OE
WR WE
CS
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
GIẢI MÃ ĐỊA CHỈ (Address Decoding)
Nếu MCU 8051 làm việc với nhiều chip bộ nhớ ROM hay RAM thì cần có mạch
giải mã địa chỉ. Mạch giải mã địa chỉ có nhiệm vụ phân chia các vùng địa chỉ làm
việc khác nhau cho từng chip nhớ.
Vd: Thiết kế mạch giải mã địa chỉ cho các chip ROM 2764 (8KB) và chip RAM
6264 (8KB)
- Không gian bộ nhớ ngoài là 64KB có 16 bit địa chỉ A0 – A15, vùng địa chỉ từ
0000h - FFFFh
* Bộ nhớ chương trình 64KB = 8 x 8KB dùng 8 ROM 2764
* Bộ nhớ dữ liệu 64KB = 8 x 8KB dùng 8 RAM 6264
- ROM/RAM 8KB: có 13 bit địa chỉ A0 – A12
- Sử dụng 3 bit địa chỉ cao A15 A14 A13 làm mạch giải mã địa chỉ
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
Mạch giải mã tạo các tín hiệu chọn chip (CS0, CS1, .. CS7) cho 8 chip nhớ 8KB
Bản đồ địa chỉ bộ nhớ cho 8 vùng nhớ mỗi vùng 8KB (CS0, CS1, .. CS7)
Tín hiệu
A A A A A A A A8 A7 A6 A5 A4 A3 A2 A1 A0 Vùng địa chỉ
chọn chip 15 14 13 12 11 10 9
/CS0 0 0 0 X X X X X X X X X X X X X 0000h - 1FFFh
/CS1 0 0 1 X X X X X X X X X X X X X 2000h - 3FFFh
/CS2 0 1 0 X X X X X X X X X X X X X 4000h - 5FFFh
/CS3 0 1 1 X X X X X X X X X X X X X 6000h - 7FFFh
/CS4 1 0 0 X X X X X X X X X X X X X 8000h - 9FFFh
/CS5 1 0 1 X X X X X X X X X X X X X A000h - BFFFh
/CS6 1 1 0 X X X X X X X X X X X X X C000h - DFFFh
/CS7 1 1 1 X X X X X X X X X X X X X E000h - FFFFh
TỔ CHỨC BỘ NHỚ
BỘ NHỚ NGOÀI (External Memory)
RAM
WR WE
RD
OE
PSEN
TÍNH NĂNG MỞ RỘNG CỦA 8032/8052
* Có thêm Timer 2 (16 bit) Thanh ghi Địa chỉ Mô tả Truy xuất bit
T2CON 0C8H Điều khiển Có
Dùng 5 SFR để lập trình RCAP2L 0CAH Bắt byte thấp Không
cho Timer 2 RCAP2H 0CBH Bắt byte cao Không
TL2 0CCH Byte thấp Timer2 Không
TH2 0CDH Byte cao Timer2 KHông
HOẠT ĐỘNG RESET
Mạch thực hiện reset hệ thống cho MCU Thanh ghi Nội dung
PC 0000H
A 00H
B 00H
PSW 00H
SP 07H
DPTR 0000H
P0-P3 FFH
IP(8031/51) XXX00000B
IP(8032/52) XX000000B
Khi ngõ vào RST ở mức cao ít nhất 2 chu kỳ IE(8031/51) 0XX00000B
máy (MC) thì 8051 reset; các thanh ghi bên IE(8032/52) 0X0000000B
Các reg. Timer 00H
trong nạp giá trị khởi động lại hệ thống.
SCON 00H
- (PC) = 0000h: chạy lại từ ô nhớ địa chỉ 0000h
SBUF 00H
- (PSW) = 00h: bank thanh ghi hiện hành là Bank 0 PCON(HMOS) 0XXXXXXXB
PCON(CMOS) 0XXX0000B
- (SP) = 07h: vùng stack từ 80h – 7Fh
- Các thanh ghi Port ghi FFh: các chân port sẵn sang chức năng nhập data (IN)
HEÁT CHÖÔNG 2