Nguyên lý điều khiển ngắt ngoài

Một phần của tài liệu Lập trình 8051 siêu chi tiết (Trang 62)

Ngắt ngoài có 2 loại : Ngắt cạnh và ngắt mức.

Ø Ngắt cạnh cũng có 2 loại : ngắt cạnh lên xảy ra khi có sự chuyển tín hiệu từ mức thấp lên mức cao ở chân ngắt ngoài. Tương tự ngắt cạnh xuống xảy ra khi có sự chuyển tín hiệu từ mức cao xuống mức thấp.

Ø Ngắt mức cũng có 2 loại : ngắt mức cao và mức thấp. Ngắt mức cao xảy ra khi tín hiệu tại chân ngắt ngoài ở mức cao trong tối thiểu 1 chu kì.

Trong vi điều khiển P89V51RB2, hỗ trợ 2 loại ngắt ngoài : ngắt cạnh xuống và ngắt mức thấp. Việc cấu hình cho ngắt ngoài dựa vào bit ITn trong thanh ghi TCON.

10.2 Kết nối phần cứng

Hai ngắt ngoài được mắc vào nút nhấn, tại chân P3.2 là ngắt ngoài 0 và P3.3 là ngắt ngoài 1.

Gạt switch 4 lên ON để kích hoạt led 7 đoạn.

10.3 Viết chương trình

Module ngắt ngoài khá đơn giản, gồm các hàm khởi tạo được khai báo trong file ext_int.h :

void init_ext_int0(); void init_ext_int1();

Các hàm này được hiện thực trong file ext_int.c cùng với 2 hàm phục vụ ngắt ngắt ngoài. Code xử lý trong bài mẫu này khá đơn giản, chỉ là việc cộng và trừ biến count rồi dùng biến này để hiển thị giá trị tương ứng ra led 7 đoạn.

10.3.1 Hàm init_ext_int0()

void init_ext_int0() {

IE &= ~(0x01);// enable external interrupt 0 IE |= 0x01; IT0 = 1; } 10.3.2 Hàm init_ext_int1() void init_ext_int1() {

BKIT HARDWARE CLUB www.bkit4u.com 63

IE |= 0x04; IT1 = 1; }

10.3.3 Hàm ext0_isr()

Đây là hàm phục vụ ngắt ngoài 0.

void ext0_isr() interrupt 0 {

//Add your code here if(count<9)

count++; }

10.3.4 Hàm ext1_isr()

Đây là hàm phục vụ ngắt ngoài 1.

void ext0_isr() interrupt 1 {

//Add your code here if(count>0)

count--; }

Bài 11 : Điều khiển encoder

Mục đích:

Hiểu được nguyên lý hoạt động của encoder. Nắm vững kĩ thuật điều khiển encoder bằng ngắt ngoài.

Yêu cầu:

Xây dựng chương trình đọc số xung encoder và hiển thị giá trị ra led 7 đoạn. (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Lập trình 8051 siêu chi tiết (Trang 62)