Tải bản đầy đủ (.ppt) (16 trang)

slide bài giảngckỹ thuật điều khiển ghép nối thiết bị ngoại vi chương 6

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 (192.25 KB, 16 trang )

NGẮT (INTERUPT)


NGẮT
• Các loại ngắt và bảng vector ngắt:
• Reset hệ thống RST
0000H
• Ngắt ngoài 0
IE0 Địa chỉ vector ngắt 0003H
• Timer 0
TF0
000BH
• Ngắt ngoài 1
IE1
0013H
• Timer 1
TF1
001BH
• Cổng nối tiếp
RI hoặc TI
0023H
• Timer 2
TF2 hoặc EXF2
002BH

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Thanh ghi cho phép ngắt IE (Interrupt Enable Register)


IE
D7

D6

D5

EA

D4

ET2
ES
Cho phép
ngắt do
Timer 2
Không sử
dụng

D2

ET1

Cho phép
ngắt toàn
cục

D3

D1


ET0
EX1

Cho phép
ngắt do
Timer 1

Cho phép
ngắt do port
nối tiếp

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D0

EX0
Cho phép
ngắt do
Timer 0

Cho phép
ngắt
ngoài 1

Cho phép
ngắt
ngoài 0





Thanh ghi ưu tiên ngắt IP (Interrupt Priority Register)
IP
D7

D6

D5

D4

D3

PT2

Không sử
dụng

D2

PT1

Không sử
dụng

PS
Ưu tiên
ngắt cho
Timer 2


D1

PT0
PX1

Ưu tiên
ngắt cho
Timer 1

Ưu tiên ngắt
do port nối
tiếp
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D0

PX0
Ưu tiên
ngắt cho
Timer 0

Ưu tiên
ngắt
ngoài 1

Ưu tiên
ngắt
ngoài 0




Giới thiệu timer

XTAL
oscillator

TH

÷12
C/T = 0

TF bật lên 1
khi FFFF → 0

TR

TH0
D15

D14

D13

D12

D11

D14


D13

D12

D11

Cờ tràn
(Overflow Flag)

TL0
D10

D9

D8

D7

D6

D5

TH1
D15

TF

TL

D4


D3

D2

D1

D0

D2

D1

D0

TL1
D10

D9

D8

D7

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D6

D5


D4

D3




Thanh ghi TMOD: Timer Mode
Chọn chế độ hoạt động

TMOD
D7 D6

D5

GATE

M1
C/T

D4

D3

D2

GATE
M0

Chọn chế độ hoạt động

cho TIMER1
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D1

D0

M1
C/T

M0

Chọn chế độ hoạt động
cho TIMER0



1. Lập trình ngắt timer
IE – Interrupt Enable Register

EA

-

ET2

ES

ET1


EX1

ET0

EX0

• Bước 1: Chọn chế độ hoạt động của timer như ở
phần lập
trình cho timer
• Bước 2: Cho phép ngắt:
• Cho phép ngắt do timer
ET0 = 1; // Nếu sử dụng ngắt timer 0
ET1 = 1; // Nếu sử dụng ngắt timer 1

• Cho phép ngắt toàn cục
EA = 1; // Bắt buộc phải có khi sử dụng bất cứ ngắt nào.

• Bước 3: Viết chương trình phục vụ ngắt Timer.

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Bit M0, M1 – của thanh ghi TMOD
TMOD
GATE

C/T M1


M0

M1

M0

Chế độ

0
0
1
1

0
1
0
1

0
1
2
3

GATE C/T

M1

M0

Mô tả

Chế độ định thời 13 bit
Chế độ định thời 16 bit
Chế độ tự động nạp lại 8-bit
Chế độ định thời chia xẻ

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Ví dụ 1:
Viết chương trình nháy LED nối ở chân P1.0 với chu kỳ 500us sử dụng ngắt
timer 0. (Thạch anh 12Mhz).
ORG 0000H
LJMP MAIN

ASM

ORG 001BH
LJMP T0_ISR
ORG 0030H
MAIN:
MOV TMOD, #00000010B; Chế độ 2
MOV TH0, #55
MOV TL0, #55
CLR TF0; Xóa cờ tràn
SETB ET0
SETB EA
SETB TR0; Khởi động Timer 0
JMP $

T0_ISR:
CPL P1.0
RETI

C
void main() {
TMOD = 0x02; // Timer 0 ở chế độ 2
TH0 = 5;
TL0 = 5; // Nạp giá trị cho TH0,
TF0 = 0;
// Xóa cờ tràn
ET0 = 1;
EA =1;
TR0 = 1;
// Khởi động Timer 0
while(1);
}
void T0_ISR() interrupt 1 {
P1_0 = !P1_0;
}

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Ví dụ 2:
Viết chương trình tạo xung vuông ở chân P1.0 với tần số 500Hz sử dụng ngắt
timer 1. Thạch anh 12Mhz.


C

ASM

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T1_ISR
ORG 0030H
MAIN:
MOV TMOD, #00010000B;Timer 1 chế độ 1
MOV TH1, #HIGH(-1000)
MOV TL1, #LOW(-1000)
CLR TF1; Xóa cờ tràn
SETB ET1
SETB EA
SETB TR1; Khởi động Timer 0
JMP $
T1_ISR:
CLR TR1; Dừng bộ định thời
MOV TH1, #HIGH(-1000); Nạp lại
MOV TL1, #LOW(-1000)
CPL P1.0
SETB TR1; Khởi động timer 0
RETI

