View Single Post
Old 16-07-2008, 06:44 PM   #5
linhnc308
Đệ tử 5 túi
 
Tham gia ngày: Oct 2005
Bài gửi: 117
:
Smile

Trích:
Nguyên văn bởi dark_electron View Post
Hi bác,
Bác có thể cho em một cái ví dụ về quét LED bằng ngắt timer ko? Bác nói sơ sơ về giải thuật cũng được ko cần phải post nguyên chương trình đâu. Em mới tập tễnh vào nghề lập trình PIC nên cũng noob. Cám ơn bác trước.
Code cho PIC tôi hay dùng C (CCS Compiler). Quét kiểu timer nó như sau:

main:
- KHởi tạo cho các Port IN/OUT tương ứng
- Khởi tạo Timer(chọn chế độ chạy clock) + ngắt Timer, thời gian timer chạy đến lúc ngắt chính là thời gian Led sáng. ví dụ 2ms
- Khởi tạo các biến
- Cho phép ngắt timer chạy
- main loop: thực hiện các công việc khác theo yêu cầu lập trình

Ngắt timer:
- tắt Led
- Gửi Data của Led kế tiếp
- Cho Led sáng
- Reset timer
- Thoát

Về cơ bản như vậy, còn đây là sample code:
Code:
#int_RTCC
void  RTCC_isr() 
{
   Num_Timer0_INT++;
  // Printf("\nINT %d",Num_Timer0_INT);
   if (Num_Timer0_INT == 13) // 10*13.1ms ~ 500ms. Update Led
   {
      disable_interrupts(INT_RTCC);
      ClearLed(); // Tat Led
      Send_595(led7[DispBuffer[NextLed]]); // Gui data
      SelectLed(NextLed);// Cho Led sang
      Num_Timer0_INT = 0;
      set_timer0(0); // Reset timer
      enable_interrupts(INT_RTCC);
   }
}
Code:
void main()
{
// Khoi tao In/Out
   delay_ms(100);
   output_a(0xff);
   set_tris_a(0b011110001);
   set_tris_b(0x03);   
   output_low(PIN_B7);
// Setup Analog   
   setup_adc_ports(sAN0);
   setup_adc(ADC_CLOCK_INTERNAL); // ADC_CLOCK_INTERNAL
// Setup Timer   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); // Timer 0, overflow 204uS @ 20MHz
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
// Cho phép ngắt
   enable_interrupts(INT_RTCC);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);   
while (TRUE)
 {
// Chương trình xử lý chính
 } // End of While
}// En dof Main
__________________
CallerID, Ethernet-RS232, PICWEB, Cảnh báo BTS
Giải pháp toàn diện giám sát - điều khiển từ xa qua GSM/Internet
0988006696

http://linhnc308.blogspot.com
linhnc308@gmail.com
linhnc308 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn