全局变量 vu8 RX_OK=0;,这个变量在串口收到符合要求的数据后置1
局部变量
vu8 update=1;
u8 read_out=1;
vu8 write_in=0;
u16 reset_time;
//===============start add wang 20140619=====
while(update==1){
if(read_out==1){
TxBuffer1[0]=0x01;
TxBuffer1[1]=0x03; ///读参数
TxBuffer1[2] = 0X00;
TxBuffer1[3] = 0x88; //参数地址 0x008d
TxBuffer1[4]=0x00; // 主机请求的参数,这个0x8d应该没有实际意义
TxBuffer1[5]=0x00; // 主机请求的参数,这个0x8d应该没有实际意义
TxBuffer1[6]=GetCRC16(TxBuffer1,6);
TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
read_out=0;
}
if(RX_OK==1){
reset_time = RxBuffer1[4]*256 +RxBuffer1[5];
reset_time++;
RX_OK=0;
write_in=1;
}
if(write_in==1){
TxBuffer1[0]=0x01;
TxBuffer1[1]=0x06; ///写参数
TxBuffer1[2] = 0X00;
TxBuffer1[3] = 0x88; //参数地址 0x008d
TxBuffer1[4]=reset_time>>8; // 主机请求的参数,这个0x8d应该没有实际意义
TxBuffer1[5]=reset_time&0xFF; // 主机请求的参数,这个0x8d
应该没有实际意义
TxBuffer1[6]=GetCRC16(TxBuffer1,6);
TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
write_in=0;
update =0;
}
}
上述程序执行正常,但是看门会复位
//===============start add wang 20140619=====
while(update==1){
IWDG_ReloadCounter();// ======加入喂狗,
if(read_out==1){
TxBuffer1[0]=0x01;
TxBuffer1[1]=0x03; ///读参数
TxBuffer1[2] = 0X00;
TxBuffer1[3] = 0x88; //参数地址 0x008d
TxBuffer1[4]=0x00; // 主机请求的参数,这个0x8d应该没有实际意义
TxBuffer1[5]=0x00; // 主机请求的参数,这个0x8d应该没有实际意义
TxBuffer1[6]=GetCRC16(TxBuffer1,6);
TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
read_out=0;
}
if(RX_OK==1){
reset_time = RxBuffer1[4]*256 +RxBuffer1[5];
reset_time++;
RX_OK=0;
write_in=1;
}
///加入喂狗后下边程序不 执行====
if(write_in==1){
TxBuffer1[0]=0x01;
TxBuffer1[1]=0x06; ///写参数
TxBuffer1[2] = 0X00;
TxBuffer1[3] = 0x88; //参数地址 0x008d
TxBuffer1[4]=reset_time>>8; // 主机请求的参数,这个0x8d应该没有实际意义
TxBuffer1[5]=reset_time&0xFF; // 主机请求的参数,这个0x8d
应该没有实际意义
TxBuffer1[6]=GetCRC16(TxBuffer1,6);
TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
write_in=0;
update =0;
}
}
这个是怎么回事,在线运行的时候都是正常的,但是直接运行的话加入喂狗后就不正常了?
?
使用的是IAR编译器 |