jkts.net
当前位置:首页 >> 51单片机串口通信出现问题 >>

51单片机串口通信出现问题

1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。 这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。 这种处理方法,就会遗漏收到的数据。 2.有人在发送数据之...

#include #include unsigned char ch; bit read_flag= 0 ; void init_serialcom( void ) //串口通信初始设定 { SCON = 0x50 ; //UART为模式1,8位数据,允许接收 TMOD |= 0x20 ; //定时器1为模式2,8位自动重装 PCON |= 0x80 ; //SMOD=1; TH1 = 0...

如果你想让串口显示0000,那么送到单片机串口的代码就应该按照ASCII码编码。ASCII码也用16进制表示。 也就是说,代码中:SBUF=i; 之前要将i转成ASCII码。 例如:0的ASCII码是30H,1的ASCII码31H,以此类推。ASCII码表百度一个吧。

肯定不会运行while(TI==0);下面的程序的,因为你的中断开着,程序跳到中断服务程序里面了,然后中断处理结束了之后,TI自动清零了,所以一直在while(TI==0);无限循环。 程序里面,既然开通了中断功能,那你就一直使用中断功能,为什么你还要使用...

中断服务程序占用时间太长,将网EEPROM写的程序放在外边,另外,需要开辟一个接收缓冲区,否则有可能丢失数据,用串口助手是没有握手的,所以PC没有多长时间的等待,你来不及接收就丢失了。

不知道你的发送值范围如果是小于16的数,那么修改如下: void send_com(unsigned char x) { SBUF=x+128; while(TI==0); TI=0; }

I2C总线是内部总线,用来连接内部系统内的芯片。比如mcu和存储器、键盘现实芯片、ad转换等等。 串口通信是用来和系统外部的设别通信的。比如设备和设备之间通信。 I2C和串口在通信协议上可以做到一样,也可做到不一样,这取决与具体的情况。 mcu...

如果收到乱码很频繁,应该是波特率误差太大所致,这有两方面原因。 1、单片机和电脑设置的波特率不一致。 2、晶振性能较差,其频率很不稳定,导致波特率误差过大。

是电脑和单片机通信吗?还是仿真? 通信乱码,原因就是波特率不相符。看你的单片机晶振的频率是多少,再看T1定时器的时间常数是多,即设置的波特率是多少。计算波特率的晶振与实际的晶振相符不? 电脑是用串口助手吗,波特率又是多少。电脑和单...

你这里的难点在于"只发送一次",可以定义一个标志变量初始为0,当P1.1=0时且标志为0,向串口发送一个数据,并置该标志为1,即使P1.1依然为0也不会一直发送;当检测到P1.1=1时,置标志为0,以便下次再触发。其他依此类推。

网站首页 | 网站地图
All rights reserved Powered by www.jkts.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com