求51的C程序,单片机与电脑互通信,要求通过电脑发送数据,后单片机接收并且反过来发送给电脑。谢谢。。
2个回答
2011-05-20
展开全部
建议楼主找找《51单片机C语言创新教程》温子祺等著,北京航空航天大学出版社的。
源码转自:《51单片机C语言创新教程》温子祺等著。
/*实验名称:串口收发数据实验
*描 述:在使用单片机的串口接收数据实验当中,
使用串口调试助手发送什么数据,
单片机采用查询法将接收到的数据返发到PC
*作 者:温子祺
*修改日期:2010/5/4
*/
#include "stc.h" //加载"stc.h"
/****************************************
*函数名称:UARTInit
*输 入:无
*输 出:无
*功 能:串口初始化
******************************************/
void UARTInit(void) //定义串口初始化函数
{
SCON =0x50; //8位数据位,允许接收
T2CON=0x34; //由定时器2作为波特率发生器
RCAP2L=0xD9; //波特率为9600的低8位
RCAP2H=0xFF; //波特率为9600的高8位
}
/****************************************
*函数名称:UARTSendByte
*输 入:byte 要发送的字节
*输 出:无
*功 能:串口发送单个字节
******************************************/
void UARTSendByte(unsigned char byte)//定义串口发送数据函数
{
SBUF=byte; //缓冲区装载要发送的字节
while(TI==0); //等待发送完毕,TI标志位会置1
TI=0; //清零发送完成标志位
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
void main(void) //主函数
{
unsigned char recv; //声明变量recv
UARTInit(); //串口初始化
while(1) //进入死循环
{
if(RI) //检测接收完成标志位置1
{
RI=0; //清零接收完成标志位
recv=SBUF; //读取接收到的数据
UARTSendByte(recv); //返回接收到的数据
}
}
}
源码转自:《51单片机C语言创新教程》温子祺等著。
/*实验名称:串口收发数据实验
*描 述:在使用单片机的串口接收数据实验当中,
使用串口调试助手发送什么数据,
单片机采用查询法将接收到的数据返发到PC
*作 者:温子祺
*修改日期:2010/5/4
*/
#include "stc.h" //加载"stc.h"
/****************************************
*函数名称:UARTInit
*输 入:无
*输 出:无
*功 能:串口初始化
******************************************/
void UARTInit(void) //定义串口初始化函数
{
SCON =0x50; //8位数据位,允许接收
T2CON=0x34; //由定时器2作为波特率发生器
RCAP2L=0xD9; //波特率为9600的低8位
RCAP2H=0xFF; //波特率为9600的高8位
}
/****************************************
*函数名称:UARTSendByte
*输 入:byte 要发送的字节
*输 出:无
*功 能:串口发送单个字节
******************************************/
void UARTSendByte(unsigned char byte)//定义串口发送数据函数
{
SBUF=byte; //缓冲区装载要发送的字节
while(TI==0); //等待发送完毕,TI标志位会置1
TI=0; //清零发送完成标志位
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
void main(void) //主函数
{
unsigned char recv; //声明变量recv
UARTInit(); //串口初始化
while(1) //进入死循环
{
if(RI) //检测接收完成标志位置1
{
RI=0; //清零接收完成标志位
recv=SBUF; //读取接收到的数据
UARTSendByte(recv); //返回接收到的数据
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
参考资料: http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/725053edc5cec62d27979143.html
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询