PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-10-2007, 10:18 AM   #1
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
giúp em timer với

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ộ
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2007, 11:15 AM   #2
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Để 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.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2007, 03:14 PM   #3
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
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
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2007, 11:04 PM   #4
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
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.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-10-2007, 08:34 AM   #5
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
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
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-01-2008, 01:45 AM   #6
ahchu
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 23
:
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.
ahchu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 09:40 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam