Hướng dẫn sử dụng Kit 89 Bài 5 : Dùng ngắt timer viết ứng dụng LED RIVER Mục đích: Nắm vững ngắt timer.. Sử dụng ngắt timer để viết ứng dụng LED RIVER.. Thời gian chuyển qua trạng thái
Trang 1Hướng dẫn sử dụng Kit 89
Bài 5 : Dùng ngắt timer viết ứng dụng LED RIVER
Mục đích:
Nắm vững ngắt timer
Sử dụng ngắt timer để viết ứng dụng LED RIVER
Yêu cầu:
Viết chương trình led river đơn giản, 1 led chạy từ P0.0 sang P1.1, đến P0.7 chuyển sang P3.7, P3.6 Khi tới P3.0 thì trở về P0.0 Thời gian chuyển qua trạng thái mới
là 1s
5.1 Kết nối phần cứng
Gạt switch 1 lên ON để kích hoạt Port 1 (các led đơn)
Gạt switch 2 lên ON để kích hoạt Port 3 (các led đơn và nút nhấn)
5.2 Viết chương trình
Đối với led chạy như yêu cầu, ta thấy có 16 trạng thái của P1 và P3 như sau
P0.0 sáng : P1 = 0x01, P3 = 0x00 P0.1 sáng : P1 = 0x02, P3 = 0x00 ……
P0.7 sáng : P1 = 0x80, P3 = 0x00 P3.7 sáng : P1 = 0x00, P3 = 0x80 P3.6 sáng : P1 = 0x00, P3 = 0x40 ……
P3.0 sáng : P1 = 0x00, P3 = 0x01 Như vậy, ta sẽ khai báo 2 mảng, mỗi mảng 16 phần tử cho P1 và P3, rồi cho 1 biến index tự động tăng lên sau 1s, khi index bằng 16 thì gán lại index bằng 0, để quá trình được lặp lại
Đối với led river có nhiều trạng thái hơn, bạn chỉ cần khai báo ra tất cả các trạng thái vào 1 mảng, rồi lần lượt định kì xuất nó ra
Việc delay giữa các trạng thái, ta sẽ sử dụng lại hàm delay_ms(unsigned int
duration) đã làm ở bài thí nghiệm trước
Đối với yêu cầu của bài led river này, chúng tôi chỉ sử dụng 1 mảng 16 phần tử dùng cho cả 2 Port Index của P1 sẽ tăng dần từ 0 đến 15, Index của P3 sẽ giảm dần từ 15 đến 0
//led_river : mảng 16 phần tử //INDEX_MAX = 16
//duration = 1000ms while(1)
{
P3 = led_river[INDEX_MAX - index-1];
P1 = led_river[index++];
if(index == INDEX_MAX)
index = 0;
Trang 2Hướng dẫn sử dụng Kit 89
delay_ms(duration);
}
Chi tiết code của bài thí nghiệm này, bạn xem thêm trong thư mục Bài 5 trong CD
đi kèm