chap7 8051 i o and 8051 interrupts - tnu.edu.vn and... · –mạch hiểnthịbằng led theo...
TRANSCRIPT
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
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
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Đặc trưng của hiển thị LED
–power-hungry (10ma per LED)
–Pin-hungry (8 pins per 7-seg display)
Cơ chế quét trong hiển thị– Chỉ 1 ma trận LED 7 đoạn đượckích hoạt tại 1 thời điểm
– Các đầu vào a-h được nối táchbiệt với nhau
Tổ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 …Giải thuật để hiển thị 1 giá trị có 4 ký tự.Tần số quét phải đủ lớnđể tránh hiện tượngnhá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ấpnháy (60Hz)
start: disable [D3:D0]again: enable D3[a:h] pattern for Digit3delaydisable D3. Enable D2[a:h] pattern for Digit2delaydisable D2. Enable D1[a:h] pattern for Digit1delaydisable D1. Enable D0[a:h] pattern for Digit0delaydisable D0Goto again
10/1/2005 5 DCE
2. Giao tiếp với bàn phím16 phím được sắp xếp thành 1 ma trận 4x4Giả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
Ví dụ:– Phím 4 được bấm
R1 0, C1:C4 = 1111R2 0, C1:C4 = 0111
– Phím 2 được bấmR1 0, C1:C4 = 1101
10/1/2005 6 DCE
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
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
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ựChân ra– 8 data pins D7:D0– RS: Data or Command Select– RW: Read or Write– E: Enable (Latch data)– Vee : contrast control
RS=0 Command,RS=1 DataRW=0 WriteRW=1 ReadE=1 Enable (H-L pulse)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ựAlgorithmmov A, commandcall cmddelaymov A, another_cmdcall cmddelaymov A, #’A’call datadelaymov A, #’B’call datadelay….
Command and Data Write Routinescmd: mov P1, A;A has the cmd word
clr P3.3 ;RS=0 for cmdclr P3.4 ;RW=0 for writesetb P3.5 ;H->L pulse on Eclr P3.5ret
data: mov P1, A ;A is ascii datasetb P3.3 ;RS=1 dataclr P3.4 ;RW=0 for writesetb P3.5 ;H->L pulse on Eclr P3.5ret
10/1/2005 9 DCE
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 inputclr P3.3 ;RS=0 cmdsetb P3.4 ;RW=1 for read
again: setb P3.5 ;H->L pulse on Eclr P3.5jb P1.7, againret
Giải thuật điều khiển LCD loại ký tự
10/1/2005 10 DCE
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
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
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
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ỉ”
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
CPUs có 1 số lượng ngắt là cố định
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
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 vectorTable (IVT)”
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
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 trong3. 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 RETI5. 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
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.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 – S0Cá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)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 8051Mỗi ngắt có 8 bytes cho ISR của nó.
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 0rom_start: LJMP main_codeORG 13Hint1_vec: LJMP int1_isrORG 30Hmain_code: ;bla bla; ….int1_isr: ;bla bla
10/1/2005 16 DCE
Thanh ghi IEEA = 0, vô hiệu hoá tất cả các ngắt
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ó.
EX0 = enable INT0
ET0 = enable Timer0
EX1 = enable INT1
ET1 = enable Timer1
ES = enable serial port interrupt
ET2 = (for 8052 clones only) enable Timer2
EX0ET0EX1ET1ESET2--EA
10/1/2005 17 DCE
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 0Hljmp MAINorg 13H ;INT1 ISR
INT1_ISR: setb P1.3 ;turn on LEDmov r3, #255
BACK: djnz r3, BACK ;keep the led ON for a whileclr P1.3 ;turn OFF the LEDRETI ;use RETI, ***NOT RET***org 30H
MAIN: mov IE, #1000 0100B ;enable INT1, EA=1, EX1=1HERE: sjmp HERE ;stay here until interrupted
end
10/1/2005 18 DCE
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ắtCấu hình trong thanhg ghi TCON– (IT1) TCON.2 = 1 INT1 kích hoạt theo sườn xung– (IT0) TCON.0 = 1 INT0 kích hoạt theo sườn xung
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
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ắtMức ưu tiên ngầm định
– INT0 > TF0 > INT1 > TF1 > S0
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.
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
Để lập đặt ưu tiên cho 1 ngắt cao hơn, lập bit của nó trong thanhghi IP bằng 1
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
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
T0 = TH0:TL0
T1 = TH1:TL1
Chế độ bộ định thời được điều khrn bởi thanh ghiTMOD: Gate, C/T, M0, M1
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
Gate = 0, cổng mềm của bộ định thời (bit TRx trongTCON)Gate = 1, cổng cứng của bộ định thời chân (INTx)C/T = 0 hoạt động định thờiC/T = 1 hoạt động đếmM1:M0 = 00 Mode 0 (13bit timer)M1:M0 = 01 Mode 1 (16 bit timer)M1:M0 = 10 Mode 2 (8 bit timer, with auto-reload)M1:M0 = 11 Mode 3 (split timer)Nguồn đồng hồ cho bộ định thời là sys_clk/12
10/1/2005 22 DCE
Bộ định thời 16 bit
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
Tính thời gian
Telapsed = (65536 - intial_value)*cycle_time
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
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 1Here: mov TL0, #0F2H
mov TH0, #0FFH ;Initial Value = FFF2Hcpl P1.5acall delaysjmp Here
Delay: setb TR0 ;start Timer0Again: jnb TF0, Again ;poll for TF0 (timer overflow)
clr TR0 ;stop timerclr TF0 ;clear TF0 flagRET
Timer0sequence
FFF2 TF=0FFF3 TF=0FFF4 TF=0….….FFFE TF=0FFFF TF=1
10/1/2005 24 DCE
8051 Timers
Timers and Interrupts
Applications
Next Class