ความคิดเห็นที่ 2
#if defined(__PCM__) #include <16F877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#elif defined(__PCH__) #include <18F452.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) #endif
long rise,fall,pulse_width;
#int_ccp2 void isr() { rise = CCP_1; fall = CCP_2;
pulse_width = fall - rise; // CCP_1 is the time the pulse went high } // CCP_2 is the time the pulse went low // pulse_width/(clock/4) is the time
// In order for this to work the ISR // overhead must be less than the // low time. For this program the // overhead is 45 instructions. The // low time must then be at least // 9 us.
void main() { printf("\n\rHigh time (sampled every second):\n\r"); setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall setup_timer_1(T1_INTERNAL); // Start timer 1
enable_interrupts(INT_CCP2); // Setup interrupt on falling edge enable_interrupts(GLOBAL);
while(TRUE) { delay_ms(1000); printf("\r%lu us ", pulse_width/5 ); } }
จากคุณ :
[email protected]
- [
9 ธ.ค. 49 08:30:49
A:200.200.200.104 X:124.121.124.177
]
|
|
|