Bài giảng Vi điều khiển - Chương 7: N8051 I/O and 8051 Interrupts

pdf 24 trang phuongnguyen 4150
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi điều khiển - Chương 7: N8051 I/O and 8051 Interrupts", để 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_chuong_7_n8051_io_and_8051_interrupt.pdf

Nội dung text: Bài giảng Vi điều khiển - Chương 7: N8051 I/O and 8051 Interrupts

  1. 8051 I/O and 8051 Interrupts Microcontroller Chapter 7 Ngo Nhu Khoa Department of Computer Engineering DCE ThaiNguyen University of Technology
  2. Những vấn đề chính z Giao tiếp vào/ra 8051 với –Mạch hiểnthị bằng LED theo cơ chế quét –Mạch hiểnthị LCD – Bàn phím z Các ngắtcủa 8051 – IVT, ISR – Cho phép ngắtvàưutiênngắt –Cácngắt ngoài 10/1/2005 2 DCE
  3. 1. Hiểnthị bằng quét các LED 7 đoạn z Đặctrưng củahiểnthị LED –power-hungry (10ma per LED) –Pin-hungry (8 pins per 7-seg display) z Cơ chế quét trong hiểnthị –Chỉ 1 ma trậnLED 7 đoạn được kích hoạttại 1 thời điểm –Cácđầu vào a-h đượcnốitách biệtvới nhau z Tổng số các chân cầncólà: – 8 + số ký tự (số ma trận) –8 + 4 chovídụở hình bên 10/1/2005 3 DCE
  4. 1. Hiểnthị bằng quét các LED 7 đoạn z Giảithuật để hiểnthị 1 start: disable [D3:D0] again: enable D3 giá trị có 4 ký tự. [a:h] D pattern for Digit3 z Tầnsố quét phải đủ lớn delay disable D3. Enable D2 để tránh hiệntượng [a:h] D pattern for Digit2 nháy đốivớithị giác delay disable D2. Enable D1 –Tốithiểu là 30HZ [a:h] D pattern for Digit1 –Thời gian sáng củamỗiký delay tự là 1/30 seconds disable D1. Enable D0 –Giátrị tầnsố này càng lớn [a:h] D pattern for Digit0 delay càng làm giảm độ nhấp disable D0 nháy (60Hz) Goto again 10/1/2005 4 DCE
  5. 2. Giao tiếp với bàn phím z 16 phím được sắp xếp thành 1 ma trận 4x4 z Giải thuật: – Đưa ra mức “0” trên 1 hàng – Đọc tất cả các cột –Nếu 1 phím nào đó được bấm, thì cột của nó sẽbằng “0”, nếu không bấm thì là 1 – Duy trì vòng quét 1 cách liên tục ở các hàng kế tiếp z Ví dụ: – Phím 4 được bấm R1D 0, C1:C4 = 1111 R2D 0, C1:C4 = 0111 –Phím 2được bấm R1 D 0, C1:C4 = 1101 10/1/2005 5 DCE
  6. 3. Giao tiếp với LCD z LCDs rẻ và là cách dễ thực hiện đối với mục đích hiển thị các ký tự trong các hệ thống nhúng – Có nhiều cấu hình khác nhau (1x20 đến 8x80), giá tối thiểu khoảng $5 – Các LCDs có khả năng đồ hoạ cũng khá phổ biến z Các LCDs thông minh có sẵn các bộ giải mã ASCII, bộ tạo ký tự và mạch điều khiển LCD z Một số còn có khả năng tạo ký tự theo yêu cầu cá nhân –Người dùng định nghĩa ký tự trong RAM –Chương trình RAM này chứa các mẫu ký tự – Sau đó nó được sử dụng như các ký tự ASCII chuẩn –Thường MSB quyết định việc hiển thị giữa bộ ký tự chuẩn hay bộ ký tự cá nhân hoá 10/1/2005 6 DCE
  7. Giao tiếp với LCD loại ký tự z Chân ra – 8 data pins D7:D0 – RS: Data or Command Select – RW: Read or Write – E: Enable (Latch data) – Vee : contrast control z RS=0 D Command, z RS=1 D Data z RW=0 D Write z RW=1 D Read z E=1 D Enable (H-L pulse) z LCD Command Codes – Mfrs. Data sheet – Clear screen, move cursor, – shift display 10/1/2005 7 DCE
  8. Giải thuật điều khiển LCD loại ký tự z Algorithm Command and Data Write Routines mov A, command cmd: mov P1, A;A has the cmd word call cmd clr P3.3 ;RS=0 for cmd delay clr P3.4 ;RW=0 for write mov A, another_cmd setb P3.5 ;H->L pulse on E call cmd clr P3.5 delay ret mov A, #’A’ data: mov P1, A ;A is ascii data call data setb P3.3 ;RS=1 data delay mov A, #’B’ clr P3.4 ;RW=0 for write call data setb P3.5 ;H->L pulse on E delay clr P3.5 . ret 10/1/2005 8 DCE
  9. Giải thuật điều khiển LCD loại ký tự z Kiểm tra trạng thái bận: Sau 1 lệnh đọc từ LCD, bit D7 sẽ chứa cờ báo bận. Kiểm tra bit này trước khi gửi thêm 1 lệnh mới đến LCD, hay sử dụng 1 khoảng trễ đủ lớn. ready: setb P1.7 ;D7 as input clr P3.3 ;RS=0 cmd setb P3.4 ;RW=1 for read again: setb P3.5 ;H->L pulse on E clr P3.5 jb P1.7, again ret 10/1/2005 9 DCE
  10. 4. Các ngắt của 8051 z Ngắt là gì ? – Một cách để dừng vi xử lý khỏi bất kỳ công việc gì mà nó đang thực hiện và buộc nó làm 1 việc khác z Tại sao và ở những ứng dụng nào cần đến ngắt? –Phục vụ cho nhiều thiết bị giao tiếp –Các hệ thống đa nhiệm z Các ngắt trong 8051 – 2 ngắt ngoài, hai ngắt cho bộ định thời và 1 ngắt cho cổng nối tiếp 10/1/2005 10 DCE
  11. Hỏi vòng và ngắt z Hỏi vòng - Polling: – CPU giám sát tất cả các thiết bị được phục vụ 1 cách liên tục, chờ đợi 1 “cờ hiệu yêu cầu được phục vụ - service request flag” –Bất cứ khi nào nó thấy 1 yêu cầu, nó sẽ phục vụ thiết bị đó và sau đó tiếp tục duy trì việc hỏi vòng – CPU luôn “bận - busy” với việc hỏi vòng, với vòng lặp để thực hiện việc “có yêu cầu nào không nhỉ” z Ngắt - Interrupts – Nếu và khi 1 thiết bị sẵn sàng và cần được chú ý, nó sẽ báo cho CPU biết –CPU ngừng bất kỳ việc gì mà nó đang thi hành và phục vụ thiết bị và sau đó trở lại công việc trước đó của mình. – CPU luôn “rỗi - free”, khi nó không phục vụ ngắt 10/1/2005 11 DCE
  12. Thường trình phục vụ ngắt z CPUs có 1 số lượng ngắt là cố định z Mỗi ngắt phải được liên kết với 1 đoạn mã, được gọi là “Interrupt Service Routine -ISR”. –Nếu CPU nhận được ngắt-x, thì ISR-x được thi hành z Kiến trúc CPU định nghĩa 1 vùng riêng biệt “code address” cho mỗi ISR, là nơi mà chúng được lưu giữ,“Interrupt vector Table (IVT)” z ISRs cơ bản là “subroutines”, nhưng chúng phải được kết thúc với lệnh RETI, lệnh thay cho RET z Khi 1 ngắt xảy ra, CPU sẽ lấy mã ISR của nó từ IVT và cho thi hành. 10/1/2005 12 DCE
  13. Sự thi hành ngắt 1. CPU kết thúc lệnh nó đang thi hành và lưu con trỏ lệnh PC vào ngăn xếp 2. CPU lưu trạng thái hiện thời của tất cả các ngắt trong 3. Lấy địa chỉ của ISR cho ngắt từ IVT và nhảy đến địa chỉ đó 4. Thực hiện ISR đến khi nó nhận được lệnh RETI 5. Với lệnh RETI, CPU lấy ra từ ngăn xếp nội dung của PC trước đó và tiếp tục với nơi nó đã đang thực hiện trước khi ngắt xảy ra 10/1/2005 13 DCE
  14. Các ngắt của 8051 z Nhà cung cấp đảm bảo 8051 có 6 ngắt cứng. Một trong chúng là reset. Do đó, thực tế 8051 chỉ có 5 ngắt cứng. Tuy nhiên, các dòng khác nhau có thể có số lượng ngắt khác nhau. z Hai ngắt ngoài – INT0 và INT1, hai ngắt thời gian – TF0 và TF1 và một ngắt của cổng nối tiếp–S0 z Các ngắt có thể được kích hoạt hay loại bỏ 1 cách độc lập. Điều này được thực hiện trong thanh ghi IE (Interrupt Enable Register) z Các ngắt ngoài (INT0 và INT1) có thể được cấu hình để được kích hoạt theo mức hay theo sườn. 10/1/2005 14 DCE
  15. Bảng véc tơ ngắt - IVT của 8051 z Mỗi ngắt có 8 bytes cho ISR của nó. z NếuISR lớn hơn 8bytes, thì phải dngf 1 lệnh ljmp ORG 0 Interrupt ROM Location Pin rom_start: LJMP main_code Reset 0000H 9 ORG 13H INT0 0003H P3.2 int1_vec: LJMP int1_isr TF0 000BH ORG 30H INT1 0013H P3.3 main_code: ;bla bla TF1 001BH ; . int1_isr: ;bla bla S0 0023H 10/1/2005 15 DCE
  16. Thanh ghi IE z EA = 0, vô hiệu hoá tất cả các ngắt EA ET2 ES ET1 EX1 ET0 EX0 z Các bit khác, nếu lập bằng 1, có ý nghĩa là cho phép một ngắt tương ứng, nếu lập bằng 0 là vô hiệu hoá nó. z EX0 = enable INT0 z ET0 = enable Timer0 z EX1 = enable INT1 z ET1 = enable Timer1 z ES = enable serial port interrupt z ET2 = (for 8052 clones only) enable Timer2 10/1/2005 16 DCE
  17. Ví dụ đơn giản z Chân INT1 được nối với 1 SW và ở trạng thái thường cao. Khi nó xuống mức thấp, 1 LED phải được bật. LED được nối với chân P1.3 và thường ngắt org 0H ljmp MAIN org 13H ;INT1 ISR INT1_ISR: setb P1.3 ;turn on LED mov r3, #255 BACK: djnz r3, BACK ;keep the led ON for a while clr P1.3 ;turn OFF the LED RETI ;use RETI, NOT RET org 30H MAIN: mov IE, #1000 0100B ;enable INT1, EA=1, EX1=1 HERE: sjmp HERE ;stay here until interrupted end 10/1/2005 17 DCE
  18. Các ngắt ngoài z INT0 và INT1 – Kích hoạt theo mức: 1 mức thấp trên chân này sẽ gây ra ngắt - Default mode (chế độ ngầm định) – Kích hoạt theo sườn : ứng với sườn xuống (chuyển từ trạng thái cao - thấp) trên chân này sẽ gây ra ngắt z Cấu hình trong thanhg ghi TCON – (IT1) TCON.2 = 1 D INT1 kích hoạt theo sườn xung – (IT0) TCON.0 = 1 D INT0 kích hoạt theo sườn xung z IE0 (TCON.1) và IE1 (TCON.3) – Trong chế độ kích hoạt theo sườn, nếu ngắt INTx xảy ra, CPU sẽ lập bit IEx, nó chỉ được xoá sau khi 1 lệnh RETI được thi hành –Chặn ngắt trong khi đang phục vụ ngắt z Thiết lập và thời gian duy trì đối với ngắt ngoài tác động theo sườn thường là 1 trong 1 chu kỳ máy 10/1/2005 18 DCE
  19. Mức ưu tiên của các ngắt z Mức ưu tiên ngầm định – INT0 > TF0 > INT1 > TF1 > S0 z ISR của 1 ngắt có thể bị ngắt bởi 1 ngắt có mức ưu tiên cao hơn. z Mức ưu tiên ngầm định có thể bị thay đổi bằng lập trình lại trong thanh ghi IP PT2 PS PT1 PX1 PT0 PX0 z Để lập đặt ưu tiên cho 1 ngắt cao hơn, lập bit của nó trong thanh ghi IP bằng 1 z Nếu nhiều hơn 1 bit trong IP được lập, thứ tự ưu tiên ngầm định được sử dụng cho tất cả các ngắt mà có bit ưu tiên đã lập bằng 1 trong IP 10/1/2005 19 DCE
  20. Các bộ định thời trong 8051 z Hai bộ định thời 16-bit, T0 và T1 – Bộ định thời – tính toán thời gian, thời điểm – Đếm sự kiện–Đếm sự xuất hiện của 1 sự kiện z T0 = TH0:TL0 z T1 = TH1:TL1 z Chế độ bộ định thời được điều khrn bởi thanh ghi TMOD: Gate, C/T, M0, M1 z Các bộ định thời được điều khiển bởi thanh ghi TCON (4 bits cao): TR0, TR1, TF0, TF1 10/1/2005 20 DCE
  21. Thanh ghi TMOD z Gate = 0, cổng mềm của bộ định thời (bit TRx trong TCON) z Gate = 1, cổng cứng của bộ định thời chân (INTx) z C/T = 0 D hoạt động định thời z C/T = 1 D hoạt động đếm z M1:M0 = 00 D Mode 0 (13bit timer) z M1:M0 = 01 D Mode 1 (16 bit timer) z M1:M0 = 10 D Mode 2 (8 bit timer, with auto-reload) z M1:M0 = 11 D Mode 3 (split timer) z Nguồn đồng hồ cho bộ định thời là sys_clk/12 10/1/2005 21 DCE
  22. Bộ định thời – Mode 1 z Bộ định thời 16 bit z Hoạt động 1. Nạp thanh ghi TMOD để lập chế độ 2. Nạp TLx và THx với các giá trị đếm ban đầu 3. Bắt đầu bộ đếm(setb TRx) 4. Duy trì giám sát cờ TFx (jnb TFx, target) 5. Dừng bộ định thời(clrb TRx) và xoá cờ TFx 6. Trở lại bước 2 để nạp lại z Tính thời gian Telapsed = (65536 - intial_value)*cycle_time z Thay vì hỏi vòng để chờ cờ TFx, 1 ISR có thể được sử dụng 10/1/2005 22 DCE
  23. Bộ định thời – Mode 1 - Ví dụ z Tạo ra 1 sóng vuông, với chu kỳ 50% mức đỉnh ở P1.5, với bộ định thời Timer0 Timer0 mov TMOD, #01 ;Timer 0, mode 1 sequence Here: mov TL0, #0F2H mov TH0, #0FFH ;Initial Value = FFF2H FFF2 TF=0 cpl P1.5 FFF3 TF=0 acall delay FFF4 TF=0 sjmp Here . Delay: setb TR0 ;start Timer0 . Again: jnb TF0, Again ;poll for TF0 (timer overflow) FFFE TF=0 clr TR0 ;stop timer FFFF TF=1 clr TF0 ;clear TF0 flag RET 10/1/2005 23 DCE
  24. Next Class z 8051 Timers z Timers and Interrupts z Applications 10/1/2005 24 DCE