Dùng ngắt timer viết ứng dụng LED RIVER

Một phần của tài liệu HƯỚNG DẪN SỬ DỤNG KIT 8051 (Trang 45 - 47)

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;

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.

BKIT HARDWARE CLUB www.bkit4u.com 47

Một phần của tài liệu HƯỚNG DẪN SỬ DỤNG KIT 8051 (Trang 45 - 47)