Vi điều khiển 8051 có bao nhiêu bank thanh ghi

CHƯƠNG 1GIỚI THIỆU CHUNG VỀ VI ĐIỀU KHIỂN1.1. ĐẶT VẤN ĐỀBộ vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tính toán, xửlý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu quả đối vớicác bài toán và hệ thống lớn. Tuy nhiên đối với các ứng dụng nhỏ, tầm tính toán không đòihỏi khả năng tính toán lớn thì việc ứng dụng vi xử lý cần cân nhắc. Bởi vì hệ thống dù lớnhay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi các khối mạch điện giao tiếp phức tạp như nhau.Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình thực hiện, các mạch điệngiao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối này cùng liên kết với vi xử lýthì mới thực hiện được công việc. Để kết nối các khối này đòi hỏi người thiết kế phải hiểubiết tinh tường về các thành phần vi xử lý, bộ nhớ, các thiết bị ngoại vi. Hệ thống được tạora khá phức tạp, chiếm nhiều không gian, mạch in phức tạp và vấn đề chính là trình độngười thiết kế. Kết quả là giá thành sản phẩm cuối cùng rất cao, không phù hợp để áp dụngcho các hệ thống nhỏ.Vi điều khiển được ứng dụng trong các dây chuyền tự động loại nhỏ, các robot cóchức năng đơn giản, trong máy giặt, ôtô v.v 1.2. ỨNG DỤNG CỦA VI ĐIỀU KHIỂN- Một bộ vi xử lý tối giản được sử dụng như bộ não của hệ thống.- Tùy theo công nghệ của mỗi hãng sản xuất, có thể có thêm bộ nhớ, các chânnhập/xuất tín hiệu, bộ đếm, bộ định thời, các bộ chuyển đổi tương tự/số (A/D), …- Tất cả chúng được đặt trong một vỏ chíp tiêu chuẩn.Dựa trên nguyên tắc cơ bản trên, rất nhiều họ vi điều khiển đã được phát triển và ứngdụng một cách thầm lặng nhưng mạnh mẽ vào mọi mặt của đời sống của con người. Một sốứng dụng cơ bản thành công có thể kể ra sau đây:- Những thành phần điện tử được nhúng vào vi điều khiển có thể trực tiếp hoặc quacác thiết bị vào ra (công tắc, nút bấm, cảm biến, LCD, rơ le, …) điều khiển rất nhiều thiết bịvà hệ thống như thiết bị tự động trong công nghiệp, điều khiển nhiệt độ, dòng điện, động cơ,…- Giá thành rất thấp khiến cho chúng được nhúng vào rất nhiều thiết bị thông minhtrong đời sống con người như ti vi, máy giặt, điều hòa nhiệt độ, máy nghe nhạc,…1.3. HOẠT ĐỘNG CỦA VI ĐIỀU KHIỂN1. Khi không có nguồn điện cung cấp, vi điều khiển chỉ là một con chip có chươngtrình nạp sẵn vào trong đó và không có hoạt động gì xảy ra.2. Khi có nguồn điện, mọi hoạt động bắt đầu được xảy ra với tốc độ cao. Đơn vị điềukhiển logic có nhiệm vụ điều khiển tất cả mọi hoạt động. Nó khóa tất cả các mạch khác, trừmạch dao động thạch anh. Sau mini giây đầu tiên tất cả đã sẵn sàng hoạt động.3. Điện áp nguồn nuôi đạt đến giá trị tối đa của nó và tần số dao động trở nên ổnđịnh. Các bit của các thanh ghi SFR cho biết trạng thái của tất cả các mạch trong vi điềukhiển. Toàn bộ vi điều khiển hoạt động theo chu kỳ của chuỗi xung chính.4. Thanh ghi bộ đếm chương trình (Program Counter) được xóa về 0. Câu lệnh từ địa1chỉ này được gửi tới bộ giải mã lệnh sau đó được thực thi ngay lập tức.5. Giá trị trong thanh ghi PC được tăng lên 1 và toàn bộ quá trình được lặp lại vàitriệu lần trong một giây.2Hình 1-1. Cấu trúc chung họ Vi điều khiển1.4. CẤU TRÚC CHUNG CỦA VI ĐIỀU KHIỂN (hình 2-1)1.4.1. Bộ nhớ (Memory)a. Read Only Memory (ROM)Read Only Memory (ROM) là một loại bộ nhớ được sử dụng để lưu vĩnh viễn cácchương trình được thực thi. Kích cỡ của chương trình có thể được viết phụ thuộc vào kíchcỡ của bộ nhớ này. Random Access Memory (RAM)Random Access Memory (RAM) là một loại bộ nhớ sử dụng cho các dữ liệu lưu trữtạm thời và kết quả trung gian được tạo ra và được sử dụng trong quá trình hoạt động của bộvi điều khiển. Nội dung của bộ nhớ này bị xóa một khi nguồn cung cấp bị tắt.b. Electrically Erasable Programmable ROM (EEPROM)EEPROM là một kiểu đặc biệt của bộ nhớ chỉ có ở một số loại vi điều khiển. Nộidung của nó có thể được thay đổi trong quá trình thực hiện chương trình (tương tự nhưRAM), nhưng vẫn còn lưu giữ vĩnh viễn, ngay cả sau khi mất điện (tương tự như ROM). 3Hình 1-2 Giao tiếp bộ nhớ1.4.2. Các thanh ghi chức năng đặc biệt (SFR)Thanh ghi chức năng đặc biệt (Special Function Registers) là một phần của bộ nhớRAM. Mục đích của chúng được định trước bởi nhà sản xuất và không thể thay đổi được. 1.4.3. Bộ đếm chương trình (PC: Program Counter)Bộ đếm chương trình chứa địa chỉ chỉ đến ô nhớ chứa câu lệnh tiếp theo sẽ được kíchhoạt. Sau mỗi khi thực hiện lệnh, giá trị của bộ đếm được tăng lên 1. Vì lý do đó nênchương trình chỉ thực hiện được được từng lệnh trong một thời điểm.1.4.4. Central Processor Unit (CPU)Đây là một đơn vị có nhiệm vụ điều khiển và giám sát tất cả các hoạt động bên trongvi điều khiển và người sử dụng không thể tác động vào hoạt động của nó. Nó bao gồm mộtsố đơn vị con nhỏ hơn, trong đó quan trọng nhất là:Bộ giải mã lệnh có nhiệm vụ nhận dạng câu lệnh và điều khiển các mạch khác theolệnh đã giải mã. Việc giải mã được thực hiện nhờ có tập lệnh “instruction set”. Mỗi họ viđiều khiển thường có các tập lệnh khác nhau. Arithmetical Logical Unit (ALU) Thực thi tấtcả các thao tác tính toán số học và logic.Thanh ghi tích lũy (Accumulator) là một thanh ghi SFR liên quan mật thiết với hoạtđộng của ALU. Nó lưu trữ tất cả các dữ liệu cho quá trình tính toán và lưu giá trị kết quả đểchuẩn bị cho các tính toán tiếp theo. Một trong các thanh ghi SFR khác được gọi là thanhghi trạng thái (Status Register) cho biết trạng thái của các giá trị lưu trong thanh ghi tích lũy.1.4.5. Các cổng vào/ra (I/O Ports)Để vi điều khiển có thể hoạt động hữu ích, nó cần có sự kết nối với các thiết bị ngoạivi. Mỗi vi điều khiển sẽ có một hoặc một số thanh ghi (được gọi là cổng) được kết nối vớicác chân của vi điều khiển.4Hình 1-3. Vào ra với thiết bị ngoại viChúng được gọi là cổng vào/ra (I/O port) bởi vì chúng có thể thay đổi chức năng,chiều vào/ra theo yêu cầu của người dùng.1.4.6. Bộ dao động (Oscillator)Hình 1-4. Ghép nối bộ dao động.Bộ dao động làm nhiệm vụ đồng bộ hóa hoạt động của tất cả các mạch bên trong viđiều khiển. 1.4.7. Bộ định thời/đếm (Timers/Counters)Hầu hết các chương trình sử dụng các bộ định thời trong hoạt động của mình. Chúngthường là các thanh ghi SFR 8 hoặc 16 bit, sau mỗi xung dao động clock, giá trị của chúngđược tăng lên. Ngay khi thanh ghi tràn, một ngắt sẽ được phát sinh.5Hình 1-5. Bộ định thời/đếm1.4.8. Truyền thông nối tiếpHình 1-6. Truyền nhận nối tiếpKết nối song song giữa vi điều khiển và thiết bị ngoại vi được thực hiện qua các cổngvào/ra là giải pháp lý tưởng với khoảng cách ngắn trong vài mét. Tuy nhiên khi cần truyềnthông giữa các thiết bị ở khoảng cách xa thì không thể dùng kết nối song song, vì vậy truyềnthông nối tiếp là giải pháp tốt nhất.Ngày nay, hầu hết các vi điều khiển có một số bộ điều khiển truyền thông nối tiếpnhư một trang bị tiêu chuẩn. Chúng được sử dụng phụ thuộc vào nhiều yếu tố khác nhaunhư:- Bao nhiêu thiết bị vi điều khiển muốn trao đổi dữ liệu- Tốc độ trao đổi dữ liệu- Khoảng cách truyền- Truyền/nhận dữ liệu đồng thời hay không?1.4.9. Chương trìnhKhông giống như các mạch tích hợp, chỉ cần kết nối các thành phần với nhau và bậtnguồn, vi điều khiển cần phải lập trình trước. Để viết một chương trình cho vi điều khiển, cómột vài ngôn ngữ lập trình bậc thấp có thể sử dụng như Assembly, C hay Basic61.5. ĐỊNH DẠNG DỮ LIỆU TRONG VI ĐIỀU KHIỂN1.5.1. Các hệ đếm• Hệ thập phân - Decimal• Hệ nhị phân - Binary• Hệ16 - Hexadecimal• Mã BCD (standard BCD, gray code): (Binary Coded Decimal)Trong thực tế, đối với một số ứng dụng như đếm tần, đo điện áp, … ngõ ra ở dạng sốthập phân, ta dùng mã BCD. Mã BCD dùng 4 bit nhị phân để mã hoá cho một số thập phân0 9. Như vậy, các số hex A F không tồn tại trong mã BCD.Mã BCD gồm có 2 loại:- Mã BCD không nén (unpacked): biểu diễn một số BCD bằng 8 bit nhị phân- Mã BCD nén (packed): biểu diễn một số BCD bằng 4 bit nhị phânVí dụ: Số thập phân 529Số BCD không nén 0000 0101b 0000 0010b 0000 1001bSố BCD nén 0101b 0010b 1001b• Mã hiển thị 7 đoạn (7-segment display code)Hình 1- 7.LED 7 thanh và cáchmã hóa• Các mã hệ đếm thông dụngBảng 1-1. Giá trị tương ứng giữa các hệ sốHệ 10 Hệ 2 Hệ 8 Hệ 16 Binary-Coded Decimal Gray Code 7-Segment8421 BCDEXCESS-3abcdefgDisplay000000000000011 001100001111110100011100010011 010000010110001200102200100011 010100111101102300113300110011 011000101111003401004401000011 011101100110014501015501010011 100001111011015601106601100011 100101011011116701117701110011 1010010011100078100010810000011 1011110011111189100111910010011 11001101111001910101012A0001 00000100 00111111111110A11101113B0001 00010100 01001110001111B12110014C0001 00100100 01011010000110C13110115D0001 00110100 01101011011110D14111016E0001 01000100 01111001110111E15111117F0001 01010100 10001000100011F781.5.2. Mã ký tự - Alphanumeric CODE (ASCII, EBCDIC)Bảng 1-2. Bảng mã ASCIIBảng 1-3. Bảng mã ASCII có cả ký tự trong phần mở rộng9101.5.3. Các phép toán số học trên hệ đếm nhị phânBảng 1-4. Phép cộng nhị phân Bảng 1-5. Phép trừ nhị phânPhép trừ nhị phân, chính là phép cộng nhị phân với số bù 2 của số trừ, trường hợp kếtquả dương.11Vào RaA B BIN D BOUT0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1Vào RaA B BIN D BOUT0 0 0 0 00 0 1 1 10 1 0 1 10 1 1 0 11 0 0 1 01 0 1 0 01 1 0 0 01 1 1 1 1CHƯƠNG 2KIẾN TRÚC VI ĐIỀU KHỂN 8051 2.1. CHUẨN 8051Hình 2-1.Kiến trúc vi điều khiển 8051AT89C51 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+ 128 Byte RAM nội.+ 4 Port xuất /nhập I/O 8 bit.+ 2 bộ Timer/counter 16 Bit.+ 6 nguồn ngắt.+ 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.+ Có các chế độ nghỉ (Low-power Idle) và chế độ nguồn giảm (Power-down).+ Ngoài ra, một số IC khác của họ MCS-51 có thêm bộ định thời thứ 3 và 256byte RAM nội.2.2. CHÂN VI ĐIỀU KHIỂN 805112Hình 2-2. Sơ đồ chân vi điều khiển AT89C51- Tín hiệu vào /EA trên chân 31 thường đặt lên mức cao ( +5V) hoặc mức thấp(GND). Nếu ở mức cao, 8951 thi hành chương trình từ ROM nội trong khoảng địachỉ thấp (4K hoặc tối đa 8k đối với 89C52). Nếu ở mức thấp, chương trình được thihành từ bộ nhớ mở rộng (tối đa đến 64Kbyte). Ngoài ra người ta còn dùng /EA làmchân cấp điện áp 12V khi lập trình EEPROM trong 8051.-Các chân nguồn:AT89C51 hoạt động ở nguồn đơn +5V. Vcc được nối vào chân 40, và Vss (GND)được nối vào chân 20.+ Chân 40: VCC = 5V± 20%+ Chân 20: GND- /PSEN (Program Store Enable):/PSEN (chân 29) cho phép đọc bộ nhớ chương trình mở rộng đối với các ứng dụngsử dụng ROM ngoài, thường được nối đến chân /OC (Output Control) của ROM để đọc cácbyte mã lệnh. /PSEN sẽ ở mức logic 0 trong thời gian AT89C51 lấy lệnh.Trong quá trìnhnày, / PSEN sẽ tích cực 2 lần trong 1 chu kỳ máy.Mã lệnh của chương trình được đọc từ ROM thông qua bus dữ liệu (Port0) và busđịa chỉ (Port0 + Port2).Khi 8051 thi hành chương trình trong ROM nội, PSEN sẽ ở mức logic 1.- ALE/ PROG (Address Latch Enable / Program): ALE/ PROG (chân 30) chophép tách các đường địa chỉ và dữ liệu tại Port 0 khi truy xuất bộ nhớ ngoài. ALEthường nối với chân Clock của IC chốt (74373, 74573). Các xung tín hiệu ALE có13tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng làm tín hiệuclock cho các phần khác của hệ thống. Xung này có thể cấm bằng cách set bit 0 củaSFR tại địa chỉ 8Eh lên 1. Khi đó, ALE chỉ có tác dụng khi dùng lệnh MOVX hayMOVC. Ngoài ra, chân này còn được dùng làm ngõ vào xung lập trình cho ROMnội ( /PROG ).- EA /VPP (External Access) :EA (chân 31) dùng để cho phép thực thi chương trình từ ROM ngoài. Khi nối chân31 với Vcc, AT89C51 sẽ thực thi chương trình từ ROM nội (tối đa 8KB), ngược lại thì thựcthi từ ROM ngoài (tối đa 64KB).Ngoài ra, chân /EA được lấy làm chân cấp nguồn 12V khi lập trình cho ROM.-RST (Reset):RST (chân 9) cho phép reset AT89C51 khi ngõ vào tín hiệu đưa lên mức 1 trong ítnhất là 2 chu kỳ máy.-X1, X2:Ngõ vào và ngõ ra bộ dao động, khi sử dụng có thể chỉ cần kết nối thêm thạch anhvà các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho AT89C51 là12Mhz.Hình 2-3 . Sơ đồ kết nối thạch anh 2.3. CỔNG VÀO/ RATất cả các vi điều khiển 8051 đều có 4 cổng vào/ra 8 bit có thể thiết lập như cổng vàohoặc ra. Như vậy có tất cả 32 chân I/O cho phép vi điều khiển có thể kết nối với các thiết bịngoại vi.14Hình 2-4. Cổng vào/raHình 2-4 mô tả sơ đồ đơn giản của mạch bên trong các chân vi điều khiển trừ cổngP0 là không có điện trở kéo lên (pull-up).Chân ra: Một mức logic 0 đặt vào bit của thanh ghi P làm cho transistor mở, nối chântương ứng với đất (Hình 2-5)Hình 2-5. Chân ra xuất mức 015Hình 2-6. Trở treo nội tại chânChân vào:Một bit 1 đặt vào một bit của thanh ghi cổng, transistor đóng và chân tương ứng đượcnối với nguồn Vcc qua trở kéo lên (Hình 2-7)Hình 2-7. Chân vào xuất mức 1Port 0 : có 2 chức năng ở các chân 32 – 39 của AT89C51:- Chức năng I/O (xuất/nhập): dùng cho các thiết kế nhỏ. Tuy nhiên, khi dùng chứcnăng này thì Port 0 phải dùng thêm các điện trở kéo lên (pull-up), giá trị của điện trở phụthuộc vào thành phần kết nối với Port.- Khi dùng làm ngõ vào, Port 0 phải được set mức logic 1 trước đó.- Chức năng địa chỉ / dữ liệu đa hợp: khi dùng các thiết kế lớn, đòi hỏi phải sử dụngbộ nhớ ngoài thì Port 0 vừa là bus dữ liệu (8 bit) vừa là bus địa chỉ (8 bit thấp).Ngoài ra khi lập trình cho AT89C51, Port 0 còn dùng để nhận mã khi lập trình vàxuất mã khi kiểm tra (quá trình kiểm tra đòi hỏi phải có điện trở kéo lên).Port 1:Port1 (chân 1 – 8) chỉ có một chức năng là I/O, không dùng cho mục đích khác (chỉtrong 8032/8052/8952 thì dùng thêm P1.0 và P1.1 cho bộ định thời thứ 3). Tại Port 1 đã cóđiện trở kéo lên nên không cần thêm điện trở ngoài.Port 1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8 bit địa chỉ thấp trong quátrình lập trình hay kiểm tra.Khi dùng làm ngõ vào, Port 1 phải được set mức logic 1 trước đó.Port 2: Port 2 (chân 21 – 28) là port có 2 chức năng:- Chức năng I/O (xuất / nhập)16- Chức năng địa chỉ: dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ 16bit. Khi đó, Port 2 không được dùng cho mục đích I/O.- Khi dùng làm ngõ vào, Port 2 phải được set mức logic 1 trước đó.Port 3: Port 3 (chân 10 – 17) là port có 2 chức năng:-Chức năng I/O. Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó.-Chức năng khác mô tả như sau: Bảng 2-1. Chức năng các chân của Port Bit Tên Chức năngP3.0 RxD Ngõ vào port nối tiếpP3.1 TxD Ngõ ra port nối tiếpP3.2INT0Ngắt ngoài 0P3.3INT1Ngắt ngoài 1P3.4 T0 Ngõ vào của bộ định thời 0P3.5 T1 Ngõ vào của bộ định thời 1P3.6 WR Tín hiệu điều khiển ghi dữ liệu lên bộ nhớ ngoài.P3.7RDTín hiệu điều khiển đọc từ bộ nhớ dữ liệu ngoài.2.4 . TỔ CHỨC BỘ NHỚHình 2-8. Các vùng nhớ trong AT89C51Bảng 2-2. Các thanh ghi chức năng đặc biệt17Bộ nhớ trongROM 4KB0000h – 0FFFhRAM 128 byte00h – 7FhSFR80h – 0FFhBộ nhớ ngoàiBộ nhớ chương trình 64 KB0000h – FFFFhĐiều khiển bằng PSENBộ nhớ dữ liệu 64 KB0000h – FFFFhĐiều khiển bằng RD và WRĐịachỉbyteCó thểđịnh địachỉ bitKhông định địa chỉ bitF8hF0hBE8hE0hACCD8hD0hPSWC8h(T2CON) (RCAP2L) (RCAP2H) (TL2) (TH2)C0hB8hIP SADENB0hP3A8hIE SADDRA0hP298hSCON SBUF BRL BDRCON90hP188hTCON TMOD TL0 TH0 TL1 TH1 AUXR CKCON80hP0 SP DPL DPH PCON2.4.1 Tổ chức bộ nhớ trong (Bảng 2-3)Các thanh ghi chức năng đặc biệt (SFR – Special Function Registers Bảng 2-2)Bảng 2-3. Địa chỉ RAM nội 805118Địa chỉ byteĐịa chỉ bitChức năng7FVùng RAM đa dụng302F 7F 7E 7D 7C 7B 7A 79 78Vùng có thể định địa chỉ bit2E 77 76 75 74 73 72 71 702D 6F 6E 6D 6C 6B 6A 69 682C 67 66 65 64 63 62 61 602B 5F 5E 5D 5C 5B 5A 59 582A 57 56 55 54 53 52 51 5029 4F 4E 4D 4C 4B 4A 49 4828 47 46 45 44 43 42 41 4027 3F 3E 3D 3C 3B 3A 39 3826 37 36 35 34 33 32 31 3025 2F 2E 2D 2C 2B 2A 29 2824 27 26 25 24 23 22 21 2023 1F 1E 1D 1C 1B 1A 19 1822 17 16 15 14 13 12 11 1021 0F 0E 0D 0C 0B 0A 09 0820 07 06 05 04 03 02 01 001F18Bank 3Các bank thanh ghi1710Bank 21F08Bank 10700Bank thanh ghi 0 ( mặc định cho R0-R7)Các thanh ghi có thể định địa chỉ bit sẽ có địa chỉ bit bắt đầu và địa chỉ byte trùngnhau. Ví dụ như: thanh ghi P0 có địa chỉ byte là 80h và có địa chỉ bit bắt đầu từ 80h (ứngvới P0.0) đến 87h (ứng với P0.7). Chức năng các thanh ghi này sẽ mô tả trong phần saua.RAM nội: Chia thành các vùng phân biệt: vùng RAM đa dụng (30h – 7Fh), vùng RAM có thểđịnh địa chỉ bit (20h – 2Fh) và các bank thanh ghi (00h – 1Fh).b. RAM đa dụng:RAM đa dụng có 80 byte từ địa chỉ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằngcách dùng chế độ địa chỉ trực tiếp hay gián tiếp.Các vùng địa chỉ thấp từ 00h – 2Fh cũng có thể sử dụng cho mục đich như trênngoài các chức năng đề cập như phần sau.c. RAM có thể định địa chỉ bit:Vùng địa chỉ từ 20h – 2Fh gồm 16 byte (= 128 bit) có thể thực hiện giống như vùngRAM đa dụng (mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử lý bit.Vùng RAM này có các địa chỉ bit bắt đầu tại giá trị 00h và kết thúc tại 7Fh.Như vậy, địa chỉ bắt đầu 20h (gồm 8 bit) có địa chỉ bit từ 00h – 07h; địa chỉ kết thúc2Fh có địa chỉ bit từ 78h – Fh.d. Các bank thanh ghi:Vùng địa chỉ từ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h- 07h,bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh. Các bank thanh ghi này19được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động hệ thống thì bank thanhghi được sử dụng là bank 0.Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truyxuất bởi các thanh ghi R0 đến R7. Việc thay đổi bank thanh ghi có thể thực hiện thông quathanh ghi từ trạng thái chương trình (PSW). Các bank thanh ghi này cũng có thể truy xuấtbình thường như vùng RAM đa dụng đã nói ở trên.2.4.2. Tổ chức bộ nhớ ngoàiMCS-51 có bộ nhớ theo cấu trúc Harvard: phân biệt bộ nhớ chương trình và dữ liệu.Chương trình và dữ liệu có thể chứa bên trong nhưng vẫn có thể kết nối với 64KB chươngtrình và 64KB dữ liệu. Bộ nhớ chương trình được truy xuất thông qua chân PSEN còn bộnhớ dữ liệu được truy xuất thông qua chân WR hay RD .PCH: Program Counter High – PCL: Program Counter LowDPH: Data Pointer High – DPL: Data Pointer LowHình 2-9. Thực thi bộ nhớ chương trình ngoàia. Bộ nhớ chương trình ngoài:20Quá trình thực thi lệnh khi dùng bộ nhớ chương trình ngoài có thể mô tả như Hình 2-9. Thực thi bộ nhớ chương trình ngoài”. Trong quá trình này, Port 0 và Port 2 không còn làcác Port xuất nhập mà chứa địa chỉ và dữ liệu. Sơ đồ kết nối với bộ nhớ chương trình ngoàimô tả như Hình 2-8. Các vùng nhớ trong AT89C51”.Bộ nhớ dữ liệu ngoài:Bộ nhớ dữ liệu ngoài được truy xuất bằng lệnh MOVX thông qua các thanh ghi xácđịnh địa chỉ DPTR (16 bit) hay R0, R1 (8 bit).Quá trình thực hiện đọc hay ghi dữ liệu được cho phép bằng tín hiệu RD hay WR(chân P3.7 và P3.6).b. Bộ nhớ chương trình và dữ liệu dùng chung:Trong các ứng dụng phát triển phần mềm xây dựng dựa trên AT89C51, ROM sẽđược lập trình nhiều lần nên dễ làm hư hỏng ROM. Một giải pháp đặt ra là sử dụng RAM đểchứa các chương trình tạm thời. Khi đó, RAM vừa là bộ nhớ chương trình vừa là bộ nhớ dữliệu. Yêu cầu này có thể thực hiện bằng cách kết hợp chân RD và chân PSEN thông quacổng AND. Khi thực hiện đọc mà lệnh, chân /PSEN tích cực cho phép đọc từ RAM và khiđọc dữ liệu, chân RD sẽ tích cực.c. Giải mã địa chỉTrong các ứng dụng dựa trên AT89C51, ngoài giao tiếp bộ nhớ dữ liệu, vi điều khiểncòn thực hiện giao tiếp với các thiết bị khác như bàn phím, led, động cơ, … Các thiết bị nàycó thể giao tiếp trực tiếp thông qua các Port. Tuy nhiên, khi số lượng các thiết bị lớn, cácPort sẽ không đủ để thực hiện điều khiển. Giải pháp đưa ra là xem các thiết bị này giốngnhư bộ nhớ dữ liệu. Khi đó, cần phải thực hiện quá trình giải mã địa chỉ để phân biệt cácthiết bị ngoại vi khác nhau. Quá trình giải mã địa chỉ thường được thực hiện thông qua cácIC giải mã như 74139 (2 → 4), 74138 ( 3 → 8), 74154 (4 → 16). Ngõ ra của các IC giải mãsẽ được đưa tới chân chọn chip của RAM hay bộ đệm khi điều khiển ngoại vi. 2.5. CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT (SFRs - Special FunctionRegisters)2.5.1. Thanh ghi tích luỹ (Accumulator)Thanh ghi tích luỹ là thanh ghi sử dụng nhiều nhất trong AT89C51, được ký hiệutrong câu lệnh là A. Ngoài ra, trong các lệnh xử lý bit, thanh ghi tích luỹ được ký hiệu làACC.Ví dụ:có cùng kết quả. Hay:cũng tương tự.Thanh ghi B2.5.2. Thanh ghi từ trạng thái chương trình (PSW - Program Status Word)Thanh ghi từ trạng thái chương trình PSW nằm tại địa chỉ D0h và có các địa chỉ bittừ D0h – D7h, bao gồm 7 bit (1 bit không sử dụng) có các chức năng như sau:21MOV A,#1MOV 0E0h,#1SETB ACC.4SETB 0E4hHình 2-10. Thanh ghi PSW- CY (Carry): cờ nhớ, thường được dùng cho các lệnh toán học không dấu (C = 1 khicó nhớ trong phép cộng hay mượn trong phép trừ)- AC (Auxiliary Carry): cờ nhớ phụ (thường dùng cho các phép toán BCD).- F0 (Flag 0): được sử dụng tuỳ theo yêu cầu của người sử dụng.- RS1, RS0: dùng để chọn bank thanh ghi sử dụng. Khi reset hệ thống, bank 0 sẽ đượcsử dụng.Hình 2-11. Chọn bank thanh ghi- OV (Overflow): cờ tràn. Cờ OV = 1 khi có hiện tượng tràn số học xảy ra (dùng chosố nguyên có dấu).- F1 (Flag 1): được sử dụng tuỳ theo yêu cầu của người sử dụng.- P (Parity): kiểm tra parity (lẻ). Cờ P = 1 khi tổng số bit 1 trong thanh ghi- A là số lẻ (nghĩa là tổng số bit 1 của thanh ghi A cộng thêm cờ P là số chẵn). Ví dụnhư: A = 10101010b có tổng cộng 4 bit 1 nên P = 0. Cờ P thường được dùng đểkiểm tra lỗi truyền dữ liệu.2.5.3.Thanh ghi con trỏ stack (SP – Stack Pointer)Con trỏ stack SP nằm tại địa chỉ 81h và không cho phép định địa chỉ bit. SP dùng đểchỉ đến đỉnh của stack. Stack là một dạng bộ nhớ lưu trữ dạng LIFO (Last In First Out)thường dùng lưu trữ địa chỉ trả về khi gọi một chương trình con. Ngoài ra, stack còn dùngnhư bộ nhớ tạm để lưu lại và khôi phục các giá trị cần thiết.Đối với AT89C51, stack được chứa trong RAM nội (128 byte đối với 8031/8051 hay256 byte đối với 8032/8052). Mặc định khi khởi động, giá trị của SP là 07h, nghĩa là stackbắt đầu từ địa chỉ 08h (do hoạt động lưu giá trị vào stack yêu cầu phải tăng nội dung thanhghi SP trước khi lưu). Như vậy, nếu không gán giá trị cho thanh ghi SP thì không được sửdụng các bank thanh ghi 1, 2, 3 vì có thể làm sai dữ liệu. Đối với các ứng dụng thôngthường không cần dùng nhiều đến stack, có thể không cần khởi động SP mà dùng giá trịmặc định là 07h. Tuy nhiên, nếu cần ta có thể xác định lại vùng stack cho MCS-51.Con trỏ dữ liệu DPTR (Data Pointer)Con trỏ dữ liệu DPTR là thanh ghi 16 bit bao gồm 2 thanh ghi 8 bit: DPH (High)nằm tại địa chỉ 83h và DPL (Low) nằm tại địa chỉ 82h. Các thanh ghi này không cho phépđịnh địa chỉ bit. DPTR được dùng khi truy xuất đến bộ nhớ có địa chỉ 16 bit.22 2.5.4. Các thanh ghi portCác thanh ghi P0 tại địa chỉ 80h, P1 tại địa chỉ 90h, P2, tại địa chỉ A0h, P3 tại địa chỉB0h là các thanh ghi chốt cho 4 port xuất / nhập (Port 0, 1, 2, 3). Ví dụ: Hai lệnh sau là tương đương:Thanh ghi port nối tiếp (SBUF - Serial Data Buffer)Thanh ghi port nối tiếp tại địa chỉ 99h thực chất bao gồm 2 thanh ghi: thanh ghi nhậnvà thanh ghi truyền. 2.5.5. Các thanh ghi định thời (Timer Register)Các cặp thanh ghi (TH0, TL0), (TH1, TL1) và (TH2, TL2) là các thanh ghi dùng chocác bộ định thời 0, 1 và 2 trong đó bộ định thời 2 chỉ có trong 8032/80522.5.6. Các thanh ghi điều khiển: Bao gồm các thanh ghi IP (Interrupt Priority), IE (Interrupt Enable), TMOD (TimerMode), TCON (Timer Control), T2CON (Timer 2 Control), SCON (Serial port control) vàPCON (Power control).+ Thanh ghi IP tại địa chỉ B8h cho phép chọn mức ưu tiên ngắt khi có 2 ngắt xảy rađồng thời. IP cho phép định địa chỉ bit từ B8h – BFh.+ Thanh ghi IE tại địa chỉ A8h cho phép hay cấm các ngắt. IE có địa chỉ bit từ A8h –AFh.+ Thanh ghi TMOD tại địa chỉ 89h dùng để chọn chế độ hoạt động cho các bộ địnhthời (0, 1) và không cho phép định địa chỉ bit.+ Thanh ghi TCON tại địa chỉ 88h điều khiển hoạt động của bộ định thời và ngắt.TCON có địa chỉ bit từ 88h – 8Fh.+ Thanh ghi T2CON tại địa chỉ C8h điều khiển hoạt động của bộ định thời 2.T2CON có địa chỉ bit từ C8h – CFh.+ Thanh ghi SCON tại địa chỉ 98h điều khiển hoạt động của port nối tiếp. SCON cóđịa chỉ bit từ 98h – 9Fh.2.5.7. Thanh ghi điều khiển nguồn PCONThanh ghi PCON tại địa chỉ 87h không cho phép định địa chỉ bit bao gồm các bitnhư sau:Hình 2-12. Thanh ghi PCON+ SMOD1 (Serial Mode 1): = 1 cho phép tăng gấp đôi tốc độ port nối tiếp trong chếđộ 1, 2 và 3.+ SMOD0 (Serial Mode 0 = 0): cho phép chọn bit SM0 hay FE trong thanh ghiSCON (Serial Mode 0 = 1 chọn bit FE).+ POF (Power - off Flag): dùng để nhận dạng loại reset. POF = 1 khi mở nguồn. Dođó, để xác định loại reset, cần phải xoá bit POF trước đó.+ GF1, GF0 (General purpose Flag): các bit cờ dành cho người sử dụng.23SETB P0.0SETB 80h+ PD (Power Down): được xoá bằng phần cứng khi hoạt động reset xảy ra.Khi bit PD = 1 thì vi điều khiển sẽ chuyển sang chế độ nguồn giảm. Trong chế độnày:- Chỉ có thể thoát khỏi chế độ nguồn giảm bằng cách reset.- Nội dung RAM và mức logic trên các port được duy trì.- Mạch dao động bên trong và các chức năng khác ngừng hoạt động.- Chân ALE và PSEN ớ mức thấp.- Yêu cầu Vcc phải có điện áp ít nhất là 2V và phục hồi Vcc = 5V ít nhất 10 chu kỳtrước khi chân RESET xuống mức thấp lần nữa.- IDL (Idle): được xoá bằng phần cứng khi hoạt động reset hay có ngắt xảy ra. Khibit IDL = 1 thì vi điều khiển sẽ chuyển sang chế độ nghỉ. Trong chế độ này:+ Chỉ có thể thoát khỏi chế độ nguồn giảm bằng cách reset hay có ngắt xảy ra.+ Trạng thái hiện hành của vi điều khiển được duy trì và nội dung các thanh ghikhông đổi.- Mạch dao động bên trong không gửi được tín hiệu đến CPU.- Chân ALE và PSEN ở mức cao.Lưu ý rằng các bit điều khiển PD và IDL có tác dụng chính trong tất cả các IC họMSC-51 nhưng chỉ có thể thực hiện được trong các phiên bản CMOS.24CHƯƠNG 3LẬP TRÌNH HỢP NGỮ CHO 80513.1. CÁC CHẾ ĐỘ ĐỊA CHỈCó 5 chế độ địa chỉ:1. Tức thời 2. Theo thanh ghi 3. Trực tiếp4. Gián tiếp 5. Theo chỉ số3.1.1. Địa chỉ tức thờiTrong chế độ đánh địa chỉ này toán hạng nguồn là một hằng số. Và như tên gọi củanó thì khi một lệnh được hợp dịch toán hạng đi tức thi ngay sau mã lệnh. Ví dụ:MOV DPTR, #MYDATAMOV A, # 25H ; Nạp giá trị 25H vào thanh ghi AMOV R4, #62 ; Nạp giá trị 62 thập phân vào R4MOV B, #40H ; Nạp giá trị 40 H vào thanh ghi BMOV DPTR, #4521H ; Nạp 4512H vào con trỏ dữ liệu DPTR3.1.2. Địa chỉ thanh ghiChế độ đánh địa chỉ theo thanh ghi liên quan đến việc sử dụng các thanh ghi để lưudữ liệu cần được thao tác và các các toán hạng là 1 trong các thanh ghi Ri củacác bank được chọn. Ví dụ :MOV R2, A ; Sao chép nội dung thanh ghi A vào thanh ghi R2ADD A, R5 ; Cộng nội dung thanh ghi R5 vào thanh ghi ATa có thể chuyển dữ liệu giữa thanh ghi tích luỹ A và thanh ghi Rn (n từ 0 đến 7)nhưng việc chuyển dữ liệu giữa các thanh ghi Rn thì không được phép. Ví dụ: MOV R4, R7 là không hợp lệ.Lưu ý rằng các thanh ghi nguồn và đích phải phù hợp về kích thước. Hay nói cách khác, nếu viết “ MOV DPTR, A” sẽ cho một lỗi vì nguồn là thanh ghi 8 bit và đích lại là thanh ghi 16 bit.3.1.3. Địa chỉ trực tiếp1. Các ngăn nhớ từ 00 đến 1FH được gán cho các băng thanh ghi và ngăn xếp.2. Các ngăn nhớ từ 20H đến 2FH được dành cho không gian đánh địa chỉ theo bit đểlưu các dữ liệu 1 bit.3. Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1byte.Mặc dù toàn bộ byte của bộ nhớ RAM có thể được truy cập bằng chế độ đánh địa chỉtrực tiếp, nhưng chế độ này thường được sử dụng nhất để truy cập các ngăn nhớ RAM từ30H đến 7FH. Đây là do một thực tế là các ngăn nhớ dành cho băng ghi được truy cập bằngthanh ghi theo các tên gọi của chúng là R0 - R7 còn các ngăn nhớ khác của RAM thì khôngcó tên như vậy. Trong chế độ đánh địa chỉ trực tiếp thì dữ liệu ở trong một ngăn nhớ RAMmà địa chỉ của nó được biết và địa chỉ này được cho như là một phần của lệnh. Khác vớichế độ đánh địa chỉ tức thì mà toán hạng tự nó được cấp với lệnh. Dấu (# 0 là sự phân biệt25