Khác với các loại vi xử lý sử dụng để xử lý thông tin các máy tính PC xử lý văn bản, cơ sở dữ liệu, tính toán khoa học kỹ thuật, các vi điều khiển microcontroller được thiết kế để lắp đặ
Trang 1Đại Học Giao Thông Vận Tải Tp.HCM
Chương 2: Phần cứng 8051
Khoa Điện – Điện Tử Viễn Thông
Học phần: Vi Xử Lý
Trang 2Chương 2 bao gồm 9 nội dung:
1 Giới thiệu chung về VĐK
2 Cấu trúc của VĐK 8051.
3 Sơ lược các chân của 8051.
4 Cấu trúc của port I/O.
Trang 3I Giới thiệu chung về VĐK
Trang 41 Giới thiệu chung về VĐK
Quá trình phát triển nhanh của các loại vi xử lý cho phép ứng dụng
chúng trong các quá trình sản xuất như các bộ điều khiển Khác với các loại vi xử lý sử dụng để xử lý thông tin (các máy tính PC xử lý văn bản, cơ sở dữ liệu, tính toán khoa học kỹ thuật), các vi điều khiển
(microcontroller) được thiết kế để lắp đặt trực tiếp vào ứng dụng cụ thể Trong đó suốt quá trình vận hành của mình vi điều khiển chỉ thực hiện duy nhất một chức năng Việc ứng dụng rộng rãi các bộ vi điều khiển dẫn đến yêu cầu sản xuất tất cả các vi mạch trong một vỏ Việc tích hợp nhiều vi mạch trên một vỏ làm giảm giá thành và làm tăng
tính tin cậy của vi điều khiển
Trang 51 Giới thiệu chung về VĐK
Yêu cầu tăng cao tốc độ xử lý dẫn đến các cấu trúc của vi điều khiển khác với các cấu trúc của các bộ vi xử lý như Z80, 8086 và các vi xử
lý dùng cho máy tính PC Cấu trúc của vi điều khiển cho phép truy cập nhanh bộ nhớ dữ liệu, truy cập và xử lý nhanh các dữ liệu, truy cập
nhanh các thiết bị (phép nhân và chia dấu phẩy động, các phép toán đại số Boole với 1 bit … )
Trang 61 Giới thiệu chung về VĐK
Tổng quát ta có thể nói rằng vi điều khiển là một máy tính trong một chip (monolithic microcomputer) Trong đó đã bao gồm CPU, bộ nhớ, các thiết vị vào/ra phổ biến Cấu trúc của vi điều khiển được thiết kế
để phục vụ một mục đích cụ thể mà chỉ cần tối thiểu các mạch phụ trợ Chức năng của vi điều khiển được xác định bởi chương trình lưu trong
bộ nhớ ROM hoặc EPROM Chương trình được nạp một lần và không thay đổi trong suốt quá trình hoạt động
Trang 71 Giới thiệu chung về VĐK
Bộ nhớ của các vi điều khiển có cấu trúc khác với bộ nhớ của vi xử lý Z80 cùng loại Tại các họ vi xử lý ta dùng cấu trúc bộ nhớ Neuman, trong đó bản đồ bộ nhớ dùng chung cho cả chương trình (thường trong ROM- Read only memory) và dữ liệu (RWM – read write memory) Các bộ vi điều khiển sử dụng cấu trúc Harvard Tại đây bộ nhớ được chia làm hai loại: bộ nhớ chương trình (ROM) và bộ nhớ dữ liệu
(RWM)
Trang 81 Giới thiệu chung về VĐK
Trang 91 Giới thiệu chung về VĐK
Việc phân biệt này được suy ra từ thực tế rằng bộ nhớ ROM dùng để lưu chương trình không thể ghi vào được, và bộ nhớ này thường có độ dài vài kB (yêu cầu 10 đến 16 bit địa chỉ) CPU truy cập bộ nhớ này chủ yếu để đọc lệnh Bộ nhớ dữ liệu để lưu các kết quả tạm thời thông thường bé hơn, chỉ cần 8 bit địa chỉ hoặc thậm chí 4 bit địa chỉ Với địa chỉ bộ nhớ dữ liệu nhỏ, toán hạng sẽ có địa chỉ ngắn và nhiều khi
có thể lọt vào vào mã lệnh (object code) có độ dài 8 bit Cấu trúc bộ
nhớ Harvard là cơ sở cho việc xử lý nhanh thông tin trong các ứng dụng điều khiển.
Trang 101 Giới thiệu chung về VĐK
Cấu trúc không đổi của các loại vi điều khiển lại là giới hạn đối với việc áp dụng trong thực tế Tuy vậy trên thị trường có rất nhiều loại vi điều khiển cho các loại ứng dụng cụ thể khác nhau, mỗi loại tự phân biệt bằng lượng tối thiểu thiết bị được tích hợp bên trong
Trang 112 Họ VĐK x51
Vi điều khiển 8051 ra đời vào năm 1980 và đã là loại vi điều khiển tương đối “lớn tuổi” Tuy vậy 8051 đã nhận được sự mến chuộng đặc biệt của các nhà thiết kế hệ thống đến nỗi hiện nay tồn tại rất nhiều nhà sản xuất tập trung phát triển các sản phẩm trên cơ sở 8051 và phát triển thêm các thiết bị ngoại vi khác
Trang 122 Họ VĐK x51
Ví dụ chỉ riêng Philips đã sản xuất 24 loại vi điều khiển trên cơ sở
8051 Các vi điều khiển này khác nhau như sau: bộ nhớ chương trình
từ 2kB đến 32 kB, bộ nhớ này có loại có thể nạp một lần hoặc nhiều lần (EPROM), bộ nhớ EEPROM để nhớ các hằng số, bộ nhớ dữ liệu
mở rộng đến 256 kB, bộ ADC 8 hoặc 10 bit với bộ chọn 8 kênh, các cổng vào/ra mở rộng, bộ so sánh hoặc lưu dữ liệu, bus 2 dây I2C Các nhà sản xuất cung cấp các vi điều khiển có tần số từ 12MHz đến 33 MHz với loại vỏ DIL, PLCC đến loại nhỏ PQFP Một số nhà sản xuất tập trung vào các vi điều khiển với các phép tính số học (Siemens
80C537) hoặc việc định thời khác nhau (Dallas DS80C320)
Trang 132 Họ VĐK x51
Tổng kết các hướng phát triển cụ thể của vi điều khiển trên cơ sở 8051 được tổng kết như hình
Trang 142 Họ VĐK x51
Trên thị trường Việt nam hiện tại loại vi điều khiển AT89C51,
AT89S51, AT89C52, AT89S52 của hãng Atmel rất được phổ biến Vi điều khiển này có thể mua được với giá rẽ Kèm theo với vi điều khiển này là rất nhiều các thiết bị phụ trợ như bộ lập trình, các board mạch
cơ bản, các phần mềm phụ trợ… Vi điều khiển AT89C51 và các loại cùng họ của hãng Atmael có bộ nhớ chương trình bên trong là
EEPROM là bộ nhớ có thể xoá là nạp được bằng tín hiệu điện Điều này cho phép người lập trình có thể thử nghiệm, nạp chương trình vào
vi điều khiển nhiều lần Thiết bị nạp chương trình (programmer) cho
vi điều khiển này là tương đối đơn giản và có thể tự làm được Có thể
tham khảo tại trang chủ của hãng Atmel tại địa chỉ www.atmel.com.
Trang 15II Cấu trúc của VĐK 8051
Trang 161 Cấu trúc VĐK 8051
Các vi mạch của họ MCS-51 gồm: 8031/8032, 8051/8052, 8751/8752, 8951/8952,
892051 …
Vi mạch tiêu biểu của họ MCS-51 là 8031/8051 có các đặc điểm sau:
- 4 KB ROM nội (0 KB đối với 8031)
- 128 byte RAM nội.
- 4 port nhập/xuất 8 bit (I/O port).
- 2 bộ định thời 16 bit (timer).
- Mạch giao tiếp nối tiếp (serial port) 2 chiều.
- Bộ điều khiển ngắt xử lý 5 nguồn yêu cầu ngắt trong đó có 2 nguồn ngắt ngoài, 2 nguồn ngắt bên trong từ hai timer và 1 nguồn ngắt từ kênh nối tiếp Mức độ ưu tiên của các ngắt được quy định cụ thể.
- 64 KB không gian bộ nhớ chương trình ngoài.
- 64 KB không gian bộ nhớ dữ liệu ngoài.
- 210 bit được địa chỉ hoá.
Trang 171 Cấu trúc VĐK 8051
Trang 18III Sơ lược các chân của 8051
Trang 191 Sơ đồ chân 8051
Trang 202 Sơ đồ khối của 8051
Trang 213 PORT 0
Port 0 (P0.0 P0.7) là port hai chức năng trên các chân từ
32 đến 39 Trong các thiết kế cỡ nhỏ (không dùng bộ nhớ
ngoài) nó có chức năng như các đường I/O Đối với các thiết
kế lớn với bộ nhớ ngoài, port 0 được dồn kênh giữa bus dữ liệu (D0 D7) và byte thấp của bus địa chỉ (A0 A7)
Không có R pull up bên trong.
Trang 224 PORT 1
Port 1 (P1.0 P1.7) là một port I/O trên các chân từ 1 đến
8 Port 1 không có chức năng khác, nó chỉ được dùng cho giao tiếp với thiết bị ngoài.
Trang 235 PORT 2
Port 2 (P2.0 P2.7) là port có công dụng kép trên các chân
từ 21 đến 28 Nó được dùng như các đường I/O hoặc là byte cao của bus địa chỉ (A8 A15) đối với các thiết kế dùng bộ nhớ ngoài.
Trang 257 /PSEN (Program Store Enable)
- /PSEN là tín hiệu ra trên chân 29 Nó là tín hiệu điều
khiển để cho phép đọc bộ nhớ chương trình ngoài và thường được nối đến chân (Output Enable) của bộ nhớ này
- /PSEN sẽ ở mức 0 (mức tích cực) trong thời gian lấy lệnh Các mã nhị phân của chương trình được đọc từ bộ nhớ qua bus dữ liệu và được chốt vào thanh ghi lệnh của 8051 để giải
mã Khi thực thi chương trình trong ROM nội, /PSEN được duy trì ở mức 1 (mức không tích cực).
Trang 268 ALE (Address Latch Enable)
- ALE là tín hiệu ra trên chân 30 Nó là tín hiệu ra cho phép chốt địa chỉ để phân kênh cho bus dữ liệu (D0 D7) và byte thấp của bus địa chỉ (A0 A7) trên port 0: trong nửa đầu của chu kỳ bộ nhớ, xung
ALE cho phép chốt địa chỉ vào một thanh ghi bên ngoài, trong nửa sau của chu kỳ bộ nhớ, các đường port 0 như là các đường xuất/nhập dữ liệu
- Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số của mạch dao động trên chip và có thể được dùng làm nguồn xung nhịp cho các
thành phần khác của hệ thống Ví dụ, nếu xung nhịp mạch dao động trên 8051 là 12 MHz thì ALE có tần số là 2 MHz Chỉ trừ khi thi hành lệnh MOVX, một xung ALE sẽ bị mất đi Chân này cũng được làm
ngõ vào của xung lập trình cho EPROM trong 8051
Trang 279 /EA (External Access)
/EA là tín hiệu vào trên chân 31 Nó thường được nối với +5V (mức 1) hay GND (mức 0) Nếu ở mức 1, 8051 thực thi chương trình từ ROM nội trong khoảng địa chỉ thấp (4 KB) Nếu ở mức 0, 8051 chỉ thực thi chương trình từ bộ nhớ
chương trình ngoài Trong 8031, chân này luôn được nối
GND vì không có bộ nhớ chương trình trên chip.
Trang 2810 /RST và Vcc Vss
- RST là ngõ vào trên chân 9 Khi tín hiệu này được đưa lên mức cao (trong ít nhất là 2 chu kỳ máy), hệ thống sẽ khởi động lại.
- Các chân nguồn trên chân 40 và20 VCC = +5V, VSS nối đất.
Trang 2911 XTAL1 và XTAL2
XTAL1 và XTAL2 là ngõ vào và ngõ ra của mạch dao động trên chip
ở chân 18 và 19 Chúng thường được nối với một thạch anh ngoài và các tụ như hình để tạo xung clock Tần số thạch anh thông thường là
12 MHz
Chu kì máy (T M ) = 1 / (f OSC /12) = 12 / f OSC
Nếu tần số thạch anh là 12 MHz thì chu kì máy bằng 1 s
Trang 30IV Cấu trúc của port I/O
Trang 311 Cấu trúc của port I/O
Sơ đồ mạch bên trong của các chân port I/O được vẽ đơn giản như sau:
Trang 321 Cấu trúc của port I/O
Việc ghi ra một chân port sẽ nạp dữ liệu từ bus nội vào chốt port Ngõ
ra của chốt được nối qua một cổng đảo đến cực G của FET và ngõ ra
của FET nối đến chân port Khi ghi mức 1 đến chốt port, ngõ ra cổng đảo sẽ là mức 0 làm FET tắt, ngõ ra chân port sẽ là mức 1 Ngược lại, khi ghi mức 0 đến chốt port sẽ làm FET dẫn nên ngõ ra chân port sẽ là mức 0 Các câu lệnh yêu cầu hoạt động đọc-sửa-ghi (ví dụ lệnh CPL P1.5), sẽ đọc ở chân chốt port để tránh hiểu nhầm mức điện áp ở chân
port do ảnh hưởng tải Các câu lệnh nhập một bit từ port (ví dụ MOV
C,P1.5) sẽ đọc chân port Trong trường hợp này, chốt port phải ở mức
1, nếu không thì FET sẽ dẫn và kéo ngõ ra xuống mức 0
Trang 331 Cấu trúc của port I/O
Khi reset hệ thống, tất cả các chốt port được cài bằng 1, vì
thế các chân port có thể được dùng như là các ngõ nhập ngay
mà không cần phải cài các chốt port nữa Tuy nhiên nếu một chốt port bị xoá (ví dụ lệnh CLR P1.5), và sau đó muốn nhập vào từ chân port thì bộ chốt phải được thiết lập lên mức 1
trước (ví dụ phải dùng lệnh SETB P1.5 trước).
Chú ý: điện trở kéo lên (pull up) không có ở port 0 (trừ khi port
này làm nhiệm vụ dồn kênh bus địa chỉ/dữ liệu) Do đó khi port
Trang 34V Tổ chức bộ nhớ
Trang 351 Tổ chức bộ nhớ
- 8051 có không gian bộ nhớ riêng bên trong cho chương
trình (ROM) và dữ liệu (RAM).
- Có thể mở rộng đến 64K bộ nhớ chương trình ngoài và
64K bộ nhớ dữ liệu ngoài (tương ứng với 16 bit địa chỉ).
- Có 256 byte RAM nội ( địa chỉ 00H FFH):
+ 128 byte RAM nội địa chỉ 00H 7FH: là các bank (dãy) thanh ghi, vùng RAM định vị bit và vùng RAM đa
dụng.
+ 128 byte RAM nội địa chỉ 80H FFH: là các thanh
Trang 362 Các bank thanh ghi
- Địa chỉ từ 00H 1FH.
- Có 4 bank thanh ghi: 0, 1, 2, 3.
- Mỗi bank có 8 thanh ghi: từ R0 R7.
- Tại mỗi thời điểm, chỉ có một bank thanh ghi tích cực
(thông qua việc cài các bit chọn bank trong thanh ghi PSW) Bank thanh ghi tích cực mặc nhiên sau khi reset hệ thống là bank 0.
Trang 372 Các bank thanh ghi
Trang 383 Vùng RAM định vị bit
- Địa chỉ từ 20H 2FH.
- Gồm 128 bit được định địa chỉ từ 00H đến 7FH trong các byte địa chỉ từ 20H 2FH.
- Có thể truy xuất từng byte hay từng bit.
Ý tưởng truy xuất từng bit riêng rẽ bằng phần mềm là một đặc tính mạnh của các vi điều khiển, đặc biệt đối với các
ứng dụng điều khiển Các bit có thể được đặt, xóa, AND, OR… với một lệnh đơn
Trang 393 Vùng RAM định vị bit
Trang 404 Vùng RAM đa dụng
- Địa chỉ từ 30 7FH.
- Gồm 80 byte được định địa chỉ từ 30H 7FH, được sử dụng tùy mục đích của người dùng.
Trang 414 Vùng RAM đa dụng
Trang 42VI Các thanh ghi chức năng đặc biệt (SFRs: Special Function Registers)
Trang 431 Thanh ghi tích lũy A (Accumulator)
- Còn kí hiệu là ACC (tương ứng với địa chỉ E0H), được định địa chỉ từng bit
-Thường là toán hạng đích trong các lệnh số học và logic, kết quả của
lệnh chứa trong thanh ghi A
A + Toán hạng nguồn = Kết quả
Ví dụ:
Trang 442 Thanh ghi trạng thái chương trình PSW (Program Status Word)
Địa chỉ là D0H, chứa các bit trạng thái như sau:
- Cờ nhớ CY (C) Có hai công dụng:
+ Được đặt bằng 1 nếu có một số nhớ sinh ra bởi phép cộng hoặc có một
số mượn bởi phép trừ Ví dụ, nếu thanh ghi tích luỹ chứa FFH, thì lệnh sau:
C = 1.
+ Là “thanh ghi tích lũy” 1 bit trong các lệnh logic thao tác trên bit Ví
dụ, lệnh sau sẽ AND bit 25H với cờ nhớ và đặt kết quả trở vào cờ nhớ:
ANL C, 25H
Trang 452 Thanh ghi trạng thái chương trình PSW (Program Status Word)
Trang 462 Thanh ghi trạng thái chương trình PSW (Program Status Word)
- Cờ F0 : là một bit cờ đa dụng, được dùng tùy mục đích của người sử dụng
- RS1 và RS0: Là các bit dùng để chọn bank thanh ghi tích cực Chúng được xóa sau khi reset hệ thống và được thay đổi bằng phần mềm nếu cần
Trang 472 Thanh ghi trạng thái chương trình PSW (Program Status Word)
Cờ tràn OV (Overflow): Được đặt bằng 1 sau một lệnh cộng hoặc lệnh trừ nếu có một phép toán bị tràn số học Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit này để xác định xem kết quả có nằm trong tầm xác định không Khi các số không dấu được cộng, bit OV có thể được bỏ qua Các kết quả lớn hơn +127 hoặc lớn hơn –128 sẽ đặt bit OV Ví dụ, phép cộng sau bị tràn và bit OV được đặt:
Kết quả là một số có dấu 8EH được xem như –114, không phải là kết
Trang 482 Thanh ghi trạng thái chương trình PSW (Program Status Word)
- Cờ kiểm tra chẵn lẻ P (Parity)
Được tự động tạo ra theo phương pháp kiểm tra chẵn đối với
dữ liệu trong thanh ghi A.
+ Kiểm tra chẵn (even parity): tổng số các bit 1 trong thanh ghi A và cờ P là chẵn.
+ Kiểm tra lẻ (odd parity): tổng số các bit 1 trong thanh ghi
A và cờ P là lẻ.
Trang 493 Thanh ghi B
- Địa chỉ là F0H, được định địa chỉ từng bit.
- Được dùng kèm với thanh ghi A trong các phép toán nhân, chia hay dùng như một thanh ghi đa dụng.
Trang 504 Thanh ghi B
- Địa chỉ là F0H, được định địa chỉ từng bit.
- Được dùng kèm với thanh ghi A trong các phép toán nhân, chia hay dùng như một thanh ghi đa dụng.
Trang 515 Con trỏ stack SP (Stack Pointer)
- Stack (ngăn xếp) là vùng nhớ trên RAM mà P dùng để lưu thông tin tạm thời
- Con trỏ stack SP có địa chỉ là 81H, là thanh ghi chứa địa chỉ của byte
dữ liệu hiện hành trên đỉnh của stack
- Các lệnh trên stack bao gồm các thao tác cất dữ liệu vào stack và lấy
dữ liệu ra khỏi vùng stack Lệnh cất dữ liệu vào stack (PUSH) sẽ làm tăng nội dung SP trước khi ghi dữ liệu và lệnh lấy dữ liệu ra khỏi vùng stack (POP) sẽ đọc dữ liệu và giảm nội dung SP Việc cất và lấy dữ
Trang 525 Con trỏ stack SP (Stack Pointer)
- Vùng stack của 8051 được giữ trong RAM nội Khi khởi động, nội dung mặc định của SP là 07H Do đó vùng stack là 08H 7FH Trong trường hợp này, bank thanh ghi 1 (có thể cả 2 và 3) sẽ không dùng được vì vùng RAM này đã được dùng làm stack Vì vậy, cần khởi động lại giá trị cho SP, thường lấy vùng nhớ phía trên từ 60H 7FH.
- Trước khi thực hiện một chương trình con hoặc chương trình phục vụ ngắt, địa chỉ của lệnh kế tiếp của lệnh hiện hành sẽ được tự động lưu vào vùng stack Sau khi thực thi xong và thoát khỏi chương trình con hoặc chương trình phục vụ
ngắt, địa chỉ của lệnh kế tiếp được lưu trong vùng stack sẽ được đưa vào PC và chương trình sẽ tiếp tục thực thi tại điểm mà nó đã ngưng trước đó Trong
trường hợp có nhiều chương trình con lồng nhau hoặc ngắt trong ngắt, quy tắc FILO sẽ đảm bảo cho việc thực thi chương trình theo đúng trình tự.
Trang 536 Thanh ghi con trỏ dữ liệu DPTR (Data Pointer)
- Là thanh ghi 16 bit, gồm hai thanh ghi 8 bit là DPL (byte thấp) và DPH (byte cao).
- Được dùng để xác định địa chỉ bộ nhớ ngoài (bộ nhớ
chương trình ngoài hay bộ nhớ dữ liệu ngoài).