Tải bản đầy đủ (.pdf) (19 trang)

Tài liệu Lập trình ngắt ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (209.02 KB, 19 trang )

1
NỘI DUNG
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức
năng đặc biệt
5. Dao động và hoạt động
reset
6. Tập lệnh
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình
Timer/Counter
11.Giao tiếp nối tiếp
12.
12.
12.
L
L
L



p tr
p tr
p tr
ì
ì
ì


nh ng
nh ng
nh ng



t
t
t
13.Lập trình hợp ngữ
12. Lập trình ngắt
Interrupt Programming
3
Thực thi ở mức ngắt
Thực thi ở mức nền
Main
(a) Thực thi chương trình không có ngắt
time
Main
ISR
Main
ISR
Main
ISR
Main
(a) Thực thi chương trình có ngắt
time
12-1. Giới thiệu
4
12-2. Tổ chức ngắt

• Có 5 nguyên nhân tạo ngắt: 2 ngắt ngoài, 2 ngắt bộ định thời,
1 ngắt do port nối tiếp
• Khi reset, tất cả các ngắt đều bị vô hiệu hóa
• Khi xảy ra 2 hay nhiều ngắt đồng thời, hay 1 ngắt mới xuất
hiện trong khi 1 ngắt đang thực thi Æ ta có 2 sơ đồ xử lý ngắt:
sơ đồ chuỗi vòng (cố định) và sơ đồ 2 mức ưu tiên (lập trình
bởi người dùng)
5
6
12-3. Xử lý ngắt
NgắtCờ Thanh ghi SFR & vị trí
bit
Do bên ngoài (ngắt ngoài 1) IE1 TCON.3
Do bên ngoài (ngắt ngoài 0) IE0 TCON.1
Do bộ định thời 1 TF1 TCON.7
Do bộ định thời 0 TF0 TCON.5
Do port nối tiếp TI SCON.1
Do port nối tiếp RI SCON.0
Do bộ định thời 2 TF2 T2CON.7 (8052)
Do bộ định thời 2 EXF2 T2CON.6 (8052)
7
12-3-1. Các vector ngắt
Ngắt do CờĐịa chỉ vector
Reset hệ thống RST 0000H
Ngắt ngoài 0 IE0 0003H
Bộ định thời 0 TF0 000BH
Ngắt ngoài 1 IE1 0013H
Bộ định thời 1 TF1 001BH
Port nối tiếp RI hoặc TI 0023H
Bộ định thời 2 TF2 hoặc EXF2 002BH

8
12-4. Thiết kế chương trình sử dụng ngắt
Khuôn mẫu chương trình có sử dụng ngắt:
ORG 0000H ; Điểm nhập sau khi reset
LJMP MAIN
. ; các điểm nhập của ISR
.
.
ORG 0030H ; điểm nhập của chương trình chính
MAIN: . ; chương trình chính bắt đầu
.
.
9
12-4-1. ISR kích thước nhỏ
ORG 0000H ; Điểm nhập sau khi reset
LJMP MAIN
ORG 000BH; điểm nhập của ngắt do Timer 0
T0ISR: . ; bắt đầu ISR cho Timer 0
.
RETI ; trở về chương trình chính
MAIN: . ; chương trình chính bắt đầu
.
10
12-4-2. ISR kích thước lớn
ORG 0000H ; Điểm nhập sau khi reset
LJMP MAIN
ORG 000BH; điểm nhập của ngắt do Timer 0
LJMP T0ISR
ORG 0030H
MAIN: . ; chương trình chính bắt đầu

