Bài giảng Microcontroller - Chương 7: 8051 I/O and 8051 Interrupts

 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á

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

 

pdf24 trang | Chia sẻ: trungkhoi17 | Lượt xem: 471 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Microcontroller - Chương 7: 8051 I/O and 8051 Interrupts, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
DCE 8051 I/O and 8051 Interrupts Microcontroller Chapter 7 Ngo Nhu Khoa Department of Computer Engineering ThaiNguyen University of Technology 10/1/2005 2 DCE z Giao tiếp vào/ra 8051 với – Mạch hiển thị bằng LED theo cơ chế quét – Mạch hiển thị LCD – Bàn phím z Các ngắt của 8051 – IVT, ISR – Cho phép ngắt và ưu tiên ngắt – Các ngắt ngoài Những vấn đề chính 10/1/2005 3 DCE 1. Hiển thị bằng quét các LED 7 đoạn z Đặc trưng của hiển thị LED –power-hungry (10ma per LED) –Pin-hungry (8 pins per 7-seg display) z Cơ chế quét trong hiển thị – Chỉ 1 ma trận LED 7 đoạn được kích hoạt tại 1 thời điểm – Các đầu vào a-h được nối tách biệt với nhau zTổng số các chân cần có là: – 8 + số ký tự (số ma trận) – 8 + 4 cho ví dụ ở hình bên 10/1/2005 4 DCE 1. Hiển thị bằng quét các LED 7 đoạn z Giải thuật để hiển thị 1 giá trị có 4 ký tự. z Tần số quét phải đủ lớn để tránh hiện tượng nháy đối với thị giác – Tối thiểu là 30HZ – Thời gian sáng của mỗi ký tự là 1/30 seconds – Giá trị tần số này càng lớn càng làm giảm độ nhấp nháy (60Hz) start: disable [D3:D0] again: enable D3 [a:h] D pattern for Digit3 delay disable D3. Enable D2 [a:h] D pattern for Digit2 delay disable D2. Enable D1 [a:h] D pattern for Digit1 delay disable D1. Enable D0 [a:h] D pattern for Digit0 delay disable D0 Goto again 10/1/2005 5 DCE 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 6 DCE 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á 3. Giao tiếp với LCD 10/1/2005 7 DCE 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 DWrite 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 8 DCE Giải thuật điều khiển LCD loại ký tự z Algorithm mov A, command call cmd delay mov A, another_cmd call cmd delay mov A, #’A’ call data delay mov A, #’B’ call data delay . Command and Data Write Routines cmd: mov P1, A;A has the cmd word clr P3.3 ;RS=0 for cmd clr P3.4 ;RW=0 for write setb P3.5 ;H->L pulse on E clr P3.5 ret data: mov P1, A ;A is ascii data setb P3.3 ;RS=1 data clr P3.4 ;RW=0 for write setb P3.5 ;H->L pulse on E clr P3.5 ret 10/1/2005 9 DCE 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 Giải thuật điều khiển LCD loại ký tự 10/1/2005 10 DCE 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 4. Các ngắt của 8051 10/1/2005 11 DCE 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 Hỏi vòng và ngắt 10/1/2005 12 DCE 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. Thường trình phục vụ ngắt 10/1/2005 13 DCE 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 Sự thi hành ngắt 10/1/2005 14 DCE 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. Các ngắt của 8051 10/1/2005 15 DCE 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ếu ISR lớn hơn 8bytes, thì phải dngf 1 lệnh ljmp 9 P3.2 P3.3 0000H 0003H 000BH 0013H 001BH 0023H Reset INT0 TF0 INT1 TF1 S0 PinROM LocationInterruptORG 0 rom_start: LJMP main_code ORG 13H int1_vec: LJMP int1_isr ORG 30H main_code: ;bla bla ; . int1_isr: ;bla bla 10/1/2005 16 DCE Thanh ghi IE z EA = 0, vô hiệu hoá tất cả các ngắt 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 EX0ET0EX1ET1ESET2--EA 10/1/2005 17 DCE 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 Ví dụ đơn giản 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 18 DCE 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 Các ngắt ngoài 10/1/2005 19 DCE 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 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 PX0PT0PX1PT1PSPT2---- 10/1/2005 20 DCE 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 Các bộ định thời trong 8051 10/1/2005 21 DCE 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 22 DCE 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 Bộ định thời – Mode 1 10/1/2005 23 DCE 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 Bộ định thời – Mode 1 - Ví dụ mov TMOD, #01 ;Timer 0, mode 1 Here: mov TL0, #0F2H mov TH0, #0FFH ;Initial Value = FFF2H cpl P1.5 acall delay sjmp Here Delay: setb TR0 ;start Timer0 Again: jnb TF0, Again ;poll for TF0 (timer overflow) clr TR0 ;stop timer clr TF0 ;clear TF0 flag RET Timer0 sequence FFF2 TF=0 FFF3 TF=0 FFF4 TF=0 . . FFFE TF=0 FFFF TF=1 10/1/2005 24 DCE z 8051 Timers z Timers and Interrupts z Applications Next Class

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_microcontroller_chuong_7_8051_io_and_8051_interrup.pdf