定时中断,中断采样时间和波特率一样
中断程序的代码
// 接收数据代码段 接收部分分为几个状态
/*状态 0:高电平查找中 1:起始位查找中 2:接收数据中 10:停止位已接受 11:接收完成 5:接收成功
*/
if ( flag_rx_off==FALSE )//打开接收功能
{
switch(simuart1_rx_status)
{
case 0://是高电平吗?是高电平进入下一个步骤
simuart1_rx_start_bit=get_rx_pin_status();
if (simuart1_rx_start_bit==1 )
{
simuart1_rx_status=1;
}
else
{
simuart1_rx_status=0;
}
break;
case 1://起始位查找中
simuart1_rx_start_bit=get_rx_pin_status();
if (simuart1_rx_start_bit==0 )
{
simuart1_rx_status=2;//找到起始位,进入下一个步骤
}
else
{
simuart1_rx_status=1;
}
break;
case 2://接收第0位
simuart1_rx_qout=0x00;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 3://接收第1位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 4://接收第2位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 5://接收第3位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 6://接收第4位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 7://接收第5位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
case 8://接收第6位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 9://接收第7位
simuart1_rx_qout<<=1;
simuart1_rx_mask=get_rx_pin_status();//接收一个bit
simuart1_rx_qout |=simuart1_rx_mask;
simuart1_rx_status++;
break;
case 10://接收停止位
simuart1_rx_stopbit=get_rx_pin_status();//接收一个bit
if (simuart1_rx_stopbit==1)
{
simuart1_recv_sucess_flag=1;//停止位接收成功,置位接收成功标志
}
else
{
simuart1_recv_sucess_flag=0;//接收失败
}
simuart1_rx_status=0;//重新进入接收状态
break;
default:
break;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>