📄 458_905_test.c
字号:
}while(cd==5);
if(f920==1)
{
init_905_2_920();
}
else
{
init_905_2();
}
PIR1bits.TMR2IF=0;
TMR2=0;
T2CONbits.TMR2ON=1;//启动定时器2
do
{
RX_905();
if(PIR1bits.TMR2IF==1)
{break;}
}while(rved!=1);
if(PIR1bits.TMR2IF==1)//对方没收到
{
re_T++;
T2CONbits.TMR2ON=0;
TMR2=0;
PIR1bits.TMR2IF=0;
//continue;
}
else //对方收到
{
T2CONbits.TMR2ON=0;//停止TMR2
TMR2=0;//定时器清零
rved=0;
if(s_rv[s_bff_num][0]==0xff)
{
if(s_rv[s_bff_num][1]==t_package_num)
{
u_rcount[u_bff_num_temp]=0;
re_T=100;
PORTA=0x00;
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
}
else
{re_T++;}
}
else
{re_T++;}
}
///*
if(re_T==2)
{
//PORTA=0x02;
T2CONbits.TMR2ON=0;//停止TMR2
if(f920==0)
{
T905_jump920();
}
else
{
T905_jump915();
}
delay(1000);
re_T=1;
}//if(re_T==2)
}//while(re_T<2)
/*
if(re_T==2)
{
//PORTA=0x02;
reT_num++;
T2CONbits.TMR2ON=0;//停止TMR2
//delay(1000);
if(f920==0)
{
T905_jump920();
}
else
{
T905_jump915();
}
re_T=1;
//goto zzzz;
}
//*/
INTCONbits.INT0IF=0;
u_rcount[u_bff_num_temp]=0;
txing=0;
INTCONbits.INT0IE=1;//开外部INT0中断
}
void T905_jump920()
{
char i;
INTCONbits.INT0IE=0;//关闭外部INT0中断,防止接收ARQ信息与接收真正的数据冲突
i=0;
cd=0xff;
wnum=0;
while(i<=10)
{
i=i+1;
tx905bff[0]=0xff;
tx905bff[1]=0x00;
init_905_32();
do
{
cd=TX_905(32);
}
while(cd==5);
init_905_2_920();
PIR1bits.TMR2IF=0;
TMR2=0;
T2CONbits.TMR2ON=1;//启动定时器2
do
{
RX_905();
if(PIR1bits.TMR2IF==1)
{break;}
}
while(rved!=1);
if(PIR1bits.TMR2IF==1)//对方没收到
{
T2CONbits.TMR2ON=0;
TMR2=0;
PIR1bits.TMR2IF=0;
///*//新频道询问
tx905bff[0]=0xf0;
tx905bff[1]=0x00;
init_905_32_920();
do
{
cd=TX_905(32);
}
while(cd==5);
init_905_2_920();
PIR1bits.TMR2IF=0;
TMR2=0;
T2CONbits.TMR2ON=1;//启动定时器2
do
{
RX_905();
if(PIR1bits.TMR2IF==1)
{break;}
}
while(rved!=1);
if(PIR1bits.TMR2IF==1)//没收到询问回答信息
{
T2CONbits.TMR2ON=0;
TMR2=0;
PIR1bits.TMR2IF=0;
continue;
}
else//对方收到询问信息
{
T2CONbits.TMR2ON=0;//停止TMR2
TMR2=0;//定时器清零
rved=0;
PORTA=0x00;
//PORTA=PORTA||0X08;
init_905_32_920();
f920=1;
INTCONbits.INT0IF=0;
INTCONbits.INT0IE=1;//开外部INT0中断
return;
}//*/
continue;
}
else //对方收到
{
T2CONbits.TMR2ON=0;//停止TMR2
TMR2=0;//定时器清零
rved=0;
PORTA=0x00;
//SPI_readcon();
//PORTA=PORTA||0X04;
_asm
nop
nop
_endasm
//if(s_rv[s_bff_num][0]==0x00)
//{
init_905_32_920();
f920=1;
INTCONbits.INT0IF=0;
INTCONbits.INT0IE=1;//开外部INT0中断
return;
//}
}
}
if(i>10)
{
PORTA=0x02;
}
}
void T905_jump915()
{
char i;
INTCONbits.INT0IE=0;//关闭外部INT0中断,防止接收ARQ信息与接收真正的数据冲突
i=0;
cd=0xff;
wnum=0;
while(i<=10)
{
tx905bff[0]=0x0f;
tx905bff[1]=0x00;
i=i+1;
init_905_32_920();
do
{
cd=TX_905(32);
}
while(cd==5);
init_905_2();
PIR1bits.TMR2IF=0;
TMR2=0;
T2CONbits.TMR2ON=1;//启动定时器2
do
{
RX_905();
if(PIR1bits.TMR2IF==1)
{break;}
}
while(rved!=1);
if(PIR1bits.TMR2IF==1)//对方没收到
{
T2CONbits.TMR2ON=0;
TMR2=0;
PIR1bits.TMR2IF=0;
///*//原频道询问
tx905bff[0]=0xf0;
tx905bff[1]=0x00;
init_905_32();
do
{
cd=TX_905(32);
}
while(cd==5);
init_905_2();
PIR1bits.TMR2IF=0;
TMR2=0;
T2CONbits.TMR2ON=1;//启动定时器2
do
{
RX_905();
if(PIR1bits.TMR2IF==1)
{break;}
}
while(rved!=1);
if(PIR1bits.TMR2IF==1)//对方没收到询问信息
{
T2CONbits.TMR2ON=0;
TMR2=0;
PIR1bits.TMR2IF=0;
continue;
}
else//对方收到询问信息
{
T2CONbits.TMR2ON=0;//停止TMR2
TMR2=0;//定时器清零
rved=0;
PORTA=0x00;
init_905_32();
f920=0;
INTCONbits.INT0IF=0;
INTCONbits.INT0IE=1;//开外部INT0中断
return;
}//*/
continue;
}
else //对方收到
{
T2CONbits.TMR2ON=0;//停止TMR2
TMR2=0;//定时器清零
rved=0;
PORTA=0x00;
// if(s_rv[s_bff_num][0]==0x00)
//{
init_905_32();
f920=0;
INTCONbits.INT0IF=0;
INTCONbits.INT0IE=1;//开外部INT0中断
return;
// }
}
}
if(i>10)
{
PORTA=0x02;
}
}
//INT0输入中断 高优先级
#pragma code InterruptVectorHigh=0x08 //高优先级中断向量
void InterruptVectorHigh(void)
{
_asm
goto InterruptHandlerHigh //跳到中断程序
_endasm
}
//高优先级中断程序
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh()
{
if(INTCONbits.INT0IF==1)
{
INTCONbits.INT0IF=0;
if(txing==0)
{
//lighting_led(GREEN,5000);
SPI_read();
if(s_rv[s_bff_num][0]==0xff)//jump to 920
{
init_905_2_920();
f920=1;
PORTA=0x00;
tx905bff[0]=0x00;
do
{
cd=TX_905(2);
if(cd==5)
{
//lighting_led(COMPLETE,3000);
}
}
while(cd==5);
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
return;
}
if(s_rv[s_bff_num][0]==0x0f)//jump to 915
{
init_905_2();
f920=0;
PORTA=0x00;
tx905bff[0]=0x00;
do
{
cd=TX_905(2);
if(cd==5)
{
//lighting_led(COMPLETE,3000);
}
}
while(cd==5);
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
return;
}
if(s_rv[s_bff_num][0]==0xf0)//收到询问信息
{
if(f920==1)
{
init_905_2_920();
}
else
{
init_905_2();
}
tx905bff[0]=0x00;
PORTA=0x00;
do
{
cd=TX_905(2);
if(cd==5)
{
//lighting_led(COMPLETE,3000);
}
}
while(cd==5);
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
return;
}
if((s_rv[s_bff_num][0]<6)&&(s_rv[s_bff_num][0]>0))
{
if(r_package_num==s_rv[s_bff_num][0])
{
if(f920==1)
{
init_905_2_920();
}
else
{
init_905_2();
}
PORTA=0x00;
tx905bff[0]=0xff;
tx905bff[1]=r_package_num;
//发送ACK与已有包号
do
{
cd=TX_905(2);
if(cd==5)
{
//lighting_led(COMPLETE,3000);
}
}
while(cd==5);
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
mode_905(RX_MODE);
}
else
{
r_package_num=s_rv[s_bff_num][0];
if(f920==1)
{
init_905_2_920();
}
else
{
init_905_2();
}
PORTA=0x00;
tx905bff[0]=0xff;
tx905bff[1]=r_package_num;
//发送ACK与包号
do
{
cd=TX_905(2);
if(cd==5)
{
//lighting_led(COMPLETE,3000);
}
}
while(cd==5);
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
mode_905(RX_MODE);
s_bff_num_temp=s_bff_num;
s_bff_num++;
if(s_bff_num>=2)
{
s_bff_num=0;
}
TX_USART();
srd=1;
}
}
}
INTCONbits.INT0IF=0;
}
if(PIR2bits.HLVDIF==1)
{
PORTA=0x08;
lvd_tag=1;
PIR2bits.HLVDIF=0;
}
}
//USART接收中断,低优先级
#pragma code InterruptVectorLow=0x18 //低优先级中断向量
void InterruptVectorLow(void)
{
_asm
goto InterruptHandlerLow //跳到中断程序
_endasm
}
//低优先级中断程序
#pragma code
#pragma interrupt InterruptHandlerLow
void InterruptHandlerLow()
{
if(PIR1bits.RCIF==1)
{
//lighting_led(COMPLETE,5000);
RX_USART();
T1CONbits.TMR1ON=0;//关闭TMR1
PIR1bits.TMR1IF=0;
if(u_rnum==30)
{
u_rnum=0;
return;
}
TMR1H=0x00;
TMR1L=0x00;
if(txing==1)
{
u_rd=1;
}
if(txing==0)
{
PIR1bits.TMR1IF=0;
T1CONbits.TMR1ON=1;//启动TMR1
}
}
if(PIR2bits.HLVDIF==1)
{
lighting_led(COMPLETE,10000);
PIR2bits.HLVDIF=0;
}
}
void main()
{
turn_flash_led();
init();
t_package_num=0x00;//发送包号清零
r_package_num=0x00;//接收包号清零
rved=0;//接收到标志清零
re_T=0;//重传标志清零
txing=0;
stxing=0;
sstxing=0;
srd=0;
u_rcount[0]=0;
u_rnum=0;
s_rnum=0;
u_bff_num=0;
u_bff_num_temp=0;
s_bff_num=0;
s_bff_num_temp=0;
u_rd=0;
cd=0xff;
reT_num=0;
f920=0;
lvd_tag=0;
lvd_count=0;
while(1)
{
_asm
clrwdt
_endasm
if(lvd_tag==1)
{
lvd_count++;
PORTA=0x08;
}
if(lvd_count>=10000)
{
PORTA=0x00;
lvd_tag=0;
lvd_count=0;
}
if(init32==0)
{
if(f920==1)
{
init_905_32_920();
}
else
{
init_905_32();
}
}
if(mode905!=RX_MODE)
{
mode_905(RX_MODE);
}
if((PIR1bits.TMR1IF==1)||(u_rcount[u_bff_num]==30))
{
txing=1;
u_bff_num_temp=u_bff_num;
u_bff_num++;
if(u_bff_num>=2)
{
u_bff_num=0;
}
T1CONbits.TMR1ON=0;//关闭TMR1
PIR1bits.TMR1IF=0;
TMR1H=0x00;
TMR1L=0x00;
u_rnum=0;
//delay(500);
}
if(u_rd==1)
{
PIR1bits.TMR1IF=0;
T1CONbits.TMR1ON=1;//启动TMR1
u_rd=0;
}
if(txing==1)
{
T905();
//SPI_readcon();
}
if(srd==1)
{
srd=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -