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

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

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

#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...

你把ea=0,看看还有没有?如果还有你把串口使能放在while()前面一行。如果还不行你把table[]去掉,给串口发一固定值,比如5?如果没有那就table[]格式问题,用值代替字符串。

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

数据丢失多半是因为中断造成的,当串口通讯时,系统被其他中断占用了,那么就会出现数据丢失的情况,所以为了保险,可以采取以下措施: 1、将串口中断优先级设为最高。 2、增加反馈信号,DTR和DSR两个信号可以用起来。

按你说的,要看你的数据长度及波特率,有可能是发送频率过快。 注意一下你的发送端的数据长度以及发送频率

bit busy=0; unsigned char i; void com_isr(void) interrupt 4 { if(RI){ RI=0;//将寄存器复位等待接收下一个 ldata=SBUF;//将接收的数据存于变量中 } if(TI)//我在定时器中断里面把ti置1,但是不行。 { TI=0; busy=1; } } main() { ...........

在程序中检测RI和TI,RI表示接收中断,TI表示发送中断,如果只要在接收中断时运行,可以如下设置: ...... JNB RI,EXIT ...... CLR RI ...... EXIT: RETI

你这是实物开发板吗?串口通信助手要显示接收的字符串,应显示字符形式,不要选择 十六进制显示。 switch(RXDBUF) 语句中用的是 case 1: case 2: 这是数值的1,2,串口助手发送时要发送十六进制数。如果发送的是字符1,2,应改成 case '1':TXD...

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

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