求教:C51串口助手接收与发送不一致!
1.首先用中断方式循环接收数据保存到数组
/********************************************
*串口数据接收中断服务
*功能:接收串口数据
********************************************/
void get(void) interrupt 4 using 0
{
unsigned char i;
if(RI)
{
for(i=0;i<16;i++) //循环接收16字节字节数据
{
while(!RI);
table[i]=SBUF;
RI=0; //清标志位
}
}
}
再将用查询法数组中的数据循环发送给电脑
/********************************************
*串口数据发送
*功能:向串行口缓冲区发送n个数据
********************************************/
void send(void)
{
for(j=0;j<16;j++)
{
SBUF=Table[i]; //将字符发送至缓冲区
while(!TI); //等待发送完成
TI=0; //清中断标志
}
}
//****************************************************
//串口中断
//****************************************************
void ser_int (void) interrupt 4
{
keyval=SBUF;//接收一个字符数据
while(!RI);//等待接收完成
RI=0;//置位接收标志位
SBUF=keyval;//发送刚刚接收到的数据
while(!TI);//等待发送完成
TI=0;//置位发送申请标志位
}
注:在串口中断内,不需要用if语句判断RI或TI
只有不适用中断方式,选用查询方式的时候,才会这么做
查询方式,是在主函数或其它函数中进行接收数据的操作
而中断方式,不管单片机原先在忙什么任务,一旦有数据到来,则立即执行接收等任务
等待部分不能省略,虽然省略不影响编译,但数据在接收或发送的时候,容易出错
甚至会导致整个程序假死
波特率问题: 发送和接收波特率不一致才会出现
多半是波特率问题
C51芯片 串口调试助手 显示乱码
利用printf函数向串口发送数据,需要先初始化串口,并设置波特率为9600。你这没有初始化,波特率未知,那肯定是乱码的。
我的这个C51程序为什么会在串口调试助手里一直出现FF
你要确定电脑的波特率,校验方式,数据位和停止位与单片机一样。如果两者不一样,则容易出现这些问题。
C51程序烧录有几种方法呢?我知道的有串口、仿真器、烧录器、编程器,还...
你说的不对,C51单片机程序烧写方法有一下几种!1 : 串口在线烧写最常用,在实验板上,勉去昂贵的编程器。2: 编程器,单片机IC烧写器支持几百种型号单片机烧写。这个是目前市场上面单片机烧写方法,你说的仿真器,仿真器不能作为你单片机烧写的量产工具,你还不明白仿真器的用法,烧录器就是编程器。
c51的串行口如何设置,怎么用吧?
这个很简单的啊,你可以下载STC89C52单片机的数据手册,看看我给你上传的附件教材,你里面有详细配置串口的细节学习,你可以把我下面的程序复制到你的keil工程里面,编译一下然后下载到单片机,你通过电脑调试助手设置波特率9600然后选择发送十六进制数据,然后显示十六进制数,你发什么数据,单片机接收到数据后在...
C51关于判断串口接收数据的C程序,就判断输入是"az"还是"aa",麻烦帮...
void main (void){ SCON = 0x50; \/\/ REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; \/\/ 定时器工作方式2 PCON|= 0x80; \/\/ 数据位8、停止位1。效验位无 (12M)TH1 = 0xFD; \/\/ TH1 = 0xFD; 波特率 9600 TL1 = 0xFD;TR1 = 1;ES = 1; \/\/ 开串口中...
C51单片机串口初始化
可以看出该串口工作在方式1,则波特率这样计算:波特率 = ((2^SMOD)\/32)*T1溢出率,这里T1溢出率 = fosc\/[12×(28-X)],则:波特率=((2^SMOD)\/32)×fosc\/[12×(28-X)]2^SMOD是2的SMOD次方,SMOD是波特率是否要加倍的控制位,默认是0,fosc就是晶振的值,X就是装入TH1的值,这里就...
C51单片机笔记(80C51的串行口)
发送与接收过程遵循严谨的时序,从发送最低位到接收最高位,通过定时器T1精确计数,确保数据的有序流动。此外,串口控制寄存器SCON中的RI和TI标志位,分别指示接收和发送数据完成,为中断处理提供了关键信号。波特率计算与常用设置<\/ 通过调整定时器T1的初值,可以计算出与波特率相对应的T1溢出率。对于方式1...
C51单片机串口初始化
这样的只要switch语句就可以解决了。在串口中断加入如下代码:void uartinterrupt(void)interrupt 4\/\/串口中断 { static unsigned char cont;\/\/接收计数 unsigned char temp;\/\/临时变量 if(ri){ ri = 0;switch(cont){ case 0:if(sbuf==0x1b){cont=1;return;}\/\/检测第一个起始码 case 1:temp...
C51如何接收和发送 串口工具 16位数据
51单片机一次只能接收1个字节数据(8位),若要接收两个字节,串口工具应该分成两字节发送。比如先发送高字节,再发送低字节。对于 100H,按十六进制发送 01 00,单片机收到第一字节数据保存起来,收到第二字节后将两个8位数合并成16位数。
C51温度采集所得数据通过串口传到PC机上,用串口调试助手显示的完整程序...
没明白你要干嘛,温度采集要看你用的是什么温度传感器,比较流行的是18B20。与PC机通讯程序STC官网有例子,直接搬来就行,定义数码管的段位会有8或9位
倪伟双黄: 如果发送接收数据的长度一致,可能是字节格式(数据位,主从位等等)的问题,需要程序中配置,如果长度不一样,可能是波特率的问题.
枣强县13423852886: 串口调试助手,接收数据与发送数据不一样,是什么原因 - ?
倪伟双黄: void ser() interrupt 4 {ri=0;//接收中断清零a=sbuf;flag=1; } 因为在发送时也会中断,多读了一次数据,中断函数 应该改为: void ser() interrupt 4 {if(ri==1){ ri=0;//接收中断清零a=sbuf;flag=1;} }
枣强县13423852886: 单片机串口通信,串口助手调试收发都正常,接到一块就不正常了 - ?
倪伟双黄: 全部并联到一起就不能正常收发?看一下串口电路吧 还有电平兼容问题 串口不能加强上拉
枣强县13423852886: 单片机发送字符串给串口助手 但是串口助手接收乱码为什么?发A接收A1,B接收A2,C接收A3,0接收80,1接收81 - ?
倪伟双黄: 1、你的串口助手显示模式切换一下试试(十六进制、字符模式) 2、波特率看看是否一致.
枣强县13423852886: 串口收发不同步 - ?
倪伟双黄: 串口 可以在缓冲区内达到指定数目的数据才发送,接收一样不知道你的 串口通信 线路情况怎么样! 所以,你这个情况应该属于正常!调试 串口程序,推荐用 虚拟串口 请看 武汉鸿伟光电?用 什么串口调试助手?微软的mscomm控件里
枣强县13423852886: 求教,为什么我的串口助手无法接收数据,可发送数据 - ?
倪伟双黄: 由于没写中断处理程序当发送完成后,触发串口中断进入0x0023地址处运行,就相当于复位了一次一样.所以会出现2次的情况.(第二次由于TI已经为1了所以不会触发中断) 解决方法 1、关闭串口中断 EA=0; ES=0; 2、写一个串口中断处理函...
枣强县13423852886: 按厂家要求设置com口,串口调试助手接收的数据跟发送的数据不一样,是乱码;com口设置的波特率设低就好点 - ?
倪伟双黄: com口的通信参数要和设备匹配;检查串口和串口线是否有问题,可以更换一个串口或串口线,或者通过其他串口软件,如格西烽火等,测试一下是否是和串口软件有关.
枣强县13423852886: 单片机串口助手中发送区的字符在接收区不显示? - ?
倪伟双黄: 程序上首先你要给相应的寄存器配置好(波特率啊,有无奇偶校验位,数据位等等),然后单片机不断检测是否接收到数据,如果接收到了数据就把接收到的数据又回发到串口助手,这样串口助手就可以显示你自己发送的数据了;如果没有接收到数据的话就让单片机继续检测.你说输入的字符怎么和程序联系起来,你要明白:单片机本来就存在一个寄存器是专门存放你在串口发送区发送的数据的,只要你在发送区一按“发送”,单品机就自动会存放在那个寄存器里面的(这一点不需要我们程序上的编写),因此,你要想在串口接收区观察你发送的数据,只需在程序上把寄存器里面的数据取出来再发送出去就OK了.
枣强县13423852886: C51如何接收和发送 串口工具 16位数据 - ?
倪伟双黄: 51单片机一次只能接收1个字节数据(8位),若要接收两个字节,串口工具应该分成两字节发送.比如先发送高字节,再发送低字节.对于 100H,按十六进制发送 01 00,单片机收到第一字节数据保存起来,收到第二字节后将两个8位数合并成16位数.
枣强县13423852886: 串口调试助手发送和接收数据乱码 - ?
倪伟双黄: 多高波特率?串口线有多远?先排除硬件问题吧.