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

作者&投稿:载狄 (若有异议请与网页底部的电邮联系)
C51单片机如何从PC机串口接收字符串?~

1、单片机串口不管从哪
接收数据
都是遵循串口协议的。字符串就是一个挨一个的ASKII码,中间没有加任何东西。2、不发字符串结束标志。3、回车符可以发送,但具体发不发送看你程序了。

我只能给你子程序,仅供参考


IE=0x90;//打开中断总开关及串口中断
SCON=0x50;//设定串行口工作方式1,允许接收
TMOD=0x20;//设定时器1,自动装载,产生破特率
TH1=0xfd;//破特率为9600
TR1=1;//启动定时器1
PCON=0x80;//定义SMOD,

发送

while(RI==0)//RI==1;
{
;//等待数据发送完毕
}
RI=0;//手动清零


发送

void disf(unsigned int y)
{
unsigned char i;
DAT[3]=y%10; // ===7
DAT[2]=(y/10)%10; //==8
DAT[1]=(y/100)%10; //==9
DAT[0]=y/1000; //=1
for(i=0;i<4;i++)
{
SBUF=DAT[i];
while(TI==0); //等待数据发送完毕
TI=0; //手动清零
}
}



接收

while{disp();}//无限循环


四位字符,发送

while(key==0);
disp(1949);
for(i=0;i<4;i++)
{
SBUF=DAT[i];
while(TI==0);//等待数据发送完毕
TI=0;//手动清0
}


四位字符,接收 用串口中断

void ck_js() interrupt 4
{
unsigned char i;
for(i=0;i<4;i++)
{
while(RI==0);//等待数据接收
RI=0;//手动清零
DAT[i]=SBUF;//接收到的字符存放
}
}


多位字符 接收函数

void seri_int() interrupt 4
{
count1=0;
if(RI)
{
unsigned int count2=10000;
while(1)
{
flag1=1;
while(!RI)
{
if(count2==0)
{
RI=0;
break;
}
count2--;
}
dat1[count1]=SBUF;
count1++;
RI=0;
}
}
}

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

//主流程
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;
}

如果51采用的是串行方式1通信的话,也是最常用的。
那么PC给51是一帧一帧传送的,一帧共10位,1位起始位(0),8位数据位,1位停止位(1)。
51的RXD检测到负跳变后,将8位数据移入SBUF,停止位进入RB8,并请求中断,这样一帧就接受了。
数据大致是这样接收的,与你所说的结束标志应该没什么关系。

1、单片机串口不管从哪
接收数据
都是遵循串口协议的。字符串就是一个挨一个的ASKII码,中间没有加任何东西。2、不发字符串结束标志。3、回车符可以发送,但具体发不发送看你程序了。

哈哈,这个你要多看看和单片机串口通迅有关的书,我认为,一个是要有串口线把电脑和单片机连起来,第二个是要有串口调试软件,这个在百度上搜一下,有很多的。


用C语言编写一51单片机程序,做单灯的左移右移,按P1.0——P1.7再从P1.7...
p1.0、p1.1,都是控制 led 的?试试下面的程序:include sbit led = p1^0;sbit key = p1^7;void main(){ while(1)led = key;} p1.1,不知道怎么用。

MCS-51单片机的P0、 P1、 P2、 P3口有哪些功能?如何使用这些功能?
P1口 只做I\/O口使用:其内部有上拉电阻。P2口有两个功能 1、扩展外部存储器时,当作地址总线使用 2、做一般I\/O口使用,其内部有上拉电阻;P3口有两个功能 除了作为I\/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。有内部EPROM的单片机...

如何读取51单片机P1.1的低电平信号,及对其计数,最好是C语言程序_百度...
这很容易的,51单片机的每一个I\/O引脚都是可以独立读写的,所以,是可以独立读取P1.1的低电平的。当读取到低电平就循环等待,当恢复成高电平就计数。然后再读取低电平,如此循环。不想查询方式,可以把P1.1与P3.2连接一起,利用INT0中断计数就更方便了。

51单片机如何产生8路PWM波
void TIME0_ISR(void) interrupt 2 { t1++;if(t1==f) p00=~p00;if(t1==f) p01=~p01;if(t1==f) p02=~p02;if(t1==f) p03=~p03;if(t1==f) p04=~p04;if(t1==f) p05=~p05;if(t1==f) p06=~p06;if(t1==f) {p07=~p07; f=0;} } 当然这只是简单的用51...

51单片机,P2口位选,P0口锻选,利用查表方式如何在P2.0显示数字0呢?
如果数码管是共阴的,0的字形码是3FH,如果是共阳极的,0的字形码是40H,对于共阴的数码管,P2口,送0F0H,P1口送3FH,接线是P0口的八个口,从P0.0到P0.7依次接数码管的ABCDEFGH(H为小数点位)要有上拉电阻,P2口的低四位分别接四个数码管的千百十个位就可以了,至于共阳极的数码管,接线方式...

STC51单片机中PCON寄存器怎么用呀
在STC51单片机中,PCON寄存器的GF1和GF0位被视为通用工作标志位。这些位通常不被单片机系统使用,因此留给了用户以便自由配置。例如,以下代码片段展示了如何使用这些标志位:1. 将数值NUM0移入累加器A,并清除CS位。2. 将数值NUM1移入累加器A,并再次清除CS位。3. 将累加器A中的值移至GF1位,并...

