![]() |
|
|
#2 | |
|
Đệ tử 6 túi
Tham gia ngày: Mar 2007
Bài gửi: 150
: |
Trích:
vd : giả sử cứ 1us timer đế lên 1 , vậy thì khi timer 1 tràn no sẽ đếm được 65535 um =65,535ms=0,065535 s . Vậy để xác định thời gian ngắt thì chỉ việc xác định timer đếm bao nhiêu thôi đúng ko? Bây giờ là cách xác định đây . Thời gian đếm lên của timer phụ thuộc vào chu kỳ lệnh của vi điều khiển . chu kỳ lệnh bằng bao nhiêu thì thời gian định thời của timer củng như vậy . Nếu thạch anh 4M thì chu kỳ lệnh của VDK =1um . Bậy giờ muốn 1s thì timer ngắt , nghia la sau 10^6 um . timer 1 phải ngắt , nhưng timer1 thì ko thể đếm đến 10^6. vậy ta phai sử dung chế độ prescale 1:8 . nghia la cứ 8 chu kỳ lệnh timer1 mới đếm lên 1 .. ==> 8*65535 = 524280 us . Code:
#int timer1
void ngat_timer1()
{
set_timer1(24280); // mặc định giá trị ban đầu cho timer la 24280 .
dem++; // timer 1 tràn sau ==> 500 000 us = 0.5s
if(dem==2) // 2* 500 000 =1s
{
...................// thực hiện hành động ;
dem=0;
}
}
void main
setup_timer1(T1_INTERNAL|T1_DIV_BY_8); // cho timer 1 chay ở chế độ timer.Bột chia 8
set_timer1(24280) ; // mặc định số đếm ban đầu cho timer1 la 24280.
enable_interrupts(int_timer1); // cho phép ngắt timer 1
enable_interrupts(global); // cho phép ngắt toàn cục
while(true)
{
.............
}
__________________
_________________________________________________ Le Trung Duc Industry Research & Application Center NTT Institute of Hi_technolog ltduc@ntt.edu.vn leduc_cktd@yahoo.com.vn http://www.nttc.edu.vn CNC DIY : http://quangcaosanpham.com/shop/driverservo 0909300332 |
|
|
|
|
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|