实现单片机与PC机多机通讯的程序
} //主程序 , 不断扫描串口接收到的命令 /* retval=0; //标志清零,防止重复扫描,重复执行。 2013/9/24 } /* 以上是我写的这个程序,希望大家指点一下。
}
void main()
{
PortInit(); //各端口初始化
TimerInit(); //定时器初始化
UsartInit(); //串口初始化
Send(0xce);
Send(0x7b);
Send(0x00);
Send(0xed);
while(1)
{
usart_cmd_scan(); //串口命令扫描
}
}
*函数名:usart_cmd_scan
* 描 述:串口命令扫描
* 输 入:无
* 输 出:无
* 备 注:扫描PC通过串口发送的命令
*/
void usart_cmd_scan()
{
uchar sendcmd; //下位机向PC发送的命令码
switch(retval)
{
case 1: //数据发送错误,请求PC重发
{
sendcmd=2; //向PC发送的重发数据命令,PC识别后向下位机重发数据包。
Send(0xce);
Send(0x7b);
Send(sendcmd);
Send(0xed); //向PC发送命令
break;
case 2: //数据发送成功,执行命令
{
switch(cmd) //命令解码
{
case 0x01:
{
Send(0xce);
Send(0x7b);
Send(0x11);
Send(0xed);
cmd=0x00;
break;
}
case 0x02:
{
Send(0xce);
Send(0x7b);
Send(0x12);
Send(0xed);
cmd=0x00;
break;
}
case 0x03:
{
Send(0xce);
Send(0x7b);
Send(0x13);
Send(0xed);
cmd=0x00;
break;
}
}
}
retval=0; //标志清零,防止重复扫描,重复执行。
}
}
* 函数名:Send
* 描 述:串口数据发送函数
* 输 入:sendcmd - 待发送的数据
* 输 出:无
* 备 注:
*/
void Send(uint8 sendcmd)
{
ES=0; //关闭串口
SBUF=sendcmd; //发送数据,向PC发送。
while(!TI);
TI=0; //发送完成,TI清零
ES=1; //开串口
}
程序运行整体可以,但是有个问题,也希望大神们能帮忙看一下什么问题
每次在单片机关机后,再重新上电后,发送都没反应,只有手动按下开发板的复位键后才能正常通信,当再次断电上电后,又不行了,又得按复位键才正常。
单片机PC机多机通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)