|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
29-12-2017, 10:12 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Dec 2017
Bài gửi: 1
: |
Ứng dụng Capture của timer1
Em có chương trình viết để đọc giá trị timer1 khi có xung chân CCP1(RC2). Theo em biết, khi có xung xuống ở chân RC2 thì giá trị timer 1 sẽ được lưu vào thanh ghi CCPR1L (biến CCPRL). Nhưng em cho hiển thị LCD thì giá trị chỉ từ 0 - 255. Mà timer 1 lại là timer 16 bit, giá trị đếm từ 0-65535. Chương trình của em có đúng không ạ? Nếu đúng tại sao giá trị timer1 chỉ từ 0-255 ạ?
Code CCS: #include <16f877a.h> #fuses noput,hs,nolvp,nobrownout,noprotect #use delay(clock=20M) #define LCD_ENABLE_PIN PIN_D2 #define LCD_RS_PIN PIN_D0 #define LCD_RW_PIN PIN_D1 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <lcd.c> #byte CCPRL = 0x15 #byte CCPRH = 0x16 #bit CCP1IF = 0x0c.2 long int count = 0, i; int c1,c2,c3,c4,c5; void main(){ set_tris_c(0xFF); setup_CCP1(CCP_CAPTURE_FE); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(0); lcd_init(); CCPRL = 0; CCPRH = 0; while(1){ count = CCPRL; i = count; c1 = i/10000; i = i%10000; c2 = i/1000; i = i%1000; c3 = i/100; i = i%100; c4 = i/10; c5 = i%10; lcd_gotoxy(1,1); lcd_putc("c="); lcd_gotoxy(5,1); lcd_putc(c1+48); lcd_gotoxy(6,1); lcd_putc(c2+48); lcd_gotoxy(7,1); lcd_putc(c3+48); lcd_gotoxy(8,1); lcd_putc(c4+48); lcd_gotoxy(9,1); lcd_putc(c5+48); if(CCP1IF == 1){ count = CCPRL; i = count; c1 = i/10000; i = i%10000; c2 = i/1000; i = i%1000; c3 = i/100; i = i%100; c4 = i/10; c5 = i%10; lcd_gotoxy(1,1); lcd_putc("c="); lcd_gotoxy(5,1); lcd_putc(c1+48); lcd_gotoxy(6,1); lcd_putc(c2+48); lcd_gotoxy(7,1); lcd_putc(c3+48); lcd_gotoxy(8,1); lcd_putc(c4+48); lcd_gotoxy(9,1); lcd_putc(c5+48); } } } |
|
|