void main() {
TMOD = 0x10; // Timer 1 ở chế độ 1
TH1 = 0xFC;
TL1 = 0x17; // Nạp giá trị cho

TF1 = 0;
// Xóa cờ tràn
ET1 = 1;
EA = 1;
TR1 = 1;
// Khởi động Timer 1
while(1);
}
void T1_ISR() interrupt 3 {
TR1 = 0; // Dừng bộ định thời
TH1 = 0xFC;
TL1 = 0x17; // Nạp lại
P1_0 = !P1_0;
TR1 = 1; // Khởi động bộ định thời
}

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




2. Lập trình ngắt ngoài
IE – Interrupt Enable Register
EA

-

ET2

ES


ET1

EX1

ET0

EX0

+ Lập trình cho ngắt ngoài 0
Cho phép ngắt ngoài 0

EX0 = 1;

Cho phép ngắt toàn cục

EA = 1;

Viết chương trình phục vụ ngắt ngoài 0
+ Lập trình cho ngắt ngoài 1
Cho phép ngắt ngoài 0
EX1 = 1;
Cho phép ngắt toàn cục EA = 1;
Viết chương trình phục vụ ngắt ngoài 1
+ Ngắt ngoài có 2 kiểu:
Ngắt bằng mức 0
Ngắt bằng sườn xuống
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng





Kích hoạt ngắt ngoài
Bằng sườn xuống hoặc bằng mức 0 ở chân ngắt ngoài
TCON – Timer/Counter Control Register

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

• Ngắt ngoài 0:
• IT0 = 0: Ngắt ngoài 0 được kích hoạt khi phát hiện
mức 0 ở chân ngắt ngoài 0 (P3.2)
• IT0 = 1: Ngắt ngoài 0 được kích hoạt khi phát hiện
sườn xuống ở chân ngắt ngoài 0 (P3.2)
• Ngắt ngoài 1:
• IT1 = 0: Ngắt ngoài 1 được kích hoạt khi phát hiện
mức 0 ở chân ngắt ngoài 0 (P3.3)

• IT1 = 1: Ngắt ngoài 1 được kích hoạt khi phát hiện
sườn xuống ở chân ngắt ngoài 1 (P3.3)
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Ví dụ 1:
Bật LED ở chân P1.0 khi xảy ra mức 0 ở chân ngắt ngoài 0 (P3.2). Sử dụng
ngắt ngoài 0.

ASM
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EX0_ISR
ORG 0030H
MAIN:
SETB EX0; Cho phép ngắt ngoài 0
SETB EA; Cho phép ngắt toàn cục
JMP $

C
void main() {
EX0 = 1; // Cho phép ngắt ngoài 0
EA = 1; // Cho phép ngắt toàn cục
while(1);
}
void EX0_ISR() interrupt 0 {
P1_0 = 0;

}

EX0_ISR:
CLR P1.0
RETI
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Ví dụ 2:
Bật LED ở chân 1.0 khi xảy ra sườn xuống ở chân ngắt ngoài 1 (P3.3).
Sử dụng ngắt ngoài 1.

ASM
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP EX1_ISR
ORG 0030H
MAIN:
SETB EX1; Cho phép ngắt ngoài 0
SETB EA; Cho phép ngắt toàn cục
SETB IT1;
JMP $
EX1_ISR:
CLR P1.0
RETI

C

void main() {
EX1 = 1; // Cho phép ngắt ngoài 0
EA = 1; // Cho phép ngắt toàn cục
IT1 =1;
while(1);
}
void EX1_ISR() interrupt 2 {
P1_0 = 0;
}

Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng




Thanh ghi ưu tiên ngắt IP
IP (Interrupt Priority Register)
D7 D6 D5 D4 D3 D2 D1

PT2

Không sử
dụng

PT1

Không sử
dụng

PS

Ưu tiên
ngắt cho
Timer 2

PT0
PX1

Ưu tiên
ngắt cho
Timer 1

Ưu tiên ngắt
do port nối
tiếp
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng

D0

PX0
Ưu tiên
ngắt cho
Timer 0

Ưu tiên
ngắt
ngoài 1

Ưu tiên
ngắt
ngoài 0




Lập trình ưu tiên ngắt
IP – Interrupt Priority Register

-

-

PT2

PS

PT1 PX1 PT0 PX0

• Muốn cho ngắt nào ưu tiên thì set bit
ưu tiên của ngắt đó lên.
• Khi 2 ngắt xảy ra cùng lúc thì chuỗi
ngắt bình thường sẽ bị thay đổi
• Chuỗi ngắt là thứ tự thực hiện các ngắt
bình thường khi không có ngắt nào được
ưu tiên, thứ tự như sau: ngắt ngoài 0,
ngắt do timer 0, ngắt ngoài 1, ngắt do
timer 1, ngắt do cổng nối tiếp, ngắt do
bộ timer 2 (đối với AT89S52 trở lên)
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng






×