کد:
#define max_size 25
int i;
char ch[9];
int pulse=0;
unsigned long key=0;
int ar[max_size];
bit flag;
void init();
void interrupt(void);
void main()
{ TRISC=0x04;
UART1_Init(19200);
Delay_ms(100);
UART1_Write_Text("Start\r\n");
Delay_ms(2000);
init();
while(1){
if(pulse>4000){ //Preamble
for(i=0;i<max_size;i++){
while(!flag);
ar[i]=pulse;
while(flag);
}
PIE1.CCP1IE=0;
T1Con.TMR1ON=0;
key=0;
for(i=1;i<max_size;i++){
if(ar[i]>50 && ar[i]<=300)
key=(key<<1)|(0x00000001);
else if(ar[i]>300 && ar[i]<=800)
key=key<<1;
else
ar[i]=2;
}
LongWordToStr(key,ch);
UART1_Write_Text(ch);
UART1_Write(13);
Delay_ms(2000);
TMR1H=TMR1L=0x00;
PIE1.CCP1IE=1;
}
}
}
void interrupt(void)
{ INTCON.GIE=0;
if(PIR1.CCP1IF){
if(flag){
T1CON.TMR1ON=1;
flag=0;
CCP1CON=0x05;
}
else {
T1CON.TMR1ON=0;
TMR1L=TMR1H=0x00;
pulse=CCPR1H;
pulse=pulse<<8;
pulse|=CCPR1L;
flag=1;
CCP1CON=0x04;
}
PIR1.CCP1IF=0;
}
INTCON.GIE=1;
}
void init(){
TMR1L=TMR1H=0x00;
INTCON.GIE=0;//GIE: Global Interrupt Enable bit
INTCON.PEIE=1;//PIE: Peripheral Interrupt Enable bit
flag=1;
CCP1CON=0x04;// 0100 = Capture mode, every falling edge
// 0101 = Capture mode, every rising edge
TRISC=0x04;
T1CON=0x10; //Do not synchronize external clock input
//TMR1ON: Timer1 On bit
PIE1.TMR1IE=0;
PIR1.TMR1IF=0;
PIR1.CCP1IF=0;//Clear CCP Interrupt Flag
PIE1.CCP1IE=1;//Enable CCP1 Interrupt
INTCON.GIE=1;//GIE: Global Interrupt Enable bit
}