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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 16-05-2011, 11:39 PM   #4
alycuong
Đệ tử 1 túi
 
Tham gia ngày: Apr 2010
Bài gửi: 16
:
Trích:
Nguyên văn bởi LeDuc View Post
Theo mình để dễ dàng thì bạn nên hiểu như thế này , timer 1 la timer 16 bit nghia la no co thể đếm từ 0 đến 65535 . Khi đếm hết nó sẽ quay lại từ đầu là 0 , và lúc đó sẽ xảy ra ngắt .
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)
 {
   .............
  }
Em thấy chỗ set giá trị cho timer1 sai thì phải, chổ này theo e tính toán thì phải là: set_timer1(3035);

(65535 - 3035)*1us*8 = 500000us
alycuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 08:23 AM.


Đượ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