PDA

View Full Version : giúp em timer với


tungtot_vl
17-10-2007, 10:18 AM
vì em tự học nên đọc các bài timer của các bác trên mạng nên chưa hiểu lắm.
mong các đại ca chỉ em vấn đề sau.
có phải timer0. .. hoạt động đập lập với các lệnh trong chương trình chính không.
em thử viết chương trình ngắt bằng timer0 để điều khiển đèn nhưng làm hoài nhưng không được. cụ thể như sau: em dùng portb của 877a để điều khiển các đèn sáng lần lượt từ đèn 1 đến đèn 8. mỗi đèn delay 500ms do đó 8 đèn là 4000ms. nếu không dùng ngắt timer0 thì các đèn sáng lần lượt từ 1 -> 8. nhưng em muốn dùng timer0 để ngắt. khi tràn timer0 (3000ms) thì ngắt. tức là các đèn sáng lần lượt khi đền đèn số 6 sáng thì đúng lúc đó tràn timer0 thì reset và sáng lại từ đèn 1. thế đoạn code chương trình phải viết như thế nào hả các anh. mong chỉ hộ

bien_van_khat
17-10-2007, 11:15 AM
Để làm đèn chạy bạn có thể thực hiện như sau:
- Chương trình chính thiết lập cho ngắt, PORT, timer, và cuối cùng đứng chờ trong 1 vòng lặp vô tận (goto $);
- Trình phục vụ ngắt timer mỗi khi được thực thi sẽ tắt led trước và bật led sau sáng, xong, trả về chuơng trình chính.

tungtot_vl
17-10-2007, 03:14 PM
cái em muốn không phải là để dịch đèn bằng ngắt timer mà muốn tìm hiểu rỏ về timer và vận dụng nó để ngắt khi thực hiện 1 dòng lệnh nào đó dài vô hạng

bien_van_khat
17-10-2007, 11:04 PM
Nếu vậy thì bạn tính thời gian tràn cho phù hợp. Timer thì không reset được VDK, bạn có thể dùng watchdog để reset khi cần.

tungtot_vl
18-10-2007, 08:34 AM
watchdog thì em cũng chưa dùng. không biết nó như thế nào nhỉ. anh cho em 1 vài ví dụ đơn giản được không

ahchu
11-01-2008, 01:45 AM
Bạn cũng có thể làm như sau:
reset timer về 0, sau đó open timer và cho timer free counting cho đến một giá trị nào đó. Sau đó close timer lại và nhảy ra khỏi vòng lặp.

Đây là một cách dùng timer để đo thời gian một chu kỳ xung (đỡ phải dùng interrupt gì chi cho mệt).

- 1 timer có thể đếm từ 0 cho đến 2^8 (255 count) hay 2^16 (65535 count) (tùy theo bạn chọn cho timer đó là mode 8 bit hay 16 bit)
- Timer còn tùy thuộc vào tốc độ của thạch anh. VD: 8Mhz (crystal) --(VDK)--> Fosc = 8/4 = 2 MHz <=> T = 1/F = 0.5us => 1 instruction cycle=0.5us.

1count=0.5us => 255count= 127.5us (8 bit) hoặc là 32768us (16 bit).

Sau khi timer đếm hết bao nhiêu đó count thì nó sẽ quay lại là 0.