MSC-51 là một họ Vi điều khiển (Microcontroller) do nhiều hãng sản xuất. Tiền thân là Intel với vi xử lý kinh điển 8051 (được Intel sản xuất vào năm 1980), sau đó họ này được phát triển vượt bậc với trên 250 thành viên và được các công ty bán dẫn hàng đầu thể giới chế tạo như Intel, AMD, Atmel, Siemens, Philips, Dallas, OKI,… Các dẫn xuất này đều có chung một kiến trúc giống với vi điều khiển Intel 8051 , thêm vào đó, tùy theo từng loại mà các chíp dẫn xuất được tích hợp thêm các ngoại vi khác nhau (như ADC, SPI, EEPROM, capture/compare channels,…), tính năng cũng được nâng cao để phù hợp với các ứng dụng ngày càng phức tạp. Tiêu biểu cho họ MCS-51 là vi điều khiển AT89C51.
Thông số kỹ thuật AT89C51
- 4Kbytes EEPROM.
- 128 bytes RAM.
- 4 Port I/O (Input/Output).
- 2 bộ định thời Timer 16 bits.
- Giao tiếp nối tiếp.
- 64Kbytes không gian bộ nhớ chương trình mở rộng.
- 64Kbytes không gian dữ liệu mở rộng.
- Một bộ xử lý luận lí (thao tác trên các bits đơn).
- 120 bits được địa chỉ hóa.
- Bộ phân chia 4us.
Họ MCS-51 được chế tạo thành chip dạng PDIP, PQFP/TQFP và PLCC. Ta thấy rằng với trên 250 thành viên khác nhau thì số lượng và chủng loại của họ này là vô cùng lớn. Khi sử dụng cụ thể vi xử lý gì, người dùng cần tra các tính năng cua chip tương ứng. Hiện nay tại Việt Nam loại vi xử lý trong họ MCS-51 hay sử dụng là PDIP AT89C51/52.
Trong bảng dưới đây trình bày so sánh và phân biệt một số vi mạch vi xử lý của Intel cơ sở nằm trong họ MCS-51. Điểm khác nhau giữa hai loại là 8051-8052 chứa 4KB và 8KB-ROM nội, còn 8031 không chứa ROM nội và lấy chương trình từ ROM ngoài. Sơ đồ 8951 giống 8051 song chứa EEPROM, có thể nạp chương trình nhiều lần cho vi xử lý.
Số linh kiện | ROM | RAM | Chân I/O | Timer | Ngắt | Vcc | Đóng vỏ |
AT89C51 | 4K | 128 | 32 | 2 | 6 | 5V | 40 |
AT89LV51 | 4K | 128 | 32 | 2 | 6 | 3V | 40 |
AT89C1051 | 1K | 64 | 15 | 1 | 3 | 3V | 20 |
AT89C2051 | 2K | 128 | 15 | 2 | 6 | 3V | 20 |
AT89C52 | 8K | 128 | 32 | 3 | 8 | 5V | 40 |
AT89LV52 | 8K | 128 | 32 | 3 | 8 | 3V | 40 |
Sơ đồ khối 8051
Hệ thống giao tiếp Port
Port 0 (Cổng 0)
Port 0 là một port hai chức năng trên các chân 32–39. Trong các thiết kế cỡ nhỏ (không dùng bộ nhớ mở rộng) 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ớ mở rộng, nó được dồn kênh giữa bus địa chỉ và bus dữ liệu. Sơ đồ trên còn cho ta thấy phần cứng bên trong chip không có điện trở Pullup như Port 1,2,3 do vậy mà trong quá trình thiết kế phần cứng ta cần bổ sung điện trở treo ở Port 0. (Vậy điện trở treo là gì?)
Port 1 (Cổng 1)
Port 1 là cổng dành riêng cho nhập/xuất trên các chân 1–8. Các chân được ký hiệu P1.0, P1.1, P1.2, … có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị ngoài.
Port 2 (Cổng 2)
Port 2 là một cổng công dụng kép trên các chân 21–28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng.
Port 3 (Cổng 3)
Port 3 cũng là một cổng công dụng kép trên các chân 10–17. Các chân của port này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 8051/8031
Các thanh ghi trong 8051
8051 có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của Ram nội từ địa chỉ 80H đến FFH. Cần lưu ý là không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa.
Thanh ghi chính
Thanh ghi tính toán chính của vi điều khiển 8051 ACC (Accumulator). Là thanh ghi đặc biệt của 8051 dùng để thực hiện các phép toán của CPU, thường kí hiệu là A.
Thanh ghi phụ
Thanh ghi tính toán phụ của vi điều khiển 8051 là B. Thanh ghi B ở địa chỉ F0H được dùng chung với thanh chứa A trong các phép toán nhân, chia. Lệnh MUL AB nhân 2 số 8 bit không dấu chứa trong A và B và chứa kết quả 16 bit vào cặp thanh ghi B, A (thanh chứa A cất byte thấp và thanh ghi B cất byte cao).
Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư số cất trong thanh ghi B. Thanh ghi B còn được xử lý như một thanh ghi nháp. Các bit được định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H.
Thanh ghi trạng thái chương trình (PSW)
Thanh ghi trạng thái chương trình PSW (địa chỉ: D0H) là thanh ghi mô tả toàn bộ trạng thái chương trình đang hoạt động của hệ thống. Bảng 7 và Bảng 8 sẽ mô tả thanh ghi này.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CY | AC | F0 | RS1 | RS0 | OV | – | P |
Bảng 7: Thanh ghi trạng thái chương trình PSW
Bit | Ký Hiệu | Địa Chỉ | Mô tả Bit |
PSW.7 | CY | D7H | Cờ nhớ (Carry Flag): được Set nếu có Bit nhớ từ Bit 7 trong phép cộng hoặc có Bit mượn cho Bit 7 trong phép trừ. |
PSW.6 | AC | D6H | Cờ nhớ phụ: được Set trong phép cộng nếu có Bit nhớ từ Bit 3 sang Bit 4 hoặc kết quả trong 4 Bit thấp nằm trong khoảng 0AH->0FH. |
PSW.5 | FO | D5H | Cờ O: dành cho người sử dụng. |
PSW.4 | RS1 | D4H | Chọn dãy thanh ghi (Bit 1) |
PSW.3 | RS0 | D3H | Chọn dãy thanh ghi (Bit 0)00=Bank 0: Địa chỉ 00H->07H
01=Bank 1: Địa chỉ 08H->0FH 10=Bank 2: Địa chỉ 10H->17H 11=Bank 3: Địa chỉ 18H->1FH |
PSW.2 | OV | D2H | Cờ tràn (Overflow Flag): được Set khi phép toán có dấu có kết quả > +127 hoặc < -128. |
PSW.1 | – | D1H | Chưa dùng |
PSW.0 | P | D0H | Cờ kiểm tra chẵn lẻ: được Set hoặc Clear bởi phần cứng sau mỗi 1 chu kỳ lệnh, để chỉ ra rằng có 1 số chẵn hoặc số lẻ Bit 1 trong thanh chứa. |
Bảng 8: Chi tiết các bit trong thanh ghi PSW
Thanh ghi ngăn xếp (Stack Pointer)
Con trỏ stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H. SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của stack. Các lệnh liên quan đến satck bao gồm lệnh cất dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack. Việc cất vào stack làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm SP. Vùng stack của 8051 được giữ trong RAM nội và được giới hạn đến các địa chỉ truy xuất được bởi kiểu định địa chỉ gián tiếp. Các lệnh PUSH và POP sẽ cất dữ liệu vào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con (ACALL, LCALL) và lệnh trở về (RET, RETI) cũng cất và phục hồi nội dung của bộ đếm chương trình PC (Program counter)
Con trỏ dữ liệu DPTR
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ liệu ngoài. DPTR là một thanh ghi 16 bit có địa chỉ là 82H (DPL, byte thấp) và 83H (DPH, byte cao).
Thanh ghi các cổng P0-P3
Các port xuất/nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ 90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H. Tất cả các port đều được định địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh.
Thanh ghi bộ đệm truyền thông nối tiếp (Serial Data Buffer)
Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộ đệm nhận dữ liệu. Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽ được chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quá trình truyền dữ liệu qua truyền thông nối tiếp kết thúc. Khi thực hiện việc chuyển dữ liệu từ SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu của truyền thông nối tiếp.
Thanh ghi của bộ định thời/bộ đếm
8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thời gian hoặc để đếm các sự kiện. Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là các thanh ghi của bộ đếm thời gian. Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH (TH0, byte cao). Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1, byte cao).
Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD (Timer Mode Register) ở địa chỉ 88H. Chỉ có TCON được định địa chỉ từng bit.
Các thanh ghi điều khiển
Các thanh ghi điều khiển đặc biệt như IP, IE, TMOD, TCON, SCON và PCON là các thanh ghi điều khiển và ghi nhận trạng thái của hệ thống ngắt, bộ đếm/định thời, truyền thông nối tiếp.