本人目前的一个项目是上位机(pc)通过串口控制51单片机检测电流、电压信号,然后将检测的数据通过串口发回pc,串口是通过单片机的IO口模拟的,波特率9600bps,当单片机仅仅从事数据的传输时能够得到正确的结果,例如上位机发'1',单片机往上发"Hello World !"。我的想法是当上位机有命令发下来时单片机才从事检测工作,其它情况下该干什么干什么。我自己写了个测试程序,主程序的主要部分如下:
while(1)
{
if(StartBitOn()) //有串口命令 负跳变
{
gch=PGetChar(); //单片机从串口获取一个字节
if(gch=='1')
PSendString(snd_string,strlen(snd_string)); //单片机网串口发字符串 "Hello World !"
else
PSendChar(gch);
}
else //没有串口命令,就从事其它工作 此处是让一个led灯闪烁
{
P1=0xfe;
delay500ms();
P1=0xff;
delay500ms();
}
}
程序我都注释清楚了。但我把程序下到单片机后,即使通过上位机串口软件发送数据,P1.0对应的led灯一直在闪烁。没有如我设想中的那样进行工作状态的转换。我看了下模拟串口的io口,单片机模拟的TXD有数据(对应的led闪烁),而模拟的RXD没有数据(对应的led不闪烁)。请问各位,怎样转换单片机的工作状态呢?单片机某时刻只能做一件事,有什么好的方式跳转工作?中断、时间片?请给小弟些指点。
|