CHƯƠNG 1 TỔNG QUAN VỀ VI ĐIỀU KHIỂN 1.1 Giới thiệu chung và cấu trúc vi điều khiển a. Giới thiệu Họ vi điều khiển MCS-51 do Intel sản xuất đầu tiên vào năm 1980 là các IC thiết kế cho các ứng dụng hướng điều khiển. MCS-51 là họ vi điều khiển sử dụng cơ chế CISC (Complex Instruction Set Computer), có độ dài và thời gian thực thi của các lệnh khác nhau. Tập lệnh cung cấp cho MCS-51 có các lệnh dùng cho điều khiển xuất / nhập tác động đến từng bit.
MCS-51 bao gồm nhiều vi điều khiển khác nhau, bộ vi điều khiển đầu tiên là 8051 có 4KB ROM, 128 byte RAM và 8031, không có ROM nội, phải sử dụng bộ nhớ ngoài. AT89C51 là một Microcomputer 8 bit, loại CMOS có tốc độ cao và công suất thấp với bộ nhớ flash có thể lập trình được. Nó được sản xuất với công nghệ bộ nhớ không bay hơi mật độ cao của hãng Atmel và tương thích với chuẩn công nghiệp của 80C51 và 80C52 về chân ra và bộ lệnh. Vì lý do đó, kể từ đây về sau sẽ dùng thuật ngữ “80C51” hoặc 8051.
Cấu trúc vi điều khiển AT89C51 AT89C51 là vi điều khiển do Atmel sản xuất, chế tạo theo công nghệ CMOS có các đặc tính như sau: - 4 KB PEROM (Flash Programmable and Erasable Read Only Memory), có khả năng tới 1000 chu kỳ ghi xoá - Tần số hoạt động từ: 0Hz đến 24 MHz - 3 mức khóa bộ nhớ lập trình 7 t - 128 Byte RAM nội. - 4 Port xuất /nhập I/O 8 bit. - 2 bộ Timer/counter 16 Bit. - Giao tiếp nối tiếp điều khiển bằng phần cứng.
- 64 KB vùng nhớ mã ngoài - 64 KB vùng nhớ dữ liệu ngoài. - Cho phép xử lý bit. - 210 vị trí nhớ có thể định vị bit. - 4 chu kỳ máy (4 µs đối với thạch anh 12MHz) cho hoạt động nhân hoặc chia.1 Sơ đồ khối sơ đồ khối MSC-51 9 t 1.2 Sơ đồ chân Sơ đồ chân của AT89C51 Chức năng từng chân AT89C51 có tất cả 40 chân, mỗi chân có chức năng như các đường I/O (xuất/nhập).
Trong đó có 24 chân có tác dụng kép: mỗi đường có thể hoạt động như một đường I/O hoặc như một đường điều khiển hoặc như thành phần của bus địa chỉ và bus dữ liệu. Mô tả chân + Port 0: là port có 2 chức năng ở các chân 32 – 39 của AT89C51. 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 IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
+ Port 1: là port IO trên các chân 1-8. Các chân được ký hiệu 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ó 10 t 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ị bên ngoài + Port 2 là 1 port có tác 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 bị dùng bộ nhớ mở rộng. + Port 3 là port có tác 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 89C51 như ở bảng sau: Bit Tên Chức năng chuyển đổi P3.0 RXT Ngõ vào dữ liệu nối tiếp P3.1 TXD Ngõ xuất dữ liệu nối tiếp P3.2 INT0\ Ngõ vào ngắt cứng thứ 0 P3.3 INT1\ Ngõ vào ngắt cứng thứ 1 P3.4 T0 Ngõ vào của TIMER/COUNTER thứ 0 P3.5 T1 Ngõ vào của TIMER/COUNTER thứ 1 P3.6 WR\ Tín hiệu ghi dữ liệu lên bộ nhớ ngoài P3.7 RD\ Tín hiệu đọc bộ nhớ dữ liệu ngoài + Ngõ tín hiệu PSEN (Program store enable): PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nối đến chân 0E\ (output enable) của Epromcho phép đọc các byte mã lệnh. PSEN ở mức thấp trong thời gian Microcontroller 89C51 lấy lệnh. Các mã lệnh của chương trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 89C51 để giải mã lệnh. Khi 89C51 thi hành chương trình trong ROM nội PSEN sẽ ở mức 1 + Ngõ tín hiệu điều khiển ALE (Address Latch Enable): Tín hiệu ra ALE ở chân thứ 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 ra ở chân ALE là một xung trong 11 t khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động + Ngõ tín hiệu EA\(External Access) : Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc mức 0. Nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8Kbyte. Nếu ở mức 0, 89C51 sẽ thi hành chương trình từ bộ nhớ mở rộng. Chân EA\ được lấy làm chân cấp nguồn 21V + Ngõ tín hiệu RST (Reset): Ngõ vào RST ở chân 9 là ngõ vào Reset của 8951.
Khi cấp điện mạch tự động Reset. + Các ngõ vào bộ giao động X1, X2: Bộ dao động được được tích hợp bên trong 8951, khi sử dụng 8951 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ. + Chân 40 (Vcc) được nối lên nguồn 5V + GND chân 20 chân nối đất 1.3 Tổ chức bộ nhớ Các vùng nhớ trong của AT89C51 Bộ nhớ của họ MCS-51 có thể chia thành 2 phần: bộ nhớ trong và bộ nhớ ngoài.1 Tổ chức bộ nhớ trong Bộ nhớ trong 8951 bao gồm ROM và RAM. RAM trong 8951 bao gồm nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt.
89C51 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng biết cho chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên trong 89C51 nhưng 89C51 vẫn có thể kết nỗi với 64k byte bộ nhớ chương trình và 64K byte dữ liệu Các đặc tính cần chú ý là: - Các thanh ghi và các port xuất nhập đã được định vị trong bộ nhớ và có thể truy xuất trực tiếp giống như của cơ sở địa chỉ bộ nhớ khác - Ngăn xếp bên trong Ram nội nhỏ hơn so với Ram ngoại - Ram bên trong 89C51 được phân chia như sau: o Các bank thanh ghi có địa chỉ từ 00h đên 1FH o Ram địa chỉ hóa từng bít có địa chỉ từ 20H đến 2FH o Ram đa dụng từ 30H đến 7FH o Các thanh ghi chức năng đặc biệt từ 80H đến FFH Các thanh ghi có chức năng đặc biệt: Các thanh ghi nội của AT 89C51 được truy xuất ngầm định bởi bộ lệnh. Các thanh ghi trong 8951 được định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ có một địa chỉ. Tất cả 128 địa chỉ từ 80H đến FFH không được định nghĩa, chỉ có 21 thanh ghi có chức năng đặc biết được định nghĩa sẵn các địa chỉ Ngoại trừ thanh ghi A có thể được truy xuất ngầm như đã nói, đa số các thanh ghi có chức năng đặc biệt SFR có thể địa chỉ hóa từng bít hoặc byte Chức năng từng bit trạng thái chương trình Cờ Carry CY (Carry Flag): 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 có mượn.
13 t Cờ Carry phụ AC (Auxiliary Carry Flag): Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set nếu kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH ÷ 0FH. Ngược lại AC= 0 Cờ 0 (Flag 0): Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng. Cờ tràn OV (Over Flag): Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học. 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 - Con trỏ dữ liệu DPTR (Data Pointer): 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 55H vào RAM ngoài ở địa chỉ 1000H: MOV A, #55H MOV DPTR, #1000H MOV @DPTR, A - Các thanh ghi ngắt (Interrupt Register): AT89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi bị reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ A8H. Cả hai được địa chỉ hóa từng bit.
- Thanh ghi điều khiển nguồn PCON (Power Control Register): Thanh ghi PCON không có bit định vị. Nó ở địa chỉ 87H chứa nhiều bit điều khiển.2 Bộ nhớ ngoài (External memory): 89C51 có khả năng mở rộng bộ nhớ lên đến 64K byte bộ nhớ chương trình và 64K byte bộ nhớ dữ liệu ngoài Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được đọc hoặc ghi khi được cho phép của tín hiệu RD\ và WR. Hai tín hiệu này nằm ở chân P3. Hoạt động Reset: 89C51 có 2 cách thực hiện reset: reset bằng tay hoặc reset tự động: 14 t - Reset tự động: Mạch Autoreset thường được dùng để xác định trạng thái đầu tiên của mạch ngay khi vừa cấp nguồn để mạch luôn luôn hoạt động đúng như yêu cầu thiết kế.
- Reset bằng tay: Việc thiết kế mạch Reset bằng tay rất đơn giản chỉ việc thêm vào mạch Reset tự động một SW và điện trở như hình. Nguyên lý mạch giống như mạch Reset tự động 1.4 Hoạt động Timer của AT89C51 1.1 Giới thiệu Bộ định thời của Timer là một chuỗi các Rlip Flop được chia làm 2, nó nhận tín hiệu vào là một nguồn xung clock, xung clock được đưa vào Flip Flop 15 t thứ nhất là xung clock của Flip Flop thứ hai mà nó cũng chia tần số clock này cho 2 và cứ tiếp tục Vì mỗi tầng kế tiếp chia cho 2, nên Timer n tầng phải chia tần số clock ngõ vào cho 2n. Ngõ ra của tầng cuối cùng là clock của Flip Flop tràn Timer hoặc cờ mà nó kiểm tra bởi phần mềm hoặc sinh ra ngắt. Giá trị nhị phân trong các FF của bộ Timer có thể được nghỉ như đếm xung clock hoặc các sự kiện quan trọng Hoạt động của Timer đơn giản 3 bit được minh họa như sau Biểu đồ thời gian 89C51 có 2 bộ Timer 16 bit, mỗi Timer có 4 mode hoạt động.