|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2013-4-7 22:47:27
|
显示全部楼层
bit Uart_RecvFlag; //liyang add on 2013.4.1
volatile unsigned char rx_time=0; //liyang add on 2013.4.3
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
Uart_RecvFlag=0;
if(!Uart_RecvFlag)
{
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_counter]=data;
if(data!=addr)
Uart_RecvFlag=1;
else
Uart_RecvFlag=0;
rx_counter++;
}
}
rx_time=2 ; //定时
}
/**********************
发送:68 AA 68 11 02 02 01 75 16
68+电表地址(1)+68+命令字(1)+长度(1)+数据标识(2)+校验码(1)+16
返回:68 AA 68 11 08 02 17 08 98 01 F4 04 36 77 16
68+电表地址(1)+68+命令字(1)+长度(1)+数据标识(2)+A(2)+B(2)+C(2)+校验码(1)+16
**************************/
// 测试485通信
if(rx_time!=0) rx_time--; // 判断数据接收是否结束
if((rx_time==0)&&( rx_counter!=0))
{
if(rx_buffer[3]==0x11) //命令0x11读测量值
message_is_read();
rx_counter=0; //指针复位
Uart_RecvFlag=1;
} |
|