|
80黑币
各位大佬们帮忙看下,如图是接收引脚波形(自定义协议发射的),数码管单独配置输出是可以点亮的,目前我想测试下接收到的数据,接收到就全部点亮,结果发现不能点亮,帮忙看下是不是解码部分有问题。
void main(void)
{
GPIO_INIT();
DISI();
Timer0_INIT();
ENI();
while(1)
{
CLRWDT();
if(POWER==0)
{
flag1=0;
PIN1=PIN2=PIN3=PIN4=PIN5=PIN6=PIN7=PIN8=PIN9=PIN10=0;
if(K1_SDA==0)
{
WDTEN=0; // 关闭看门狗
BWUCON = 0X08;
PCON1 = 0X80; // 关闭定时器0中断
INTE = 0X02; // 打开io变化中断
INTF=0;
while(RX==0)
{
SLEEP();
}
K1_SDA = 1;
POWER=1;
ABPLCON = 0XFF;
IOSTA = 0XFD;
PORTA = 0X00;
BPHCON = 0XFF;
IOSTB = 0XFF;
PORTB = 0X00;
T0MD = 0X02; // 打开看门狗
PCON1 = 0X81; // 打开定时器0中断
INTE = 0X01; // 关闭外部中断打开定时器0中断
Timer1_INIT();
WDTEN=1;
CLRWDT();
}
}
else
{
CLRWDT();
/*
if(lvd==11)
{
if(flag1==0)
{
if(PWM_C<3)
{
if(PWM_H1<1000){lvd=11;}
else if(PWM_H1<2000){PIN9=PIN10=1;}
else{PWM_H1=0;PWM_C++;}
}
else
{
flag1=1;
}
}
if(flag1==1)
{
POWER=0;
}
}
else
{
if(temp==1){PIN9=1;}
display();
LED_SCAN();
}
*/
des_sever();
if(temp==1)
{
IOSTA = 0X00;
IOSTB = 0X08;
PIN1=PIN2=PIN3=PIN4=PIN5=PIN6=PIN7=PIN8=1;
PIN9=PIN10=0;
}
//display(temp);
//LED_SCAN();
}
}
}
void isr(void) __interrupt(0)
{
if(INTFbits.T0IF)
{
RfDuty_32Bit();
TMR0 = 163;
INTF= (unsigned char)~(C_INT_TMR0); // Clear T0IF flag bit
}
if(INTFbits.T1IF)
{
if(RX){DIR_InCont++;}
INTF= (unsigned char)~(C_INT_TMR1); // 清除T0IF标志位
}
}
//------------------------------------------解码-------------------------------------//
void RfDuty_32Bit(void)
{
if(IR_State==0)
{
DIR_InCont=0;
T1CR1=0x03;
IR_State=1;
}
else if(IR_State==1)
{
IR_Timer=DIR_InCont;
DIR_InCont=0;
if((IR_Timer >= 20) && (IR_Timer <= 30))
{
IR_State=2;
}
else
{
IR_State=1;
}
}
else if(IR_State==2)
{
IR_Timer=DIR_InCont;
DIR_InCont=0;
if((IR_Timer >= 4) && (IR_Timer <= 8))
{
IR_Data[IR_pData/8]&=~(0x01<<(IR_pData%8)); //0
IR_pData++;
}
else if((IR_Timer >= 10) && (IR_Timer <= 14))
{
IR_Data[IR_pData/8]|=(0x01<<(IR_pData%8)); //1
IR_pData++;
}
else
{
IR_pData=0;
IR_State=1;
}
if(IR_pData>=16)
{
IR_pData=0;
RX_NUM=IR_Data[0];
RX_LVD=IR_Data[1];
T1CR1=0x02;
IR_State=0;
}
}
}
void des_sever(void)
{
//unsigned char dsp_code[14]={0X3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0xF0,0X1F,0XFF};//0111 0111
if(RX_NUM==0x01){temp=1;}
else if(RX_NUM==0x02){temp=10;}
else if(RX_NUM==0x03){temp=2;}
else if(RX_NUM==0x04){temp=3;}
else if(RX_NUM==0x05){temp=4;}
else if(RX_NUM==0x06){temp=5;}
else if(RX_NUM==0x07){temp=6;}
else if(RX_NUM==0x08){temp=7;}
else if(RX_NUM==0x09){temp=8;}
else if(RX_NUM==0x0A){temp=9;}
else if(RX_NUM==0x0B){temp=10;}
if(RX_LVD==0x01){lvd=11;}
else if(RX_LVD==0x02){lvd=12;}
else if(RX_LVD==0x03){lvd=12;}
else if(RX_LVD==0x04){lvd=0;}
else if(RX_LVD==0x05){lvd=8;}
else if(RX_LVD==0x60){lvd=13;}
}
//------------------------------------------定时器-------------------------------------//
void Timer0_INIT(void)
{
PCON1 = C_TMR0_Dis;
TMR0 = 0;
T0MD = C_PS0_TMR0 | C_PS0_Div4;
INTE = C_INT_TMR0 | C_INT_TMR1;
PCON1 = C_TMR0_En;
}
void Timer1_INIT(void)
{
TMRH = 0;
TMR1 = 97; //50us
T1CR1 = 0x02;
T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div4;
INTE = C_INT_TMR0 | C_INT_TMR1;
}
|
最佳答案
查看完整内容
RfDuty_32Bit();应该用RX脚的下降沿来触发,而不是定时器
|