c语言串口通信的接收与发送,51单片机串口通信的发送与接收

下面看一个网上的题目,以及做而论道的解答。

求一个单片机串口通信程序  悬赏分:50 | 解决时间:2011-9-19 22:39 |

求一个PC与单片机串口通信的程序,要求如下:

1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。

2、如果接收到1,则将P10置高电平,接收到0,P10置低电平。(用来控制一个LED)

单片机是STC89C52RC/晶振11.0592/波特率要求是9600或4800。谢谢!

问题补充:可能会将【$ABCD,123456,987654ccc,aasdasd,aaaa,sssd,4D】这样的字符串(字符串长度约为50-150个字符)传送给单片机,只能能原样返回。

//----------------------------------------------

最佳答案:

下列程序,已经调试成功。

#include

sbit LED = P1^0;

unsigned char UART_buff;

bit New_rec = 0, Send_ed = 1, Money = 0;

//----------------------------------------------

void main (void)

{

SCON = 0x50;   //串口方式1, 8-n-1, 允许接收.

TMOD = 0x20;   //T1方式2

TH1 = 0xFD;    //9600bps@11.0592MHz

TL1 = 0xFD;

TR1 = 1;

ES  = 1;       //开中断.

EA  = 1;

while(Money == 0);    //等着交费,呵呵,等着接收$.

while(1)  {

if ((New_rec == 1) && (Send_ed == 1))  {  //如果收到新数据及发送完毕

SBUF = UART_buff; //那就发送.

New_rec = 0;

Send_ed = 0;

} }

}

//----------------------------------------------

void ser_int (void) interrupt 4

{

if(RI == 1) {  //如果收到.

RI = 0;      //清除标志.

New_rec = 1;

UART_buff = SBUF;  //接收.

if(UART_buff == '1')  LED = 1;

if(UART_buff == '0')  LED = 0;

if(UART_buff == '$')  Money = 1;

}

else  {        //如果送毕.

TI = 0;      //清除标志.

Send_ed = 1;

}

}

//----------------------------------------------

回答时间:9-19 14:19 |

回答者: 做而论道 | 十五级采纳率:42%

提问者对于答案的评价:测试通过。感谢。

原题网址:http://zhidao.baidu.com/question/320858150.html

后记:该题目的几个答案,都不正确,丢失数据的现象比较严重,大家可以自己测试一下。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值