PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   đo độ rộng xung với timer1 (http://www.picvietnam.com/forum/showthread.php?t=7140)

agreement 09-10-2010 10:38 AM

đo độ rộng xung với timer1
 
1 Attachment(s)
chào các bạn. mình muốn sử dụng chức năng capture để đo độ rộng xung rồi chuyển lên LCd, nhung kq nhận được luôn là 0. Mọi người xem và giải đáp giùm. thanks!
[code]
#include <16F877.h>
#use delay(clock=10000000)
#fuses HS,NOWDT
#include <lcd.c>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7


int overflow_count;
unsigned int32 start_time, end_time;
int32 pulse_ticks;

#int_TIMER1
void TIMER1_isr()
{
++overflow_count; //increment whenever an overflow occurs
}

#int_CCP2
void CCP2_isr()
{
end_time = CCP_1; //read captured timer ticks
start_time = CCP_2; //read captured timer ticks
//check for pulse time (in ticks) accounting for anyoverflow that may have occurred
pulse_ticks = (0x10000 * overflow_count) - start_time + end_time;
overflow_count = 0; //clear overflow counts

}

void main() {
setup_ccp1(CCP_CAPTURE_FE);
setup_ccp2(CCP_CAPTURE_RE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);//set timer1 to run at system clock/4
enable_interrupts(INT_TIMER1); //unmask Timer1 overflow interrupt
enable_interrupts(INT_CCP2); //unmask capture event interrupt
enable_interrupts(global); //enable all unmasked interrupts

while(1){
LCD_init();
printf(lcd_putc,"\rdo rong: %u", pulse_ticks); }
}
[code]


Múi giờ GMT. Hiện tại là 07:27 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam