微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 实现单片机与PC机多机通讯的程序

实现单片机与PC机多机通讯的程序

时间:11-30 来源:互联网 点击:

}
}

//主程序 , 不断扫描串口接收到的命令
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发送命令

retval=0; //标志清零,防止重复扫描,重复执行。 2013/9/24
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; //开串口
}

以上是我写的这个程序,希望大家指点一下。
程序运行整体可以,但是有个问题,也希望大神们能帮忙看一下什么问题
每次在单片机关机后,再重新上电后,发送都没反应,只有手动按下开发板的复位键后才能正常通信,当再次断电上电后,又不行了,又得按复位键才正常。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top