给51单片机下程序接哪几个引脚
1. 对于STC芯片,程序下载是通过串口进行的,具体连接到51单片机的P3.0和P3.1引脚。2. 对于AT芯片,使用ISP下载方式,连接到单片机的P1.5、P1.6、P1.7引脚以及复位引脚。3. 当使用USB下载器时,连接过程简化。下载器的VCC引脚连接到单片机的VCC,下载器的GND引脚连接到单片机的GND,下载器的RXD...

51单片机p1口驱动三极管问题
芯片p1.6口 直接连接的npn三极管的b级, c级接gnd E级连接继电器一个接口 继电器上面的接口接的vcc;这个表述与所配电路图不符;端口的驱动能力看的是灌电流和拉电流的大小,电流越大自然表现为驱动能力越强;图示可知,PIO口的输出能力是在输出低电平时,就是管子饱和导通时的灌电流会很大,通常都...

怎么用proteus来仿真51
用proteus来仿真51的步骤:工具\/原料:Proteus,keil c51 1、首先我们打开Proteus软件,点击左边菜单栏的P按钮,然后再搜索框里输入80c51,选择第一个就是80c51单片机;2、然后在搜索框里面输入led,找到Optoelectronics,然后再里面选择LED-RED,红色的led,当然其他颜色也可以;3、接着我们点击鼠标右键可以...

关于51单片机的外部中断使用方法
使用方法:单片机的P2.5,P2.6,P2.7口分别接三位动态数码管的位选端,P0口接动态数码管的段选端。然后,P1.0口接一个电阻串联一个LED灯然后接地,电阻取200~470欧之间就行,是一个限流电阻。中断用的是外部中断0,要触发中断的时候,就用一根杜邦线一端接地,一端接到单片机的P3.2口就行...

宣汉县15979844010: C51单片机如何从PC机串口接收字符串? -
茆倪倍舒: 1、单片机串口不管从哪 接收数据 都是遵循串口协议的.字符串就是一个挨一个的ASKII码,中间没有加任何东西.2、不发字符串结束标志.3、回车符可以发送,但具体发不发送看你程序了.

宣汉县15979844010: 如何用c语言编程实现c51单片机中从串口接收一个字符串? -
茆倪倍舒: 可以的,定义一个缓冲区(数组)接收,到时单片机把字符串顺序处理一下就行了,一般/n来代表字符串的结束标志.

宣汉县15979844010: 跪求51单片机通过串口接受PC机发来的字符串的代码, -
茆倪倍舒: 单片机串口接收字符串的,根据接收到的字符串调用串口中断 void Com_Int(void) interrupt 4 { //当硬件接收到一个数据时,RI会q

宣汉县15979844010: 如何用c语言编程实现c51单片机中从串口接收一个字符串?
茆倪倍舒: 如果用中断方式接收的话,只能接收单个字符.而如果用查询方式的话,接收字符串占用的时间真太长了,整个CPU将陷入一个长期无法工作的状态,按照波特率为19200来算,接收一个字符的时间是573微秒,十个字符的话就是5.73毫秒了,系统无法正常工作.建议用中断接收单个字符.

宣汉县15979844010: 51单片机 ,串口要想从电脑接收到一个字符'1' 用串口调试助手要发送个什么,急急急!!!急急急!! -
茆倪倍舒: 取消16进制勾选,发送1就行了

宣汉县15979844010: 51单片机怎样与PC机进行串口通信 具体步骤是什么?? 往PC机里面发送数据用什么接收?? -
茆倪倍舒: 单片机与PC之间可以 通过串口进行通信,. 简单的,直接用串口调试助手就行了 复杂的需要自己开发PC上的应用软件

宣汉县15979844010: 单片机用串口发送给PC机的数据用什么接收???? PC机怎么接收?? -
茆倪倍舒: 单片机用串口发送 或 接收 数据,PC机用串口接收 或 发送 数据.现在有的 PC 机没有 串口(可以用 USB 转换 为串口 )接收 或 发送.单片机 通过 编程 可以 实现 发送 或者 接收 数据,PC 机 可以通过 串口调试软件 或者 用 VB 等等软件 编程 实现 接收 或者 发送 显示 等等.

宣汉县15979844010: 51单片机怎么接收电脑发送的16位数据 -
茆倪倍舒: 51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的. 电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可. 你可能会疑问,要是第一...

宣汉县15979844010: 51单片机用串口跟pc通信进行收发数据 -
茆倪倍舒: //代码来自 单片机小精灵v1.3//波特率9600 11.0592晶振 方式2#include <reg51.h> void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } void SendOneByte(unsigned char c) { SBUF = ...

宣汉县15979844010: 关于51单片机如何接收串口的大量数据 -
茆倪倍舒: 这要看你这个大量有多大了,连续接收数据一般都是开辟一个缓冲区,而缓冲区是受内部寄存器空间限制的,最大256个(52单片机),还不能全用做缓冲区,得留下工作寄存器去,位地址也得留下一些,堆栈也得留下一些,所以这些因数都需要考虑到.如果不开辟缓冲区得话,接收后就处理,可能有丢失一些数据的可能.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网