我想做51单片机与电脑串口通信,实现电脑键入十进制,返回BCD码,最好是能有程序,各位大侠指点下,初学者

可以发到我邮箱[email protected]
BCD码要返回电脑显示

这里有个源码是串口发送接收数据的。

坐等悬赏分。

源码转自:《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); //返回接收到的数据
}
}
}追问

大哥,你这程序小弟没咋看懂,好像是个返回原样的程序?分来的不容易,若有高见,望指点!

追答

发送数据和接收数据可以通过 HexChar进行转换。

/******************************************************
* 函数名称: HexChar
* 输 入: 无
* 输 出: 无
* 功 能: 返回16进制值代表数字或者字母
******************************************************/
UCHAR HexChar(UCHAR ch)
{
if((ch>='0') && (ch='A') && (ch='a') && (ch<='f'))
{
return ch-'a'+10;
}
else
{
return 0x10;//这里返回什么值都没有所谓
}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-16
推荐去百度文库下载文档
单片机 C 语言程序设计实训 100 例

还有 经典书籍
Visual C++_Turbo C串口通信编程实践
Visual_Basic与_RS-232_串行通信控制
第2个回答  2011-05-16
BCD码返回到哪里?
第3个回答  2011-05-16
汇编要吗?
相似回答