C51单片机如何从PC机串口接收字符串?

如题所述

我的程序的一部分,供参考

//主流程
void main(void)
{
//系统初始化
SCON = 0x50; //串口方式为1,SM2= 0,TB8= 1
PCON = 0x80; // SMOD=1
TMOD = 0x22; //设定定时器0/1的工作模式为方式2
//设置T0中断的定时时间为1/7200毫秒
TH0 = 0x00;
TL0 = 0x00;
//设置异步串口的波特率
//TH1 = 0x0f4; //OSC = 11.0592MHz bps = 4800 SMOD=1
//TL1 = 0x0f4;
TH1 = 0x0fd; //OSC = 11.0592MHz bps = 19200 SMOD=1
TL1 = 0x0fd;
//设置中断优先级,T0中断为高优先级中断,其他为低优先级中断
IP = 0x02; // 设置中断优先级--T0为高优先级,其他低

ET0 = 1; //定时器0中断
ES = 1; //串行接口中断
EA = 1; //系统中断允许

TR0 = 1; //启动定时器0
TR1 = 1;
......................

//串口接收中断处理程序
//发送采用查询处理
void SerialComm(void) interrupt 4
{
_pReceive[_cReceive] = SBUF;
_cReceive ++;
if(_cReceive >= RecBuffSize) _cReceive = 0;
RI = 0;
}

//串口发送一个字节
//senddata:需要发送的数据
void SendOneByte(unsigned char senddata)
{
ES = 0;
TI = 0;
SBUF = senddata;
while(TI == 0);
TI = 0;
ES = 1;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-22
如果51采用的是串行方式1通信的话,也是最常用的。
那么PC给51是一帧一帧传送的,一帧共10位,1位起始位(0),8位数据位,1位停止位(1)。
51的RXD检测到负跳变后,将8位数据移入SBUF,停止位进入RB8,并请求中断,这样一帧就接受了。
数据大致是这样接收的,与你所说的结束标志应该没什么关系。
第2个回答  2019-02-10
1、单片机串口不管从哪
接收数据
都是遵循串口协议的。字符串就是一个挨一个的ASKII码,中间没有加任何东西。2、不发字符串结束标志。3、回车符可以发送,但具体发不发送看你程序了。
第3个回答  2011-01-21
哈哈,这个你要多看看和单片机串口通迅有关的书,我认为,一个是要有串口线把电脑和单片机连起来,第二个是要有串口调试软件,这个在百度上搜一下,有很多的。
相似回答