21-05-2008, 11:06 AM | #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 |
|
|
|