1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

16 52 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 778,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• Các loại ngắt và bảng vector ngắt: Địa chỉ vector ngắt... Thanh ghi cho phép ngắt IE Interrupt Enable Register IE EA -ET2 ES ET1 EX1 ET0 EX0 Cho phép ngắt toàn cục Cho phép ngắt do p

Trang 1

NGẮT (INTERUPT)

Trang 2

Các loại ngắt và bảng vector ngắt:

Địa chỉ vector ngắt

Trang 3

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

IE

EA

-ET2

ES

ET1

EX1

ET0

EX0

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

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

Cho phép ngắt do

Timer 2

Cho phép ngắt do

Timer 1

Cho phép ngắt do

Timer 0

Cho phép

ngắt ngoài 1

Cho phép

ngắt ngoài 0

Không sử dụng

Trang 4

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

IP

Không sử dụng

Không sử dụng

PT2

PS

PT1

PX1

PT0

PX0

Ưu tiên ngắt

do port nối tiếp

Ưu tiên ngắt cho

Timer 2

Ưu tiên ngắt cho

Timer 1

Ưu tiên ngắt cho

Timer 0

Ưu tiên

ngắt ngoài 1

Ưu tiên

ngắt ngoài 0

Trang 5

Giới thiệu timer

XTAL

Cờ tràn (Overflow Flag)

TF bật lên 1 khi FFFF → 0 C/T = 0 TR

TH0 TL0

D0 D1

D2 D3

D4 D5

D6 D7

D8 D9

D10 D11

D12 D13

D14 D15

TH1 TL1

D0 D1

D2 D3

D4 D5

D6 D7

D8 D9

D10 D11

D12 D13

D14 D15

Trang 6

Thanh ghi TMOD : Timer Mode

TMOD

GATE

C/T

M1

M0

GATE

C/T

M1

M0

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

cho TIMER1

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

cho TIMER0

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

Trang 7

1 Lập trình ngắt timer

Bước 1 : Chọn chế độ hoạt động của timer như ở

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.

IE – Interrupt Enable Register

Trang 8

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

TMOD

Trang 9

Ví dụ 1:

ASM ORG 0000H

LJMP MAIN

ORG 001BH 001BH

LJMP T0_ISR

ORG 0030H

MAIN:

MOV TMOD, #0000 TMOD, #00000010 0010B; 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;

}

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).

Trang 10

Ví dụ 2:

C

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 }

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.

ASM

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T1_ISR

ORG 0030H

MAIN:

MOV TMOD, # 0001 0000B;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

Trang 11

2 Lập trình ngắt ngoài

IE – Interrupt Enable Register

+ 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

Trang 12

Kích hoạt ngắt ngoài

TCON – Timer/Counter Control Register

IT0

IE0

IT1

IE1 TR0

TF0 TR1

TF1

Bằng sườn xuống hoặc bằng mức 0 ở chân ngắt ngoài

Trang 13

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 $

EX0_ISR:

CLR P1.0

C

EX0 = 1; // Cho phép ngắt ngoài 0

EA = 1; // Cho phép ngắt toàn cục

}

void

void EX0_ISR() interrupt 0 { P1_0 = 0;

}

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.

Trang 14

ORG 0000H

LJMP MAIN

ORG 0013H 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

EX1 = 1; // Cho phép ngắt ngoài 0

EA = 1; // Cho phép ngắt toàn cục IT1 =1;

}

void

void EX1_ISR() interrupt 2 { P1_0 = 0;

}

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.

Ví dụ 2:

Trang 15

Thanh ghi ưu tiên ngắt IP

IP

D0 D1

D2 D3

D4 D5

D6 D7

Không sử dụng

Không sử dụng

PT2

PS

PT1

PX1

PT0

PX0

Ưu tiên ngắt

do port nối tiếp

Ưu tiên ngắt cho

Timer 2

Ưu tiên ngắt cho

Timer 1

Ưu tiên ngắt cho

Timer 0

Ưu tiên

ngắt ngoài 1

Ưu tiên

ngắt ngoài 0

(Interrupt Priority Register)

Trang 16

Lập trình ưu tiên ngắt

ưu tiên của ngắt đó lên.

ngắt bình thường sẽ bị thay đổi

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)

IP – Interrupt Priority Register

Ngày đăng: 23/05/2020, 11:56

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm