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
24 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 471 | Lượt tải: 0
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:
- bai_giang_microcontroller_chuong_7_8051_io_and_8051_interrup.pdf