.
T0ISR: . ; bắt đầu ISR cho Timer 0
.
RETI ; trở về chương trình chính
11
(VD1: Tạo sóng vuông sử dụng các ngắt do bộ định thời: viết
chương trình sử dụng timer 0 và các ngắt để tạo 1 sóng vuông
tần số 10KHz trên chân P1.0
ORG 0000H
LJMP MAIN
ORG 000BH
T0ISR: CPL P1.0
RETI
ORG 0030H
MAIN: MOV TMOD, #02H ; mode 2 của timer 0
MOV TH0, #-50 ; trì hoãn 50us
SETB TR0 ; bật timer
MOV IE, #82H ; cho phép ngắt do timer 0
SJMP $ ; không làm gì
END
12
•Lưu ý: Cờ tràn bộ định thời TF0 không cần được xóa bởi phần
mềm do khi các ngắt được cho phép, cờ này tự động được xóa
bởi phần cứng khi CPU trỏ tới ISR
•Các cờ gây ngắt TF0, TF1, IE0, IE1 tự động được xóa bởi
phần cứng khi CPU trỏ tới ISR
•Nhưng các cờ gây ngắt RI, TI không được xóa bởi phần cứng
khi CPU trỏ tới ISR
(VD2: Tạo sóng vuông sử dụng các ngắt do bộ định thời: viết
chương trình sử dụng timer 0, timer 1 và các ngắt để tạo 2

sóng vuông tần số 10KHz và 5KHz trên chân P1.0, P1.1 ?
13
VD3: Viết chương trình sử dụng các ngắt để tạo đồng thời 2 sóng
vuông tần số 7KHz và 0.5KHz trên chân P1.7, P1.6 ?
8051
P1.7
P1.6
71us
1000us
14
ORG 0000H
LJMP MAIN
ORG 000BH ; địa chỉ vector timer 0
LJMP T0ISR
ORG 001BH ; địa chỉ vector timer 1
LJMP T1ISR
ORG 0030H
MAIN: MOV TMOD, #12H ; timer 1 : mode 1
; timer 0 : mode 2
MOV TH0, #-71 ; trì hoãn 71us Æ 7KHz
SETB TR0 ; bật timer 0
SETB TF1 ; buộc ngắt do timer 1
MOV IE, #8AH ; cho phép ngắt do timers
SJMP $ ; không làm gì
15
T0ISR:CPL P1.7
RETI
T1ISR:CLR TR1
MOV TH1, #HIGH (-1000)
MOV TL1, #LOW (-1000)

SETB TR1
CPL P1.6
RETI
END
16
12-5. Các ngắt do port nối tiếp
•Các ngắt này xuất hiện khi cờ ngắt phát TI hoặc cờ ngắt thu RI
được set bằng 1
•Cờ gây ra ngắt ở port nối tiếp không được xóa bởi phần cứng
khi CPU trỏ tới ISR
Û Viết chương trình sử dụng các ngắt để liên tục phát đi tập mã
ASCII (không bao gồm các mã điều khiển) đến 1 thiết bị đầu
cuối nối với 8051 qua port nối tiếp?
ORG 0
LJMP MAIN
ORG 0023H
LJMP SPISR
ORG 0030H
17
MAIN: MOV TMOD, #20H ; timer 1 – mode 2
MOV TH1, #-26 ; giá trị nạp lại: 1200 baud
SETB TR1
MOV SCON, #42H ; mode 1, set TI =1 để buộc
; có ngắt đầu tiên; gửi ký tự thứ nhất
MOV A, #20H
MOV IE, #90H ; cho phép ngắt do port nt
SJMP $
SPISR: CJNE A, #7FH, SKIP; nếu kết thúc tập mã ASCII
MOV A, #20H
SKIP: MOV SBUF, A ; gửi ký tự đến port nt

INC A
CLR TI
RETI
END
18
12-6. Các 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
•Thực tế, các cờ gây ra các ngắt này là các bit IE0, IE1 của
TCON
•Việc chọn các ngắt loại tác động mức hay cạnh được lập trình
thông qua các bit IT0 và IT1 của TCON
•Các cờ gây ngắt IE0, IE1 tự động được xóa khi CPU trỏ tới
ISR tương ứng
19
VD1: Điều khiển lò nung: Sử dụng các ngắt để thiếtkế bộđiều
khiểnlònungsaochonhiệt độ được duy trì ở 19
o
CÆ21
o
C
VD2: Hệ thống báo động: Sử dụng các ngắt để thiếtkế 1 hệ
thống báo động tạoraâmhiệu 400Hz trong 1 sec (dùng 1 loa
nốivới chân P1.7) mỗi khi bộ cảmbiến đặt ở cửa(đượcnối
với chân /INT0) tạo ra 1 chuyểntrạng thái từ mứccaoxuống
mứcthấp

×