Bài giảng Vi điều khiển - Lê Hoàng Anh

pdf 42 trang hapham 330
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi điều khiển - Lê Hoàng Anh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_vi_dieu_khien_le_hoang_anh.pdf

Nội dung text: Bài giảng Vi điều khiển - Lê Hoàng Anh

  1. Bài giảng: Vi Điều Khiển Biên soạn: Ths Lê Hoàng Anh
  2. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh CHƯƠNG I : GIỚI THIỆU I. Lịch sử xuất hiện bộ vi điều khiển 8051: Năm 1980 tập đoàn Intel giới thiệu chip 8051 bộ vi điều khiển đầu tiên của họ vi điều khiển MSC-51. Chip 8051 chứa trên 60000 transistor bao gồm 4K byte ROM , 128 byte RAM , 32 đường xuất nhập , 1 port nối tiếp và 2 bộ định thời 16 bit . 8051 là bộ vi điều khiển 8 bit tức là CPU chỉ có thể làm việc với 8 bit dữ liệu . Dữ liệu lớn hơn 8 bit được chia thành các dữ liệu 8 bit để xử lý. 8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác ( Siemens , Atmel , Philips ) sản xuất và bán bất kỳ dạng biến thể nào của 8051 mà họ muốn với điều kiện họ phải để mã chương trình tương thích với 8051 . Từ đó dẫn đến sự ra đời của nhiều phiên bản của 8051 với các tốc độ và dung lượng ROM trên chip khác nhau . Tuy nhiên , điều quan trọng là mặc dù có nhiều biến thể của 8051 , như khác nhau về tốc độ , dung lượng ROM nhưng tất cả các lệnh đều tương thích với 8051 ban đầu . Điều này có nghĩa là nếu chương trình được viết cho một phiên bản 8051 nào đó thì cũng sẽ chạy được với mọi phiên bản khác không phụ thuộc vào hãng sản xuất . II. Sơ đồ khối một hệ máy tính và các khái niệm cơ bản : Address bus ( 16 ) Data bus ( 8) Control bus ( 6 ) CPU Interface circuitry RAM ROM Peripheral devices 1. Bộ nhớ bán dẫn RAM và ROM : Trang 1
  3. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Các bộ nhớ được truy xuất trực tiếp bởi CPU bao gồm các IC ( integrated circuit ) bán dẫn gọi là ROM và RAM , có hai đặc trưng dùng để phân biệt ROM và RAM : RAM ( Random access memory ) : bộ nhớ có thể đọc / ghi , không tiếp tục lưu trữ nội dung khi mất nguồn cấp điện . ROM ( Read only memory ) : bộ nhớ chỉ đọc ,vẫn tiếp tục lưu trữ nội dung khi mất nguồn cấp điện . 2. Bus : Bus dữ liệu, Bus địa chỉ, Bus điều khiển Bus là một tập các dây mang thông tin có cùng một mục đích . Việc truy xuất tới một mạch xung quanh CPU sử dụng ba loại bus : bus địa chỉ ( Address bus ) , bus dữ liệu ( Data bus ) và bus điều khiển ( Control bus ) . Với mỗi thao tác đọc hoặc ghi , CPU xác định rõ vị trí của dữ liệu ( hoặc lệnh ) bằng cách đặt một địa chỉ lên bus địa chỉ ,sau đó tích cực một tín hiệu trên bus điều khiển để chi ra thao tác đó là đọc hay ghi . Bus dữ liệu mang thông tin giữ CPU và bộ nhớ cũng như giữa CPU và các thiết bị xuất nhập . Bus dữ liệu là bus hai chiều. Bus địa chỉ mang thông tin địa chỉ , luôn được cấp bởi CPU và là bus một chiều. Bus điều khiển là một tập hợp các tín hiệu , mỗi tín hiệu mang một vai trò riêng trong việc điều khiển có trật tự hoạt động của hệ thống . Các tín hiệu điều khiển là các tín hiệu định thời được cung cấp bởi CPU để đồng bộ hoá việc di chuyển thông tin trên các bus dữ liệu và địa chỉ . Thông thường có ba tín hiệu như CLOCK , READ và WRITE đối với việc di chuyển dữ liệu cơ bản giữa CPU và bộ nhớ . 3. Đơn vị xử lý trung tâm ( CPU ): Trang 2
  4. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh CPU Instruction Program register counter Instruction Registers decode and control unit Arithmetic and logic unit Đơn vị xử lý trung tâm CPU Instruction register ( IR ) : thanh ghi lệnh IR Instruction decode and control unit : đơn vị giải mã lệnh và điều khiển Program counter ( PC ) : bộ đếm chương trình Registers : các thanh ghi Arithmetic and logic unit : đơn vị số học logic CPU quản lý tất cả các hoạt động và thực hiện các thao tác trên dữ liệu . Hầu hết các CPU chỉ bao gồm một tập các mạch logic thực hiện liên tục hai thao tác : tìm nạp lệnh và thực thi lệnh . CPU có khả năng hiểu và thực thi các lệnh dựa trên một tập các mã nhị phân , mỗi một mã nhị phân biểu thi một thao tác cơ bản . Các lệnh này thường là các lệnh số học ( như cộng , trừ , nhân , chia ), các lệnh logic ( như AND,OR,NOT, ) các lệnh di chuyển dữ liệu , các lệnh rẽ nhánh được biểu thị bởi một tập các mã nhị phân và được gọi là tập lệnh ( instruction set ). Bên trong CPU bao gồm một tập các thanh ghi ( Registers ) có nhiệm vụ lưu trữ tạm thời các thông tin , một đơn vị số học logic ALU (Arithmetic logic unit ) có nhiệm vụ thực hiện các thao tác trên các thông tin này , một đơn vị giải mã lệnh và điều khiển ( instruction decode and control unit ) có nhiệm vụ xác định thao tác cần thực hiện và thiết lập các hoạt động cần thiết để thực hiện thao tác. Thanh ghi IR ( instruction register ) lưu trữ mã nhị phân của lệnh . Bộ đếm chương trình PC ( Program counter ) lưu trữ địa chỉ của lệnh kế tiếp trong bộ nhớ cần được thực thi. Trang 3
  5. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Thao tác tìm nạp lệnh của CPU được thực hiện theo các bước sau : _ Nội dung của PC được đặt lên bus địa chỉ _ Tín hiệu điều khiển READ được xác lập ( chuyển sang trạng thái tích cực ) _ Dữ liệu ( hoặc mã lệnh ) được đọc từ RAM và đưa lên bus dữ liệu _ Mã lệnh ( opcode ) được chốt vào thanh ghi lệnh bên trong CPU _ PC được tăng lên để chuẩn bị tìm nạp lệnh kế từ bộ nhớ Giai đoạn thực thi lệnh bao gồm việc giải mã lệnh và tạo ra các tín hiệu điều khiển , các tín hiệu này điều khiển việc xuất nhập giữa các thanh ghi nội với ALU và thông báo để ALU thực hiện thao tác đã được xác định . Hình minh họa luồng thông tin cho việc tìm nạp lệnh CPU Addressbus N PC Data bus Opcode IR RAM Control bus N+2 Clock N+1 Opcode N Read N-1 III. Sự khác nhau giữa bộ vi xử lý và bộ vi điều khiển : Trang 4
  6. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 1. Cấu trúc phần cứng : Bộ vi xử lý Bộ vi điều khiển Là một CPU đơn chip Là một vi mạch đơn chứa bên trong một CPU,ROM,RAM,bộ định thời,mạch giao tiếp để tạo nên một hệ máy tính đầy đủ. 2. Ứng dụng : Bộ vi xử lý Bộ vi điều khiển Làm các CPU trong các hệ máy Thích hợp cho các thiết kế nhỏ với tính,thích hợp với các ứng dụng xử các thành phần thêm vào tối thiểu lý thông tin. nhằm thực hiện các hoạt động hướng điều khiển . 3. Đặc trưng của tập lệnh : Bộ vi xử lý Bộ vi điều khiển Các lệnh của bộ vi xử lý hoạt động Tập lệnh chủ yếu cung cấp các điều trên các lượng dữ liệu lớn ½ byte , 1 khiển xuất nhập chỉ sử dụng 1 bit. byte , 2 byte , 4 byte . Trang 5
  7. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh CHƯƠNG II : CẤU TRÚC PHẦN CỨNG 1. Sơ đồ khối chip 8051: /INT0 /INT1 Timer 2 T2EX Timer 1 Timer 0 Timer 2 T2 128 bytes RAM Serial port ROM 4K 8051 Timer 1 T1 8K 8052 Interrupt control Orther registers 128 bytes RAM Timer 0 T0 CPU Oscillator Bus control I/O port Serial port /EA ALE RST /PSEN TXD RXD P0 P2 P1 P3 Chip 8051 có các đặc trưng như sau : 4KB ROM 128 byte RAM 4 port xuất nhập (I/O port) 8 bit 2 bộ định thời 16 bit Mạch giao tiếp nối tiếp Không gian nhớ chương trình ngoài 64K Không gian nhớ dữ liệu ngoài 64K Bộ xử lý bit 210 vị trí nhớ được định địa chỉ ,mỗi vị trí 1 bit Nhân/chia trong 4µs Trang 6
  8. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 2. Sơ đồ và chức năng các chân của chip 8051: VCC 40 19 VCC 32 XTAL1 P0.7/AD7 33 P0.6/AD6 34 33p P0.5/AD5 35 P0.4/AD4 12M 36 P0.3/AD3 37 18 P0.2/AD2 38 XTAL2 P0.1/AD1 39 P0.0/AD0 33p 8 P1.7 7 30 P1.6 6 ALE P1.5 5 P1.4 4 29 P1.3 3 PSEN P1.2 2 P1.1 1 31 P1.0 EA 8051 9 RST 17 21 16 P3.7/RD P2.0/A8 22 15 P3.6/WR P2.1/A9 23 14 P3.5/T1 P2.2/A10 24 13 P3.4/T0 P2.3/A11 25 12 P3.3/INT1 P2.4/A12 26 11 P3.2/INT0 P2.5/A13 27 10 P3.1/TXD P2.6/A14 28 P3.0/RXD P2.7/A15 GND 20 Thuật ngữ “8051” được dung để chỉ rộng rãi các chip của họ MSC-51 .Vi mạch tổng quát của họ MSC-51 là chip 8051 ,linh kiện đầu tiên của họ này được hãng Intel đưa ra thị trường . Hiện hay nhiều nhà sản xuất IC như Seimens , Advance Micro Devices ( AMD ) , Fujitsu , Philips , Atmel được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51. Ở Việt Nam các chip và các biến thể họ MSC-51 của hãng Atmel và Philips được sử dụng rộng rãi như : AT89C2051,AT89C4051,AT89C51,AT8C52,AT89S52,AT89S8252,AT89S 8253,P89C51RDxx,P89V51RDxx Chip 8051 có 32 chân xuất / nhập ,tuy nhiên có 24 chân trong 32 chân này có 2 mục đích .Mỗi một chân này có thể hoạt động ở chế độ xuất/nhập , hoạt động điều khiển hoặc hoạtđộng như một đường địa chỉ / dữ liệu của bus địa chỉ / dữ liệu đa hợp. 2.1 PORT 0: Port 0 ( các chân từ 32 - 39 ) được ký hiệu là P0.0 – P0.7 có hai công dụng. Trong các thiết kế có tối thiểu thành phần , port 0 được sử dụng làm nhiệm vụ xuất nhập , với các thiết kế lớn hơn có bộ nhớ ngoài , port 0 trở thành bus địa chỉ và bus dữ liệu đa hợp ( byte địa chỉ thấp ) Trang 7
  9. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 2.2 PORT 1: Port 1 (các chân từ 1 - 8 ) chỉ có một công dụng là xuất / nhập được ký hiệu là P1.0 – P1.7 và dùng để giao tiếp với thiết bị bên ngoài. Với chip 8052 ta có thể sử dụng P1.0 và P1.1 hoặc làm các đường xuất /nhập hoặc làm các ngõ vào cho mạch định thời thứ ba. 2.3 PORT 2: Port 2 ( các chân từ 21-28 ) được ký hiệu là P2.0 – P2.7 có hai công dụng ,hoặc làm nhiệmvụ xuất/nhập hoặc là byte địa chỉ cao của bus địa chỉ 16 bit cho các thiết kế có bộ nhớ chương trình ngoài hoặc các thiết kế có nhiều hơn 256 byte bộ nhớ dữ liệu . 2.4 PORT 3: Port 3 ( các chân từ 10 - 17 ) được ký hiệu là P3.0 – P3.7 có hai công dụng. Khi không hoạt động xuất/nhập , các chân của port 3 có nhiều chức năng riêng . Chức năng các chân của Port 3 và Port 1 Bit Tên chân Địa chỉ bit Chức năng P3.0 RxD B0H Chân nhận dữ liệu của port nối tiếp P3.1 TxD B1H Chân phát dữ liệu của port nối tiếp P3.2 /INT0 B2H Ngõ vào ngắt ngoài 0 P3.3 /INT1 B3H Ngõ vào ngắt ngoài 1 P3.4 T0 B4H Ngõ vào bộ định thời hoặc bộ đếm 0 P3.5 T1 B5H Ngõ vào bộ định thời hoặc bộ đếm 1 P3.6 /WR B6H Điều khiển ghi bộ nhớ dữ liệu ngoài P3.7 /RD B7H Điều khiển đọc bộ nhớ dữ liệu ngoài P1.0 T2 90H Ngõ vào bộ đinh thời hoặc bộ đếm 2 P1.1 T2EX 91H Nạp lại hoặc thu nhận của bộ định thời 2 2.5 /PSEN : Chân cho phép bộ nhớ chương trình /PSEN ( Program store enable ) là tín hiệu xuất trên chân 29. Đây là tín hiệu điều khiển cho phép ta truy xuất bộ nhớ chương trình ngoài .Chân này thường nối với chân cho phép xuất /OE ( Output enable ) của EPROM hoặc ROM để cho phép đọc các byte lệnh.Tín hiệu /PSEN ở mức logic 0 trong suốt thời gian tìm nạp lệnh .Các mã nhị phân của chương trình hay Opcode được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh IR của 8051 để được giải mã.Khi thực thi một chương trình chứa ở ROM nội ,chân /PSEN được duy trỳ ở mức logic không tích cực ( logic 1 ). Trang 8
  10. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 2.6 ALE : Ngõ xuất tín hiệu cho phép chốt địa chỉ ALE ( address latch enable ) dùng để giải đa hợp ( demultiplexing ) bus dữ liệu và bus địa chỉ .Khi port 0 được sử dụng làm bus địa chỉ/dữ liệu đa hợp,chân ALE xuất tín hiệu để chốt địa chỉ ( byte thấp của địa chỉ 16 bit ) vào một thanh ghi ngoài trong suốt ½ đầu của chu kỳ bộ nhớ ( memory cycle ).Sau khi điều này đã được thực hiện, các chân của port 0 sẽ xuất/nhập dữ liệu hợp hệ trong suốt ½ thứ hai của chu kỳ bộ nhớ.Tín hiệu ALE có tần số bằng 1/6 tần số của mạch dao động bên trong chip vi điều khiển . 2.7 /EA : Ngõ vào /EA có thể được nối với 5V ( logic 1 ) hoặc với GND ( logic 0 ).Nếu chân này nối lên 5V chip 8051 thực thi chương trình trong ROM nội. Nếu chân này được nối với GND ( và chân /PSEN cũng ở logic 0 ) thì chương trình cần được thực thi chứa ở bộ nhớ ngoài. 2.8 RESET ( RST ) : Ngõ vào RST là ngõ vào xóa chính ( master reset ) của 8051 dùng để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tắt là reset hệ thống .Khi ngõ vào này được treo ở mức logic 1 tối thiểu 2 chu kỳ máy, các thanh ghi bên trong của 8051 được nạp lại các giá trị thích hợp cho việc khởi động lại hệ thống . 2.9 XTAL1 , XTAL2 : Mạch dao động trên chip được ghép nối với mạch thạch anh bên ngoài ở hai chân XTAL1 và XTAL2 , các tụ ổn định cũng đựoc yêu cầu kết nối, giá tri tụ do nhà sản xuất quy định ( 30p – 40p ). 3. Tổ chức bộ nhớ: Các chip vi điều được dùng làm thành phần trung tâm trong các thiết kế hướng điều khiển ,trong đó bộ nhớ có dung lượng giới hạn , không có ổ đĩa và hệ điều hành . Chương trình điều khiển phải thường trú trong ROM nên 8051 có không gian bộ nhớ riêng cho chương trình và dữ liệu , cả hai bộ nhớ chương trình và dữ liệu đều đặt trong chip , tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng cách sử dụng các chip nhớ bên ngoài với dung lượng tối đa là 64K . Bộ nhớ nội trong chip bao gồm ROM và RAM . RAM trên chip bao gồm vùng RAM đa chức năng ( general purpose RAM : 30H-7FH ) , vùng RAM với từng bit được định địa chỉ ( bit address locations gọi tắt là vùng Trang 9
  11. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh RAM định địa chỉ bit : 20H-2FH ) , các dãy thanh ghi ( bank : 00H-1FH) và các thanh ghi chức năng đặc biệt SFR (spectial function register : 80H-FFH ) Byte address Bit address 7FH 80 byte General purpose RAM 30H 2FH 7F 7E 7D 7C 7B 7A 79 78 2EH 77 76 75 74 73 72 71 70 2DH 6F 6E 6D 6C 6B 6A 69 68 2CH 67 66 65 64 63 62 61 60 2BH 5F 5E 5D 5C 5B 5A 59 58 2AH 57 56 55 54 53 52 51 50 29H 4F 4E 4D 4C 4B 4A 49 48 Bit addressable 28H 47 46 45 44 43 42 41 40 locations 27H 3F 3E 3D 3C 3B 3A 39 38 26H 37 36 35 34 33 32 31 30 25H 2F 2E 2D 2C 2B 2A 29 28 24H 27 26 25 24 23 22 21 20 23H 1F 1E 1D 1C 1B 1A 19 18 22H 17 16 15 14 13 12 11 10 21H 0F 0E 0D 0C 0B 0A 09 08 20H 07 06 05 04 03 02 01 00 1F BANK 3 18 17 BANK 2 10 0F BANK 1 08 07 Default register bank for R0-R7 00 BANK 0 RAM Trang 10
  12. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Byte address Bit address FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW B8 - - - BC BB BA B9 B8 IP B0 B7 B6 B5 B4 B3 B2 B1 B0 P3 A8 AF - - AC AB AA A9 A8 IE A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 99 Not bit addressable SBUF 98 9F 9E 9D 9C 9B 9A 99 98 SCON 90 97 96 95 94 93 92 91 90 P1 8D Not bit addressable TH1 8C Not bit addressable TH0 8B Not bit addressable TL1 8A Not bit addressable TL0 89 Not bit addressable TMOD 88 8F 8E 8D 8C 8B 8A 89 88 TCON 87 Not bit addressable PCON 83 Not bit addressable DPH 82 Not bit addressable DPL 81 Not bit addressable SP 80 87 86 85 84 83 82 81 80 P0 SPECIAL FUNCTION REGISTERS Trang 11
  13. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Vùng RAM đa mục đích : Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H – 7FH . Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp . Ex: MOV A,5FH MOV R0,5FH MOV A,@R0 Vùng RAM định địa chỉ bit : 8051 có 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong các byte ở địa chỉ từ 20H - 2FH và phần còn lại chứa trong các thanh ghi chức năng đặc biệt . Các dãy thanh ghi : 32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi . Các lệnh của 8051 hỗ trợ 8 thanh ghi từ R0 – R7 thuộc dãy 0 ( bank 0 ) . Đây là dãy mặc định sau khi reset hệ thống . Các thanh ghi này ở các địa chỉ từ 00H – 07H . Ex : MOV A,R5 = MOV A,05H Các lệnh sử dụng các thanh ghi từ R0 – R7 là các lệnh ngắn và thực hiện nhanh hơn so với các lệnh tương đương sử dụng kiểu định địa chỉ trực tiếp. Các giá trị thường được sử dụng nên chứa ở một trong các thanh ghi này . Dãy thanh ghi đang được sử dụng được gọi là dãy thanh ghi tích cực . Dãy thanh ghi tích cực có thể được thay đổi bằng cách thay đổi các bit chọn dãy trong thanh ghi PSW . 4. Các thanh ghi chức năng đặc biệt (SFR): Các thanh ghi nội của 8051 được cấu hình thành một phần của RAM trên chip , do vậy mỗi thanh ghi cũng có một địa chỉ . Cũng như các thanh ghi từ R0 – R7 ta 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 – FFH . Lưu ý không phải tất cả 128 địa chỉ từ 80H – FFH đều được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa . Trang 12
  14. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 4.1 Từ trạng thái chương trình PSW ( program status word ) : Thanh ghi PSW có địa chỉ là D0H chứa các bit trang thái có chức năng được tóm tắt trong bảng sau: Bit Ký hiệu Địa chỉ Mô tả bit PSW.7 CY D7H Cờ nhớ PSW.6 AC D6H Cờ nhớ phụ PSW.5 F0 D5H Cờ 0 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ỉ từ 00H – 07H 01 = bank 1 địa chỉ từ 08H – 0FH 10 = bank 2 địa chỉ từ 10H – 17H 11 = bank 3 địa chỉ từ 18H – 1FH PSW.2 OV D2H Cờ tràn PSW.1 - D1H Dự trữ PSW.0 P D0H Cờ kiểm tra chẵn lẻ 4.2 Thanh ghi 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 (MUL) , chia (DIV) .Các bit của thanh ghi B được định địa chỉ từ F0H-F7H. 4.3 Con trỏ Stack : Con trỏ Stack SP ( stack pointer ) là một 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 Stack bao gồm lệnh cất dữ liệu vào Stack ( PUSH ) và lệnh lấy dữ liệu ra khỏi Stack ( POP ). Việc cất dữ liệu vào Satck làm tăng thanh ghi SP trước khi ghi dữ liệu và việc lấy dữ liệu ra Stack sẽ làm giảm thanh ghi SP. Nếu ta không khởi động SP , nội dung mặc định của thanh ghi này là 07H .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 ) . 4.4 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à thanh ghi 16 bit có địa chỉ là 82H ( DPL , byte thấp ) và 83H ( DPH , byte cao ) . Ex: MOV A,#55H MOV DPTR,#1000H MOV @DPTR,A Trang 13
  15. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 4.5 Các thanh ghi Port : 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ỉ 0BH. Các port 0 , 2 và 3 không được dùng để xuất/nhập nếu ta sử dụng thêm bộ nhớ ngoài hoặc nếu có một số đặc tính của 8051 được sử dụng ( như là ngắt , port nối tiếp ) . 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 . 4.6 Các thanh ghi định thời : 8051 có hai bộ đếm/định thời ( timer/counter ) 16 bit để định các khỏang thời gian hoặc để đếm các sự kiện .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 ) . Họat độ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ỉ 89H và thanh ghi điều khiển định thời TCON ( timer control regsiter ) ở địa chỉ 88H. 4.7 Các thanh ghi port nối tiếp : Bên trong 8051 có một port nối tiếp để truyền thông với các thiết bị nối tiếp như các thiết bị đầu cuối hoặc moderm , hoặc để giao tiếp với các IC khác. Một thanh ghi đựơc gọi là bộ đệm dữ liệu nối tiếp SBUF ( serial data buffer ) ở địa chỉ 99H lưu trữ dữ liệu truyền đi và dữ liệu nhận về .Việc ghi lên SBUF sẽ nạp dữ liệu để truyền và việc đọc SBUF sẽ lấy dữ liệu đã nhận được . Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghi điều khiển port nối tiếp SCON ( serial port control register ) ở địa chỉ 98H . 4.8 Các thanh ghi ngắt : 8051 có một cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt . Các ngắt bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép ngắt bằng cách ghi vào thanh ghi cho phép ngắt IE ( interrupt enable register ) ở địa chỉ A8H. Mức ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP ( interrupt priority register ) ở địa chỉ B8H.Cả hai thanh ghi này đều được định địa chỉ từng bit. Trang 14
  16. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 5. Các cải tiến của 8052: Các vi mạch 8052 ( và các phiên bản CMOS ) có hai cải tiến so với 8051. Một là có thêm 128 byte RAM trên chip từ địa chỉ 80H-FFH . Điều này không xung đột với các thanh ghi chức năng đặc biệt (có cùng địa chỉ) vì 128 byte Ram thêm vào chỉ có thể truy xuất bằng cách dùng kiểu định địa chỉ gián tiếp . Ex: MOV A,#100 MOV R0,#0F0H ( Trùng với địa chỉ của thanh ghi B ) MOV A,@R0 Cải tiến thứ hai là có thêm bộ định thời 16 bit Timer 2 6. Hoạt động Reset: 8051 được reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy và sau đó chuyển về mức thấp. RST có thể được tác động tay hoặc đựơc tác động khi cấp nguồn bằng cách dùng một mạch RC. Trạng thái của các thanh ghi sau khi reset như sau : Thanh ghi Nội dung Bộ đếm chương trình 0000H Thanh chứa A 00H Thanh ghi B 00H PSW 00H SP 07H DPTR 0000H Port 0-3 FFH IP xxx00000B (8051) xx000000B (8052) IE 0xx00000B (8051) 0x000000B (8052) Các thanh ghi định thời 00H SCON 00H SBUF 00H PCON (HMOS) 0xxxxxxxB PCON (CMOS) 0xxx0000B Trang 15
  17. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh CHƯƠNG III : LẬP TRÌNH HỢP NGỮ VÀ TÓM TẮT TẬP LỆNH I. LẬP TRÌNH HỢP NGỮ : Hợp ngữ ( assembly language ) là ngôn ngữ của máy tính có vị trí ở giữa ngôn ngữ máy và ngôn ngữ cấp cao.Các ngôn ngữ cấp cao như Pascal,C sử dụng các từ và các phát biểu dễ hiểu hơn. Ngôn ngữ máy ( machine language ) là ngôn ngữ ở dạng số nhị phân của máy tính. Một chương trình viết bằng ngôn ngữ máy là một chuỗi các byte nhị phân biểu diễn các lệnh mà máy tính thực thi được. Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp ta dễ nhớ và dễ lập trình hơn. Ex : lệnh cộng có mã nhị phân là “10110011” được hợp ngữ thay thế bằng mã gợi nhớ ADD Một chương trình viết bằng hợp ngữ không thể được thực thi trực tiếp .Sau khi được viết xong chương trình này phải được dịch thành ngôn ngữ máy. Một chương trình viết bằng hợp ngữ là chương trình viết dưới dạng các ký hiệu, các mã gợi nhớ trong đó mỗi phát biểu tương ứng với một lệnh của ngôn ngữ máy. Mỗi dòng lệnh được chia thành các trường cách biệt nhau bởi khoãng trắng hoặc Tab. Khuôn dạng tổng quát của mỗi dòng lệnh như sau: [ label : ] mnemonic [ operand ][,operand ][, ] [;comment] Label: nhãn Mnemonic : mã gợi nhớ Operand : toán hạng Comment : chú thích a. Trường nhãn : Nhãn là một loại ký hiệu và được nhận dạng bằng dấu “:” ( kết thúc nhãn). Nhãn phải được bắt đầu bằng một ký tự chữ, dấu hỏi “?”,dấu nối dưới “_” và tiếp theo phải là các ký tự chữ,các số, dấu “?”,dấu “_”. Nhãn có thể dài tối đa là 31 ký tự ở dạng chữ thường hoặc chữ in. Nhãn không được trùng với các từ khóa ( các mã gợi nhớ, các chỉ dẫn, các toán tử hoặc các ký hiệu tiền định nghĩa ). b. Trường mã gợi nhớ : Mã gợi nhớ là các ký hiệu biểu diễn cho các lệnh . Trường mã gợi nhớ của lệnh theo sau trường nhãn . Ex : MOV,ANL,SETB . Trang 16
  18. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh c. Trường toán hạng : Trường toán hạng theo sau trường mã gợi nhớ. Trường này chứa địa chỉ hoặc dữ liệu mà lệnh sẽ sử dụng. Một nhãn có thể được dùng để biểu thị địa chỉ của dữ liệu .Các khả năng của trường toán hạng phụ thuộc vào thao tác. Có thao tác không có toán hạng (ex: lệnh RET,NOP ) trong khi các thao tác khác cho phép nhiều toán hạng cách nhau bởi dấu phẩy. d. Trường chú thích : Các ghi chú dùng để làm rõ chương trình được đặt trong trường chú thích ở cuối dòng lệnh. Các chú thích được bắt đầu bằng dấu “ ; ”. Các chú thích có thể chiếm nhiều dòng riêng và cũng phải bắt đầu bằng dấu “ ; “ . Các chương trình con và các phần có kích thước lớn của chương trình thường bắt đầu bởi một khối chú thích bao gồm nhiều dòng chú thích để giải thích các đặt trưng của chương trình. II. TÓM TẮT TẬP LỆNH : Cũng như các bộ vi xử lý 8 bit các lệnh của 8051 có các opcode 8 bit , do vậy số lệnh có thể lên đến 256 lệnh ( thực tế có 255 lệnh ,1 lệnh không được định nghĩa ). Ngoài opcode một số lệnh còn có thêm 1 hoặc 2 byte nữa cho dữ liệu hoặc địa chỉ . Tập lệnh có 139 lệnh 1 byte , 92 lệnh 2 byte và 24 lệnh 3 byte . 1. CÁC KIỂU ĐỊNH ĐỊA CHỈ : Các kiểu định địa chỉ là phần cần thiết cho toàn bộ tập lệnh của mỗi một bộ vi xử lý , bộ vi điều khiển . Các kiểu định địa chỉ cho phép ta xác định rõ nguồn và đích của dữ liệu theo nhiều cách khác nhau phụ thuộc vào tình huống lập trình ,có 8 kiểu định địa chỉ : Thanh ghi ( register ) Trực tiếp (direct ) Gián tiếp ( indirect ) Tức thời ( immediate ) Tương đối ( relative ) Tuyệt đối ( absolute ) Dài ( long ) Chỉ số ( index ) 1.1. ĐỊNH ĐỊA CHỈ THANH GHI : Kiểu định địa chỉ thanh ghi đựơc ký hiệu là Rn, trong đó n có giá trị từ 0-7, A, DPTR, PC, C và cặp thanh ghi AB. Ex : ADD A,R7 Trang 17
  19. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Có 4 dãy thanh ghi nhưng ở một thời điểm chỉ có một dãy tích cực. Các dãy thanh ghi chiếm 32 byte đầu tiên của RAM dữ liệu trên chip ( 00H-1FH ). Để chọn dãy thanh ghi tích cực ta tác động lên các bit RS1,RS0 của từ trạng thái chương trình PSW. Khi hệ thống được reset thì dãy thanh ghi 0 mặc định được tích cực. 1.2. ĐỊNH ĐỊA CHỈ TRỰC TIẾP : Kiểu định địa chỉ trực tiếp được sử dụng để truy xuất các biến nhớ hoặc các thanh ghi trên chip. Ex : MOV A,55H MOV P1,A ( P1 có địa chỉ 90H ) 1.3. ĐỊNH ĐỊA CHỈ GIÁN TIẾP : Kiểu định địa chỉ gián tiếp được nhận biết nhờ vào ký tự @ đặt trước R0 hoặc R1. Các thanh ghi R0 và R1 có thể hoạt động như là các con trỏ và nội dung của chúng chỉ ra địa chỉ trong RAM nơi mà dữ liệu được đọc hay ghi.Ta cần đến kiểu định địa chỉ gián tiếp khi ta duyệt các vị trí liên tiếp trong bộ nhớ. Ex : Thực hiện việc xóa tuần tự RAM nội từ địa chỉ 60H-7FH MOV R0,#60H LOOP: MOV @R0,#0 INC R0 CJNE R0,#80H,LOOP ( tiếp tục ) 1.4. ĐỊNH ĐỊA CHỈ TỨC THỜI : Khi toán hạng nguồn là một hằng số thay vì là một biến ,hằng số này có thể đưa vào lệnh và đây là byte dữ liệu tức thời. Các toán hạng tức thời được nhận biết nhờ vào ký tự # đặt trước chúng. Toán hạng này có thể là một hằng số học,một biến hoặc một biểu thức số học sử dụng các hằng số . Ex : MOV A,#12 MOV DPTR,#8000H 1.5. ĐỊNH ĐỊA CHỈ TƯƠNG ĐỐI : Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy .Một địa chỉ tương đối( còn được gọi là offset ) là một giá trị 8 bit có dấu .Giá trị này được cộng với bộ đếm chương trình để tạo ra địa chỉ của lệnh tiếp theo cần được thực thi. Ex : SJMP THERE DJNE CJNE Trang 18
  20. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Định địa chỉ tương đối có điểm lợi là cung cấp cho chúng ta mã không phụ thuộc vào vị trí , nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong tầm -128 byte đến 127 byte. 1.6. ĐỊNH ĐỊA CHỈ TUYỆT ĐỐI : Kiểu định địa chỉ tuyệt đối chỉ được sử dụng với các lệnh ACALL và AJMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong trang 2K hiện hành của bộ nhớ chương trình . Để không bị giới hạn ta có thể sử dụng lệnh LCALL, LJMP. Ex : LOOP: LCALL GIAI_MA LJMP LOOP 1.7. ĐỊNH ĐỊA CHỈ DÀI : Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP các lệnh 3 byte này chứa địa chỉ đích 16 bit . Lợi ích của lệnh này là sử dụng hết toàn bộ không gian nhớ chương trình 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3 byte. 1.8. ĐỊNH ĐỊA CHỈ CHỈ SỐ : Kiểu định địa chỉ chỉ số sử dụng một thanh ghi nền ( hoặc bộ đếm chương trình hoặc con trỏ dữ liệu ) và một offset ( thanh chứa A ) tạo thành dạng địa chỉ hiệu dụng cho lệnh JMP hoặc lệnh MOVC. Ex: MOVC A,@A+ JMP @A+DPTR 2. CÁC LOẠI LỆNH : Các lệnh của 8051 được chia làm 5 nhóm: Nhóm lệnh số học Nhóm lệnh logic Nhóm lệnh di chuyển dữ liệu Nhóm lệnh xử lý bit Nhóm lệnh rẽ nhánh Ghi chú : Rn : địa chỉ thanh ghi R0-R7 direct : địa chỉ 8 bit trong RAM nội ( 00H-0FH ) @Ri : địa chỉ gián tiếp sử dụng thanh ghi R0 hoặc R1 source : toán hạng nguồn - có thể là Rn,direct hoặc @Ri destination : toán hạng đích – có thể là Rn,direct hoặc @Ri #data : hằng số 8 bit ( Binary,Decimal,Hexa) Trang 19
  21. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh #data 16 : hằng số 16 bit bit : địa chỉ trực tiếp của một bit rel : địa chỉ tương đối ( offset ) 8 bit ex : nhãn addr11 : địa chỉ 11 bit trong trang hiện hành addr16 : địa chỉ 16 bit 2.1. CÁC LỆNH SỐ HỌC : ADD A,source : cộng toán hạng nguồn với A ADD A,#data ADDC A,source : cộng toán hạng nguồn với A và cờ nhớ ADDC A,#data SUBB A,source : trừ bớt A bởi toán hạng nguồn và số mượn ( cờ nhớ ) SUBB A,#data INC A : tăng thanh ghi A một đơn vị INC source DEC A : giảm thanh ghi A một đơn vị INC DPTR : tăng thanh ghi DPTR một đơn vị MUL AB : nhân A với B DIV AB : chia A bởi B ( A chứa thương số,B chứa số dư ) DA A : hiệu chỉnh thập phân thanh ghi A 2.2. CÁC LỆNH LOGIC : ANL A,source : AND ANL A,#data ANL direct,A ANL direct,#data ORL A,source : OR ORL A,#data ORL direct,A ORL direct,#data XRL A,source : XOR XRL A,#data XRL direct,A XRL direct,#data CLR A : xóa thanh ghi A CPL A : lấy bù A RL A : quay trái A (MSB=>LSB) RLC A : quay trái A với cờ C RR A : quay phải A ( LSB=>MSB) Trang 20
  22. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh RRC A : quay phải A với cờ C SWAP A : hoán đổi hai nibble ( hai nữa 4 bit ) 2.3. CÁC LỆNH DI CHUYỂN DỮ LIỆU : MOV A,source : di chuyển toán hạng nguồn đến toán hạng đích MOV A,#data MOV dest,A MOV dest,source MOV dest,#data MOV DPTR,#data16 MOVC A,@A+DPTR : di chuyển từ bộ nhớ chương trình MOVC A,@A+PC MOVX A,@Ri : di chuyển từ bộ nhớ dữ liệu MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A PUSH direct : cất vào stack POP direct : lấy ra từ stack XCH A,source : trao đổi các byte XCHD A,@Ri : trao đổi các digit thấp 2.4. CÁC LỆNH THAO TÁC TRÊN BIT : CLR C : xóa bit CLR bit : set bit bằng 1 SETB C SETB bit CPL C : lấy bù bit CPL bit ANL C,bit : AND bit với C ANL C,/bit : AND NOT bit với C ORL C,bit : OR bit với C ORL C,/bit : OR NOT bit với C MOV C,bit : di chuyển bit đến bit MOV bit,C JC rel : nhảy nếu C bằng 1 JNC rel : nhảy nếu C bằng 0 JB bit,rel : nhảy nếu bit bằng 1 JNB bit,rel : nhảy nếu bit bằng 0 JBC bit,rel : nhảy nếu bit bằng 1 rồi xóa bit Trang 21
  23. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 2.5. CÁC LỆNH RẼ NHÁNH : ACALL addr11 : gọi chương trình con LCALL addr16 RET : quay về từ chương trình con RETI : quay về từ trình phục vụ ngắt AJMP addr11 : nhảy LJMP addr16 SJMP rel JMP @A+DPTR JZ rel : nhảy nếu A bằng 0 JNZ rel : nhảy nếu A khác 0 CJNE A,direct,rel : so sánh và nhảy CJNE A,#data,rel CJNE Rn,#data,rel DJNZ Rn,rel : giảm và nhảy nếu khác không DJNZ direct,rel NOP : không làm gì III. CẤU TRÚC CHƯƠNG TRÌNH : 1. TỔ CHỨC CHƯƠNG TRÌNH : Các phần của chương trình được sắp xếp theo trình tự sau : Các phép gán Các lệnh khởi động ( thiết lập timer, ngắt , nạp các giá trị ban đầu ) Thân chính của chương trình Các chương trình con Các định nghĩa hằng dữ liệu ( DB và DW ) Gán : Việc định nghĩa các hằng số bằng phát biểu gán làm cho chương trình dễ đọc và bảo trì hơn. Các hằng số được dùng trong suốt chương trình bằng cách thay thế các giá trị bằng các ký hiệu đã được gán. Khi chương trình được dịch thì các giá trị tương ứng được thay thế cho các ký hiệu. Chương trình con : Khi các chương trình trở nên lớn, ta phải chia nhỏ các thao tác lớn và phức tạp thành các thao nhỏ và đơn giản. Các thao tác nhỏ và đơn giản này được lập trình thành các chương trình con. Các chương trình con được bắt đầu bằng một nhãn và kết thúc bằng lệnh RET hoặc RETI. Trang 22
  24. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Các chỉ dẫn : Các chỉ dẫn là các lệnh đối với trình dịch hợp ngữ. ORG : chỉ dẫn ORG dùng để thiết lập một gốc mới của chương trình cho các phát biểu theo sau. Ex : ORG 0000H ORG 0030H END : là chỉ dẫn thông báo cho trình dịch hợp ngữ biết đã kết thúc chương trình nguồn. END là phát biểu cuối cùng của chương trình. EQU ( equate ) : chỉ dẫn EQU gán giá trị số cho tên của ký hiệu được định nghĩa. Ex : N27 EQU 27 HERE EQU $ DATA EQU 50H BIT : chỉ dẫn BIT gán giá trị bit vào tên của ký hiệu. Ex : MOTOR BIT P0.0 DB : chỉ dẫn DB dùng để gán một hằng số vào bộ nhớ chương trình, các biểu thức theo sau có thể là một chuỗi của một hay nhiều giá trị byte. Chỉ dẫn DB cho phép chuỗi ký tự (đặt trong hai dấu nháy đơn ) dài hơn hai ký tự, mỗi ký tự trong chuỗi được biến đổi thành mã ASCII . Nếu có một nhãn được nhãn được dùng, nhãn được gán địa chỉ của byte đầu tiên. Ex : SQUARES: DB 0,1,4,9,16,25 MESSAGE: ‘ LAC HONG UNIVERSITY ‘,0 ; chuỗi ký tự kế thúc bởi 0 2. LƯU ĐỒ THUẬT GIẢI : Lưu đồ thuật giải là các cộng cụ thường dùng cho các giai đoạn khởi đầu của lập trình hợp ngữ. Lưu đồ thuật giải là công cụ trực quan giúp ta dễ dàng trình bày và hiểu chương trình hợp ngữ một cách hệ thống. Lưu đồ thuật giải cho phép một yêu cầu được mô tả dưới dạng “điều gì phải được thực hiện “ hơn là “thực hiện điều đó bằng cách nào”. Các ký hiệu thường dùng nhất cho việc lập lưu đồ bao gồm : Trang 23
  25. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh : khối quyết định ,khối này thường đặt ra các câu hỏi cho các câu trả lời có ( Yes ) hay không ( No ). : mũi tên chỉ đường đi của chương trình : khối xử lý : khối xuất/nhập : điểm bắt đầu hoặc kết thúc chương trình : chương trình con : kết nối qua trang Trang 24
  26. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Ex : Hãy viết một chương trình xóa các thanh ghi trong RAM nội từ địa chỉ 50H-60H. Begin Xóa dữ liệu 60H = 0 ? No Yes END Chương trình : MOV R0,#50H MOV A,#0 LOOP: MOV @R0,A INC R0 CJNE R0,#61H,LOOP END Ex : Hãy viết chương trình kiểm tra một nút nhấn S liên tục , nếu nút nhấn được tác động thì cho phép đèn D sáng và kết thúc chương trình. Ex : Hãy viết chương trình cho một ổ khóa mật mã gồm 8 công tắc được kết nối vào port 0, chương trình sẽ kiểm tra nếu mã nhập vào giống với mã mặc định (00001111) thì cho phép mở khóa K và kết thúc chương trình, khóa K được kết nối vào chân P1.0 ( quy ước 0: khóa , 1: mở khóa ) . Trang 25
  27. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh CHƯƠNG IV : HOẠT ĐỘNG ĐỊNH THỜI 1. MỞ ĐẦU : Một bộ định thời là một chuỗi các flipflop với mỗi flipflop là một mạch chia hai,chuỗi này nhận một tín hiệu ngõ vào làm nguồn xung clock.Xung clock đặt vào flipflop thứ nhất flipflop này chia đôi tần số xung clock. Ngõ ra của flipflop thứ nhất trở thành nguồn xung clock cho flipflop thứ hai ,nguồn xung clock này cũng được chia cho 2,v.v Vì mỗi một tần kế tiếp nhau đều chia cho 2 nên bộ định thời có n tầng sẽ chia tần số xung clock ở ngõ vào của bộ này cho 2. Ngõ ra của tần cuối cùng làm xung clock cho một flipflop báo tràn bộ định thời hay còn gọi là cờ tràn (overflow flag),cờ tràn này được kiểm tra bởi phần mềm hoặc tạo ra một bộ ngắt.Giá trị nhị phân trong các flipflop của bộ định thời là số đếm của các xung clock từ bộ định thời bắt đầu đếm.Thí dụ một bộ định thời 16bit sẽ đếm từ 0000H đến FFFH.Cờ tràn được set bắng 1 khi xảy ra tràn số đếm từ FFFFH xuống 0000H. Flag Flipflop D /Q D /Q D /Q D /Q Q0 Q1 Q2 Q Clock LSB MSB Clock Q0 Q1 Q2 Flag Trang 26
  28. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Hoạt động của một bộ định thời đơn giản được minh họa trong hình bên trên,bộ định thời 3 bit.Mỗi một tầng là một D-FF kích khởi cạnh âm hoạt động như một mạch chia cho 2 do ta nối ngõ ra Q đảo với ngõ vào D. Flipflop cờ đơn giản là một mạch chốt D được set bằng 1 bởi tầng cuối của bộ định thời.Giản đồ thời gian ở hình trên cho thấy tầng thứ nhất (Q0 ) chia hai tần số xung clock,tầng thứ hai chia 4 tần số xung clock và v.v Số đếm (count) được ghi ở dạng thập phân và được kiểm tra dễ dàng bằng cách khảo sát trạng thái của 3 flipflop.Thí dụ số đếm là 4 xuất hiện khi Q2=1,Q1=0 và Q0=0(410=1002).Các flipflop ở hình trên là các flipflop tác động cạnh âm (nghĩa là ngõ ra Q của các flipflop đổi trạng thái theo cạnh âm cuả xung clock).Khi số đếm tràn từ 1112 xuống 0002,ngõ ra Q2 có cạnh âm(1 0)làm cho trạng thái của flipflop cờ đổi từ 0 lên 1(ngõ vào D của flipflop này luôn luôn ở logic 1) Bộ định thời được sử dụng trong hầu hết các ứng dụng hướng điều khiển và 8051 với các bộ định thời trên chip không phải là trường hợp ngoại lệ.8051 có hai bộ định thời 16 bit ,mỗi bộ có 4 chế độ hoạt động .Bộ định thời thứ 3 với ba chế độ hoạt động được thêm vào đối với chip 8051.Các bộ định thời được dùng để: (a) Định thời trong một khoảng thời gian (b) Đếm sự kiện (c) Tạo tốc độ baud cho port nối tiếp của chip 8051. Với bộ định thời 16 bit ,tầng cuối cùng (tầng thứ 16)chia tần số xung clock của ngõ vào của bộ định thời cho 216=65536. Trong các ứng dụng định thời trong một khoảng thời gian, bộ định thời được lập trình sao cho sẽ tràn sau một khoãng thời gian quy định và set cờ tràn của bộ định thời bằng 1.Cờ tràn được sử dụng để đồng bộ chương trình nhằm thực hiện một công việc như là kiểm tra trạng thái của các ngõ nhập hoặc gửi dữ liệu đến cac ngõ xuất.Các ứng dụng khác có thể sử dụng xung clock của bộ định thời để đo khoảng thời gian giữa hai sự kiện(thí dụ đo độ rộng xung). Việc đếm sự kiện được dùng để xác định số lần xuất hiện của một sự kiện hơn là đo thời gian của các sự kiện.Từ “sự kiện” là một kích thích bên ngoài cung cấp một chuyển trạng thái từ 1 xuống 0 tới một chân của chip 8051.Các bộ định thời cũng có thể cung cấp xung clock tốc độ baud cho port nối tiếp bên trong 8051. Các bộ định thời 8051 được truy xuất bằng cách sử dụng 6 thanh ghi chức năng đặc biệt.Với bộ định thời thứ 3 của chip 8052,ta có thêm 5 thanh ghi chức năng đặc biệt nữa để truy xuất bộ định thời này. Trang 27
  29. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh SFR của Mục đích Địa chỉ Định địa chỉ bit bộ định thời TCON Điều khiển 88H Có TMOD Chọn chế độ 89H Không TL0 Byte thấp của bộ định thời 0 8AH Không TL1 Byte thấp của bộ định thời 1 8BH Không TH0 Byte cao của bộ định thời 0 8CH Không TH1 Byte cao của bộ định thời 1 8DH Không T2CON Điều khiển bộ định thời 2 C8H Có RCAP2H Nhận byte thấp của bộ định thời 2 CAH Không RCAP2L Nhận byte cao của bộ định thời 2 CBH Không TL2 Byte thấp của bộ định thời 2 CCH Không TH2 Byte cao của bộ định thời 2 CDH Không 2. THANH GHI CHẾ ĐỘ ĐỊNH THỜI ( TMOD ): Thanh ghi TMOD (timer mode register) chứa hai nhóm 4 bit dùng để thiết lập chế độ hoạt động cho bộ định thời 0 và bộ định thời 1.TMOD không được định địa chỉ từng bit. Một cách tổng quát,TMOD được nạp một lần bởi phần mềm ở thời điểm bắt đầu của một chương trình để khởi động chế độ hoạt động của bộ định thời .Sau đó bộ định thời có thể được dừng, được bắt đầu,v.v bằng cách truy xuất các thanh ghi chức năng đặc biệt khác của bộ định thời. Bit Tên Bộ Mô tả định thời 7 GATE 1 Bit điều khiển cổng.Khi được set lên 1,bộ định thời chỉ hoạt động trong khi INT1 đảo ở mức cao 6 C/T 1 Bit chọn chức năng đếm hoặc định thời 1 = đếm sự kiện 0 = định thời trong một khoảng thời gian 5 M1 1 Bit chọn chế độ thứ nhất 4 M0 1 Bit chọn chế độ thứ hai 3 GATE 0 Bit điều khiển cổng cho bộ định thời 0 2 C/T 0 Bit chọn chức năng đếm hoặc định thời cho bộ định thời 0 1 M1 0 Bit chọn chế độ thứ nhất 0 M0 0 Bit chọn chế độ thứ hai Thanh ghi chọn chế độ định thời Trang 28
  30. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh M1 M0 Chế độ Mô tả 0 0 0 Chế độ định thời 13 bit 0 1 1 Chế độ định thời 16 bit 1 0 2 Chế độ tự động nạp lại 8 bit 1 1 3 Chế độ định thời chia xẻ Các chế độ định thời 3. THANH GHI ĐIỀU KHIỂN ĐỊNH THỜI ( TCON ): Thanh ghi TCON chứa các bit điều khiển, bit trạng thái của bộ định thời 0 và bộ định thời 1.Bốn bit cao trong TCON (TCON4 - TCON7) được dùng để điều khiển cho bộ định thời hoạt động, ngưng (TR0,TR1) hoặc để báo bộ định thời tràn (TF0,TF1). Bốn bit thấp của TCON(TCON0- TCON3) không dùng để điều khiển các bộ định thời,chúng được dùng để phát hiện và khởi động các ngắt ngoài. Bit Ký Địa chỉ Mô tả hiệu bit TCON.7 TF1 8FH Cờ tràn của bộ định thời 1.Cờ này được set bởi phần cứng khi có tràn,được xóa bởi phần mềm,hoặc bởi phần cứng khi bô vi xử lý trỏ đến chương trình phục vụ ngắt TCON.6 TR1 8EH Bit điều khiển hoạt động của bộ định thời 1.Bit này được set hoặc được xóa bởi phần mềm để điều khiển bộ định thời hoạt động hay ngưng hoạt động TCON.5 TF0 8DH Cờ tràn của bộ định thời 0 TCON.4 TR0 8CH Bit điều khiển hoạt động của bộ định thời 0 TCON.3 IE1 8BH Cờ ngắt bên ngoài 1.Cờ này được set bởi phần cứng khi có cạnh âm( xuống),xuất hiện trên chân INT1 đảo,được xóa bởi phần mềm,hoặc bởi phần cứng khi CPU trỏ đến chương trình phục vụ ngắt TCON.2 IT1 8AH Bit chọn ngắt ngoài 1 thuộc loại tác động cạnh hay tác động mức.0:mức;1:cạnh TCON.1 IE0 89H Cờ ngắt bên ngoài 0 (kích khởi cạnh) TCON.0 IT0 88H Bit chọn ngắt ngoài 0 thuộc loại tác động cạnh hay tác động mức.0:mức;1:cạnh Thanh ghi điều khiển định thời TCON Trang 29
  31. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 4. CÁC CHẾ ĐỘ ĐỊNH THỜI VÀ CỜ TRÀN : Do ta có hai bộ định thời trên chip 8051,kí hiệu “x” được sử dụng để chỉ hoặc bộ định thời 0 hoặc bộ định thời 1.Thí dụ : THx có thể là TH0 hay TH1 tùy theo bộ định thời 0 hay 1. 4.1 Chế độ định thời 13 bit (chế độ 0) : Chế độ định thời 0 là chế độ định thời 13 bit cung cấp khả năng tương thích với bộ vi điều khiển tiền nhiệm 8048.Chế độ này không được dùng cho các thiết kế mới .Byte cao của bộ định thời THx được ghép cascade với 5 bit thấp của byte thấp của bộ định thời THx để tạo thành một bộ định thời 13bit. Ba bit cao của TLx không sử dụng. Timer clock TLx(5 bit) THx( 8 bit) TFx Overflow flag 4.2 Chế độ định thời 16 bit (chế độ 1) : Chế độ định thời 16 bit có cấu hình giống như chế độ định thời 13 bit.Khi có xung clock bộ định thời đếm lên : 0000H,0001H,0002H FFFFH ( 65535 ). Một tràn sẽ xuất hiện khi có sự chuyển số đếm từ FFFFH xuống 0000H, sự kiện này sẽ set cờ tràn bằng 1 ( TFx = 1 ) và bộ định thời tiếp tục đếm .Bit có ý nghĩa lớn nhất (MSB : Most significant bit) của giá trị trong các thanh ghi định thời là bit 7 của THx và bit có ý nghĩa thấp nhất (LSB : Least significan bit ) là bit 0 của TLx. Các thanh ghi định thời ( THx,TLx) có thể được đọc hoặc ghi bằng phần mềm ở bất kỳ thời điểm nào. Timer clock TLx THx TFx 4.3 Chế độ tự nạp lại 8 bit (chế độ 2): Chế độ 2 là chế độ tự nạp lại 8bit. Byte thấp của bộ định thời (TLx) hoạt động định thời 8 bit trong khi byte cao của bộ định thời lưu giữ giá trị nạp lại. Khi số đếm tràn từ FFH xuống 00H không chỉ cờ tràn của bộ định thời set lên 1 mà giá trị trong THx còn được nạp vào TLx, việc đếm sẽ được tiếp tục từ giá trị này cho đến khi xảy ra lần tràn kế tiếp,v.v Trang 30
  32. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh TLx Timer clock TFx Reload THx 4.4 Chế độ định thời chia sẻ (chế độ 3) : Chế độ 3 là chế độ định thời chia xẻ và có hoạt động khác nhau cho từng bộ định thời.Bộ định thời 0 của chế độ 3 được chia thành 2 bộ định thời 8 bit hoạt động riêng lẻ TL0 và TF1,mỗi bộ định thời sẽ set các cờ tràn tương ứng TF0 và TF1 khi xảy ra tràn. Bộ định thời 1 không hoạt động ở chế độ 3 nhưng có thể được khởi động bắng cách chuyển bộ định thời này vào một trong các chế độ khác.Giới hạn duy nhất là cờ tràn TF1 của bộ định thời 1 không bị ảnh hưởng bởi bộ định thời 1 khi bộ này xảy ra tràn vì TF1 được nối với bộ định thời TH0. Chế độ chủ yếu cung cấp thêm một bộ định thời 8bit nữa,nghĩa là 8051 có thêm bộ định thời thứ 3.Khi bộ định thời 0 của chế độ 3 ,bộ định thời 1 có thể hoạt động hoặc ngưng bằng cách chuyển bộ này ra khỏi chế độ 3 hoặc vào chế độ 3.Bộ định thời 1 có thể được sử dụng bởi port nối tiếp(lúc này bộ định thời 1 làm nhiệm vụ của bộ tạo xung clock tốc độ baud)hoặc được sử dụng theo một cách nào đó nhưng không yên cầu ngắt (vì bộ định thời lúc này không còn nối với TF1). 5. NGUỒN XUNG CLOCK ĐỊNH THỜI : Có 2 khả năng tạo ra nguồn xung clock này,việc lựa chọn khả năng nào do ta thiết lập bit C/T (counter/timer) của thanh ghi TMOD bằng 1 hay 0 khi bộ định thời được khởi động.Một nguồn xung clock được dùng để định thời trong một khoảng thời gian, nguồn xung clock còn lại được dùng để đếm sự kiện. 5.1 Định thời một khoảng thời gian : Nếu C/T =0,hoạt động định thời được chọn và nguồn xung clock của bộ định thời do mạch dao động bên trong chip tạo ra. Một mạch chia 12 tầng được thêm vào để giảm tần số xung clock đến một giá trị thích hợp với hầu hết các ứng dụng.Lúc này bộ định thời được dùng để định thời trong một Trang 31
  33. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh khỏang thời gian.Các thanh ghi định thời (TLx/THx) đếm lên với tần số xung clock bằng 1/12 tần số của mạch dao động trên chip (nghĩa là nếu thạch anh là 12MHz, tần số xung clock là 1MHz). Bộ định thời sẽ tràn sau một số xung clock cố định phụ thuộc vào giá trị ban đầu nạp cho các thanh ghi định thời( TLx/THx). 5.2 Đếm sự kiện : Nếu C/T = 1,bộ định thời được cung cấp xung clock từ 1 nguồn tạo xung bên ngoài. Trong đa số các ứng dụng ,nguồn xung clock này cung cấp cho bộ định thời một xung dựa trên việc xảy ra một sự kiện bộ định thời bây giờ đếm sự kiện. Số các sự kiện được xác định trong phần mềm bằng cách đọc các thanh ghi định thời (TLx/THx), giá trị 16-bit trong các thanh ghi này tăng theo mỗi sự kiện. Hai chân của port 3( P3.4 và P3.5 ) bây giờ trở thành ngõ vào xung clock cho các bộ định thời. Chân P3.4 là ngõ vào xung clock cho bộ định thời 0 (ta còn gọi là chân T0 ở ngữ cảnh này), chân P3.5 là ngõ vào xung clock cho bộ định thời 1(T1). Trong các ứng dụng đếm sự kiện, các thanh ghi định thời tăng mỗi khi xảy ra chuyển trạng thái từ 1 xuống 0 ở ngõ vào Tx (T0 hoặc T1). Ngõ vào Tx được lấy mẫu trong suốt mỗi một chu kỳ máy,vậy thì khi ngõ vào ở mức cao trong một chu kỳ và mức thấp trong chu kỳ kế,số đếm được tăng. Phải mất 2 chu kỳ máy (2us) để nhận biết sự chuyển trạng thái từ 1 xuống 0,tần số cực đại của nguồn xung clock bên ngoài là 500KHz ( với giả sử chip vi điều khiển hoạt động với thạch anh 12 MHz). 6. KHỞI ĐỘNG,DỪNG VÀ ĐIỀU KHIỂN CÁC BỘ ĐỊNH THỜI : Cách đơn giản nhất để khởi động và dừng các bộ định thời là sử dụng bit điều khiển hoạt động TRx trong thanh ghi TCON.TRx được xoá khi thiết lập hệ thống ;nghĩa là các bộ định thời ngưng hoạt động. Ngược lại nếu ta set bit TRx nghĩa là cho phép bộ định thời hoạt động. Do thanh ghi TCON là thanh ghi được định địa chỉ từng bit,ta dễ dàng khởi động hoặc dừng các bộ định thời bằng chương trình. Một phương pháp khác để điều khiển các bộ định thời là sử dụng bit GATE trong thanh ghi TMOD và ngõ vào /INTx. Bằng cách set bit GATE lên 1 ta cho phép bộ định thời được điều khiển bởi /INTx. 7. KHỞI ĐỘNG VÀ TRUY XUẤT CÁC THANH GHI ĐỊNH THỜI: Các bộ định thời thường được khởi động một lần ở thời điểm bắt đầu chương trình để thiết lập chế độ hoạt động yêu cầu.Trong thân của chương trình ,các bộ định thời được điều khiển hoạt động,dừng,kiểm tra các bit cờ và xoá,cá thanh ghi định thời được đọc hoặc cập nhật tuỳ theo yêu cầu ứng Trang 32
  34. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh dụng.TMOD là thanh ghi được khởi động trước tiên vì đây là thanh ghi thiết lập chế độ hoạt động. Ex : Khởi động bộ định thời 1 hoạt động ở chế dộ 16-bit (chế độ 1),xung clock được cấp từ mạch dao động trên chip (định thời một khỏang thời gian) MOV TMOD,#00010000B Kết quả của lệnh này là thiết lập M1=0 và M0=1 để ấn định chế độ 1,C/T=0 và GATE =0 để sử dụng xung clock trên chip,xoá các bit chọn chế độ của bộ định thời 0.Dĩ nhiên trên thực tế bộ định thời không bắt đầu công việc định thời cho đến khi bit điều khiển hoạt động TR1 được set bằng 1. Trong trường hợp cần đến số đếm ban đầu, các thanh ghi định thời TL1/TH1 cũng phải được khởi động. Cần nhớ là các bộ định thời đếm lên và thiết lập cờ tràn bằng 1 khi xảy ra tràn số đếm từ FFFFH xuống 0000H, vậy thì một khoảng thời gian 100us có thể được định thời bằng cách khởi động TL1/TH1 chứa số đếm nhỏ hơn 0000H một lượng là 100 nghĩa là -100 hay FF9CH. Các lệnh sau thực hiện điều này. MOV TL1, #9CH MOV TH1,#0FFH Kế đến bộ định thời bắt đầu hoạt động bằng cách thiết lập bit điều khiển hoạt động bằng 1 như sau : SETB TR1 Cờ tràn được tự động sau khoảng thời gian 100us. Phần mềm có thể chứa 1 vòng lặp trì hoãn thời gian 100us bằng cách sử dụng một lệnh rẽ nhánh và lặp lại chính lệnh này trong khi cờ tràn chứa được set bằng 1. WAIT : JNB TF1, WAIT Khi bộ định thời tràn ta cần dừng bộ định thời và xóa cờ tràn bằng phần mềm : CLR TR1 CLR TF1 Đọc bộ định thời đang hoạt động : Trong một số ứng dụng ta cần phải đọc giá trị (nội dung) chứa trong các thanh ghi định thời đang hoạt động.Do ta phải đọc 2 thanh ghi định thời bằng 2 dòng lệnh liên tiếp ( do không có lệnh đọc đồng thời cả hai thanh ghi định thời này ), một sai pha có thể xuất hiện nếu có tràn từ byte thấp chuyển sang byte cao giữa hai lần đọc và do vậy không thể đọc đúng được giá trị cần đọc. Giải pháp đưa ra là trước tiên ta phải đọc byte cao kế đến đọc byte thấp rồi đọc byte cao lần nữa. Trang 33
  35. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Nếu byte cao thay đổi giá trị, ta lặp lại các thao tác đọc vừa nêu. Các lênh sau đây đọc nội dung các thanh ghi định thời TL1/TH1, đưa vào các thanh ghi R6/R7 và giải quyết vấn đề vừa nêu: AGAIN : MOV A, TH1 MOV R6,TL1 CJNE A,TH1, AGAIN MOV R7,A Ex : Viết chương trình tạo sóng vuông 10KHz trên chân P0.0 bằng cách sử dụng bộ định thời 0. ( Thạch anh 12MHz ) ORG 0030H ; thiết lập gốc của chương trình MOV TMOD,#00000010B ;( #02H ) chế độ tự nạp lai MOV TH0,#206 ; TH0 chứa giá trị 206 =0CEH= -50 SETB TR0 ; cho phép bộ định thời hoạt động LOOP: JNB TF0,LOOP ; chờ timer 0 tràn CLR TF0 ; xóa cờ tràn chuẩn bị cho lần sau CPL P0.0 ; đổi trạng thái bit P0.0 SJMP LOOP ; nhảy về nhãn LOOP , lăp lại END Ex : Viết chương trình tạo sóng vuông 1KHz trên chân P1.0 sử dụng bộ định thời 0. ORG 0030H ; thiết lập gốc của chương trình MOV TMOD,#00000001B ; chế độ định thời 16 bit LOOP: MOV TH0,#0FEH ; nạp trước cho TH0 byte cao của -500 MOV TL0,#0CH ; nạp trước cho TL0 byte thấp của -500 SETB TR0 ; cho phép bộ định thời hoạt động WAIT: JNB TF0,WAIT ; chờ timer 0 tràn CLR TR0 ; dừng bộ định thời CLR TF0 ; xóa cờ tràn CPL P1.0 ; lấy bù SJMP LOOP ; lặp lại END Trang 34
  36. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh CHƯƠNG VI : HOẠT ĐỘNG NGẮT 1. MỞ ĐẦU: Ngắt ( interrupt ) là sự sảy ra của một điều kiện làm cho trương trình hiện hành bị tạm ngưng trong khi điều kiên này được phục vụ bởi một chương trình khác. Các ngắt đóng vai trò quan trọng trong việc thiết kế và thực hiện các ứng dụng của vi điều khiển. Các ngắt cho phép hệ thống đáp ứng một sự kiện theo cách không đồng bộ và xử lý một sự kiện trong khi một chương trình khác đang thực thi. Một hệ thống được điều khiển bởi ngắt cho ta ảo tưởng đang làm nhiều công việc đồng thời. CPU dĩ nhiên không thể thực hiện nhiều hơn một lệnh ở một thời điểm nhưng CPU có thể tạm ngưng việc thực thi một chương trình để thực thi một chương trình khác rồi sau đó quay trở về thực thi tiếp chương trình đang bị tạm ngưng. Điều này giống như CPU rời khỏi chương trình gọi để thực hiện chương trình con bị gọi để rồi sau đó quay về chương trình gọi. Chương trình xử lý một ngắt được gọi là chương trình phục vụ ngắt ISR ( interrupt service routine ). ISR được thực thi nhằm đáp ứng một ngắt và trong trường hợp tổng quát thực hiện việc xuất nhập với một thiết bị. Khi một ngắt xuất hiện, việc thực thi trương trình chính tạm thời bị dừng và CPU thực hiện rẽ nhánh đến trình phục vụ ngắt ISR. CPU thực thi ISR để thực hiện một công việc và kết thúc việc thực thi này khi gặp lệnh “quay về từ một trình phục vụ ngắt” RETI.Ta có thể nói chương trình chính được thực thi ở mức nền còn ISR được thực thi ở mức ngắt. 2. TỔ CHỨC NGẮT CỦA 8051 : Có 5 nguyên nhân tạo ra ngắt đối với 8051: hai ngắt do bên ngoài, hai ngắt do bộ định thời và một ngắt do port nối tiếp. 8052 có thêm nguyên nhân ngắt thứ 6: do bộ định thời được thêm vào, bộ định thời thứ ba. Khi ta thiết lập trạng thái ban đầu cho hệ thống , tất cả các ngắt điều bị vô hiệu hóa và sau đó chúng được cho phép riêng rẻ bằng phần mềm . Khi xảy ra hai hay nhiều ngắt đồng thời hoặc xảy ra một ngắt trong khi một ngắt đang phụ vụ , ta có hai sơ đồ xử lý ngắt: sơ đồ chuổi vòng và sơ đồ hai mức ưu tiên. 2.1 Cho phép và không cho phép ngắt: Mỗi một nguyên nhân ngắt được cho phép hoặc không cho phép riêng rẽ thông qua thanh ghi chức năng đặc biệt định địa chỉ bit, thanh ghi cho phép ngắt IE ( interrupt enable ) có địa chỉ byte là 0A8H. Mỗi một bit của thanh ghi này cho phép hoặc không cho phép từng nguyên nhân ngắt riêng Trang 40
  37. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh rẻ, thanh ghi IE đồng thời có một bit toàn cục ( global ) cho phép hoặc không cho phép tất cả các ngắt . Thanh ghi cho phép ngắt IE Bit Ký hiệu Địa chỉ bit Mô tả ( 0: không cho phép, 1: cho phép ) IE.7 EA AFH Cho phép/không cho phép ngắt toàn cục IE.6 - AEH Không sử dụng IE.5 ET2 ADH Cho phép ngắt do bộ định thời 2 IE.4 ES ACH Cho phép ngắt do port nối tiếp IE.3 ET1 ABH Cho phép ngắt do bộ định thời 1 IE.2 EX1 AAH Cho phép ngắt từ bên ngoài ( ngắt ngoài 1 ) IE.1 ET0 A9H Cho phép ngắt do bộ định thời 0 IE.0 EX0 A8H Cho phép ngắt từ bên ngoài ( ngắt ngoài 0 ) Ex: Ngắt do bộ định thời 1 được cho phép bằng cách dùng hai lệnh: SETB ET1 : Cho phép ngắt do bộ định thời một SETB EA : set bit EA bằng 1 để cho phép ngắt toàn cục hoặc : MOV IE,#10001000B 2.2 Ưu tiên ngắt : Mỗi một nguyên nhân ngắt được lập trình riêng rẻ để có một trong hai mức ưu tiên thông qua chức năng thanh ghi đặc biệt được định địa chỉ bit , thanh ghi ưu tiên ngắt IP ( interrupt priority ), thanh ghi này có địa chỉ byte là 0B8H. Thanh ghi IP Bit Ký hiệu Địa chỉ bit Mô tả (1: mức cao, 0: mức thấp) IP.7 - - Không sử dụng IP.6 - - Không sử dụng IP.5 PT2 0BDH Ưu tiên ngắt do bộ định thời 2 IP.4 PS 0BCH Ưu tiên ngắt do port nối tiếp IP.3 PT1 0BBH Ưu tiên ngắt do bộ định thời 1 IP.2 PX1 0BAH Ưu tiên ngắt ngoài 1 IP.1 PT0 0B9H Ưu tiên ngắt do bộ định thời 0 IP.0 PX0 0B8H Ưu tiên ngắt ngoài 0 Trang 41
  38. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Khi hệ thống được thiết lập lại trạng thái ban đầu, thanh ghi IP sẽ mặc định tất cả các ngắt ở mức ưu tiên thấp. Chương trình chính do được thực thi ơ mức nền và không được kết hợp với một ngắt nào nên luôn luôn bị tạm dừng bởi các ngắt. Nếu có hai ngắt xảy ra đồng thời thì ngắt nào có mức ưu tiên cao hơn sẽ được phục vụ trước. 2.3 Chuỗi vòng : Nếu có hai ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ xác định ngắt nào được phục vụ trước. Chuỗi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ định thời 0, ngắt ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp, ngắt do bộ định thời 2. 3. XỬ LÝ NGẮT : Khi có một ngắt xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt. Các thao tác sau đây sảy ra: -Hoàn tất việc thực thi lệnh hiện hành -Bộ đếm chương trình PC được cất vào stack -Trạng thái của ngắt hiện hành được lưu giữ lại - Các ngắt được chận lại ở mức ngắt - Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR - ISR được thực thi ISR được thực thi để đáp ứng công việc của ngắt. Việc thực thi ISR kết thúc khi gặp lệnh RETI. Lệnh này lấy lại giá trị cũ của bộ đếm chương trình PC từ stack và phục hồi trạng thái của ngắt cũ. 3.1 Các vector ngắt : Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình PC được gọi là vector ngắt. Vector ngắt là địa chỉ bắt đầu của trình phục vụ ngắt của nguyên nhân ngắt tương ứng. Ngắt Địa chỉ vector Reset hệ thống 0000H Ngắt ngoài 0 0003H Ngắt do bộ định thời 0 000BH Ngắt ngoài 1 0013H Ngắt do bộ định thời 1 001BH Ngắt do port nối tiếp 0023H Ngắt do bộ định thời 2 002BH Trang 42
  39. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 4. THIẾT KẾ CHƯƠNG TRÌNH SỬ DỤNG CÁC NGẮT: Khuôn mẫu đề nghị cho một chương trình được thực thi độc lập có sử dụng ngắt như sau : ORG 0000H ; điểm nhập sau khi reset LJMP MAIN - ; các điểm nhập của các ISR - ORG 0030H ; điểm nhập chương trình chính MAIN: ; chương trình chính bắt đầu - - END 4.1 Các trình phục vụ ngắt kích thước nhỏ: Các trình phục vụ ngắt phải được bắt đầu ở gần đáy của bộ nhớ chương trình tại các điạ chỉ qui định. Mặc dù chỉ có 8 byte giữa các điểm nhập của các trình phục vụ ngắt, dung lượng này thường đủ để thực hiện các công việc được yêu cầu và quay trở về chương thình chính từ một trình phục vụ ngắt. Điều này có nghĩa là trình phục vụ ngắt cho các ngắt tương ứng thường không dài quá 8 byte. Nếu có nhiều ngắt được dùng ta phải cẩn thận để đảm bảo các ISR được bắt đầu đúng vị trí mà không tràn sang ISR kế. Ex : ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH ; điểm nhập ngắt bộ định thời 0 T0_ISR : ; bắt đầu ISR cho bộ định thời 0 MOV P2,#00001111B RETI ; trở về chương trình chính MAIN : ; chương trình chính - - END ; kết thúc chương trình Trang 43
  40. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 4.2 Các trình phục vụ ngắt kích thước lớn: Nếu một trình phục vụ ngắt dài hơn 8 byte được cần đến, ta phải di chuyển phương trình này đến một nơi khác trong bộ nhớ chương trình hoặc ta có thể cho lấn qua điểm nhập của ISR kế . Điển hình là ISR bắt đầu với một lệnh nhảy đến một vùng khác của bộ nhớ chương trình, ở đó ISR được trãi rộng nếu cần. Ex: ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH ; điểm nhập ngắt do timer 0 LJMP T0_ISR - ; điểm nhập các ngắt khác ( nếu có ) - ORG 0030H ; địa chỉ phía trên các vector ngắt MAIN: ; chương trình chính - - - T0_ISR: ; chương trình con phụ vụ ngắt - ; do bộ định thời 0 - - RETI ; quay về chương trình chính END Ex : Viết chương trình tạo sóng vuông có tần số 10KHz trên chân p1.0 sử dụng bộ định thời 0 và ngắt do bộ định thời 0. ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH ; điểm nhập ngắt timer 0 T0_ISR: ; ISR timer 0 CPL P1.0 ; đảo bit P1.0 RETI ; trở về chương trình chính MAIN: MOV TMOD,#00000010B; timer 0 hoạt động ở chế độ 2 (8 bit) MOV TH0,#-50 ; giá trị nạp lại tương ứng với 50us MOV IE,#10000010B ; cho phép ngắt do bộ định thời 0 SETB TR0 ; bật timer 0 SJMP $ ; nhảy tại chổ END Trang 44
  41. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh Ex : Viết chương trình sử dụng các ngắt để tạo ra đồng thời các dạng sóng vuông có tần số là 10KHz trên chân P1.0 và 500Hz trên chân P1.1 ORG 0000H LJMP MAIN ORG 000BH LJMP NGAT_T0 ORG 001BH LJMP NGAT_T1 ORG 0030H MAIN: MOV TMOD,#00010010B; timer 1 chế độ 1, timer 0 chế độ 2 MOV TH0,#-50 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) MOV IE,#10001010B SETB TR0 SETB TR1 SJMP $ NGAT_T0: CPL P1.0 RETI NGAT_T1: CLR TR1 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) SETB TR1 CPL P1.1 RETI END Trang 45
  42. Bài giảng Vi điều khiển Biên soạn: Ths Lê Hoàng Anh 4.3 Các ngắt ngoài : Ngắt ngoài xảy ra khi có mức thấp hoặc có cạnh âm trên chân /INT0 hoặc /INT1. Việc chọn các ngắt thuộc tác động cạnh hay các ngắt loại tác động mức được lập trình thông qua các bit IT0 và IT1 của thanh ghi TCON. Vì các chân ngắt ngoài được lấy mẫu một lần ở mỗi chu kỳ máy các ngõ vào này phải được duy trì tối thiểu 12 chu kỳ dao động để đảm bảo rằng việc lấy mẫu là đúng. Nếu ngắt ngoài thuộc tác động cạnh nguyên nhân ngắt ngoài phải được duy trì tại chân yêu cầu ở mức cao tối thiểu một chu kỳ và sau đó ở mức thấp tối thiể một chu kỳ nữa để đảm bảo rằng việc chuyển trạng thái được phát hiện. IE0 và IE1 tự động được xóa khi CPU trỏ tới trình phục vụ ngắt tương ứng. Nếu ngắt ngoài thuộc loại tác động mức nguyên nhân ngắt ngoài phải được duy trì trạng thái tích cực cho đến khi ngắt theo yêu cầu thực sự tạo ra. Sau đó nguyên nhân ngắt phải ở trạng thái thụ động trước khi trình phục vụ ngắt được thực thi xong hoặc trước khi có một ngắt khác được tạo ra. Thông thường, một công việc được thực thi bên trong trình phục vụ ngắt làm cho nguyên nhân ngắt trả tín hiệu yêu cầu ngắt trở về trạng thái không tích cực. Trang 46