单片机通过串口发送0x00,为啥串口接收后显示为80呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机通过串口发送0x00,为啥串口接收后显示为80呢相关的知识,希望对你有一定的参考价值。

是不是十六进制数据发送前还要处理吗
就是说我通过串口助手发送00给单片机,单片机接收后通过串口发送,串口助手接收后应显示为00,为什么显示为80呢
#include <reg52.h>
#define uint unsigned int;
#define uchar unsigned char;
#define ufloat unsigned float
uint flag,a,b;
void main()

TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
TR1=1;
REN=1;
ES=1;
EA=1;
while (1)

if (flag==1)

flag=0;
ES=0;
SBUF=P2;
while(!TI);
TI=0;
ES=1;






void ser() interrupt 4

RI=0;
P2=SBUF;
flag=1;

这是晶振的误差造成的,校准波特率后才能正常通信。波特率9600所对应的应该是11.0592MHz的晶振,如果是12M就会出现这个问题,我在protues仿真中把晶振频率改为11.0592M后,正常通信,没有出现错误了!这应该能帮到你! 参考技术A 你的程序收到PC的数后输出到P2,然后再读P2送到PC,P2是I/O口,不能保证你收到和发送的数据原样不动。 参考技术B 在中断服务程序中,PC发向单片机发出的数据,应该为P2=SBUF - 48,这里减去48是因为从电脑中发送过来的数据是ASCII码。。。需要转换一下,希望对你有所帮助 参考技术C TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SM0=0;
SM1=1;
TR1=1;
REN=1;
ES=1;
EA=1;

这几个的顺序调整下。
调整成
TMOD=0x20;//T1计数器工作在模式2
TH1=0xfd;//T1初始值装载,波特率为9600;
TL1=0xfd;
TR1=1;//启动T1
SM0=0;//编程SCON寄存器,使其工作在工作方式1中
SM1=1;
REN=1;//允许接收
ES=1;//串口中断开
EA=1;//总中断开
参考技术D 你的晶振是不是不对,改成11.0592

STM32 串口为啥只能接收发送的部分数据

程序BUG,或者接受缓冲的数组变量满了,不过基本上可以确定是程序问题 参考技术A 这个跟stm32没有关系,跟你的程序有关系。

以上是关于单片机通过串口发送0x00,为啥串口接收后显示为80呢的主要内容,如果未能解决你的问题,请参考以下文章

STM8s003 串口发送数据后不再接收

PIC单片机串口接收进不了中断,发送正常

电脑串口接收不到单片机发过来的数据,但是单片机可以接收电脑串口数据...

电脑串口一直接收不了单片机发送过来的数据啊...

单片机通过串口给控制器发送 16进制整数,控制灯带点亮

STM32请问串口要发送数据“1”该怎么赋值给USART->DR寄存器?