  | 
	  | 
		 
	 
	
		| View previous topic :: View next topic   | 
	 
	
	
		| Author | 
		Message | 
	 
	
		
			weg22
 
 
  Joined: 08 Jul 2005 Posts: 91
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				| external interrupts (trouble with CCP1) | 
			 
			
				 Posted: Thu Aug 11, 2005 12:34 pm     | 
				     | 
			 
			
				
  | 
			 
			
				If I have pin B0 (my ccp pin) grounded, can someone please tell me why A2 is going high?
 
 
Thanks
 
 
 	  | Code: | 	 		  
 
#include <16F87.H>
 
#include <stdlib.h>
 
#include <math.h>
 
 
#define A2 PIN_A2
 
#define B0 PIN_B0
 
#define B1 PIN_B1
 
#define B2 PIN_B2
 
 
#fuses HS,NOWDT,NOPROTECT, PUT
 
#use delay(clock=4000000)
 
 
long rise, fall, pulseLength;
 
 
#int_ccp1
 
void isr()
 
{
 
   pulseLength=0;
 
   set_timer1(0);
 
   while(input(B0));
 
   pulseLength = get_timer1();
 
}
 
 
main() 
 
{
 
 
   delay_ms(1500);
 
 
   while(1)
 
   {
 
      setup_ccp1(CCP_CAPTURE_RE);    // Configure CCP1 to capture rise
 
      setup_timer_1(T1_INTERNAL);    // Start timer 1
 
 
      enable_interrupts(INT_CCP1);   // Setup interrupt on rising edge
 
      enable_interrupts(GLOBAL);
 
 
      if(pulseLength>1500)
 
      {
 
         output_high(A2);
 
         delay_ms(1000);
 
         output_low(A2);
 
      }
 
 
      else
 
         output_low(A2);
 
 
   }
 
} // end of main
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		
			PCM programmer
 
 
  Joined: 06 Sep 2003 Posts: 21708
  
			
			 
			 
			
			
			
			
			
			
			
  
		  | 
		
			
				 | 
			 
			
				 Posted: Thu Aug 11, 2005 2:09 pm     | 
				     | 
			 
			
				
  | 
			 
			
				The data sheet says right here,
 
 	  | Quote: | 	 		  9.1.3 SOFTWARE INTERRUPT
 
When the Capture mode is changed, a false capture
 
interrupt may be generated. The user should keep bit
 
CCP1IE (PIE1<2>) clear to avoid false interrupts and
 
should clear the flag bit, CCP1IF, following any such
 
change in operating mode. | 	  
 
 
CCS has the clear_interrupt() function, specifically for this purpose.
 
 
You need to clear the INT_CCP1 interrupt before you enable
 
global interrupts.
 
 
Also, anytime a module behaves strangely, it's almost certainly
 
because of some quirky behavior that will be explained in the
 
data sheet section on that module.   You should read it. | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
  | 
   
 
  
Powered by phpBB © 2001, 2005 phpBB Group
  
		 |