51单片机 串口程序

51单片机 串口程序,第1张

首先要确定串口调试助手的波特率也是2400,并接收要以十六进制数显示,最好发送也以十六进制数发送。

程序没有问题,是因为发送的num1在0-255之间,而用串口调试助手的字符显示方式不是全部都能显示出来的,有一部分就是显示乱码的,而显示十六进制数就没有问题了。

定时器的初始化要放前面,为什么你打开外部中断的使能,却没打开定时器0的使能。

void Time0_Init() //定时器0

{

TH0=0xfe;

TL0=0x33;

TR0=1;

}

void main() //程序入口

{

TMOD=0x21; //定时器0和定时器1开启

PCON = 0x80;

SCON = 0x50;

TH1 = 0xfA; //设置波特率 9600

TL1 = 0xfA;

TR1 = 1; //启动定时器1

Time0_Init(); //调用定时0函数

ET1 =0; //这句多余了

ES = 1; //开串口中断

PS=1; //设计串行口中断优先级

ET0=1; //打开定时器中断

EA = 1; //开总中断

//IT0=0; //这句多余了

//EX0=1; //为什么要打开外部中断??

}

void SERIAL_HANDLE(void) interrupt 4 //串口中断函数,打开了中断就必须有

{

}

void T0_HANDLE(void) interrupt 1 //定时器0中断函数,打开了中断就必须有

{

}

我猜你的串口发送用的是轮询等待发送结束的方式,而数码管动态扫描用的是软件延时(就是for循环)吧?、、

这样串口发送很占时间——你想,如果是9600baud的话,发一字节就要1ms左右。因此这个插入的发送数据的任务会让延时函数的延时时间比预定的长很久,动态扫描就连不起来了。

改善方法有3个:

1,最简单的,在通信可靠的前提下尽可能提高串口波特率,同时降低发送频率(就是增大定时器中断周期),再把要发送的数据弄少点,能用缩写的就别写一大串。。

2,串口发送改为中断方式,这个不细说了,网上有资料。。

3,舍弃数码管扫描的软件延时,改用硬件延时(就是把数码管的位的切换也放在定时器中断里完成),保证动态扫描的及时性。这叫单片机的“前后台”编程方式,相当于将动态扫描放在了“后台”,由定时器中断来触发,不触发则不占CPU时间。

1、波特率设置错误:串口通信时,发送和接收数据的设备需要使用相同的波特率进行通讯。如果波特率设置不一致,就会出现误码。因此,需要确认发送和接收数据的设备设置的波特率是否一致。

2、硬件连接故障:电缆松动或损坏,接口连接不正常等硬件故障也可能导致串口误码。需要检查串口连接是否稳定,是否有松动现象。

3、噪声干扰:串口通信时,由于总线传输的数据通过电气信号传输,如果存在噪声干扰,就会导致误码的出现。需要使用阻抗匹配等措施来降低串口噪声干扰。

4、软件编程错误:在编写串口通信程序时,如果代码不严谨或者出现了逻辑问题,也会导致串口误码的出现。需要修改程序代码来解决这个问题。

所说的串口中断“其他中断是在I/O口低的时候产生的”是指外部中断,它是在单片机的外部I/O口电平改变的时候产生的。

而串口中断是一种内部中断,所谓内部中断,是单片机执行内部程序,由内部定时器或其他中断源触发的,通常要生成串行中断或其他中断,首先必须有中断和总中断。

例如:串行中断EA=1;//ES总中断量=1;//串行中断},那么只有在中断源事件发生时,你指的是串行中断,是当串口发送或接收完成TI和RI中断造成的定位,从微观的角度来看,它引发了内部的逻辑电路的逻辑功能。

扩展资料:

单片机定时器的工作原理及使用方法:

TMOD:控制定时器的工作方式。8位,高4位控制T1,低4位控制T0。因为计时器有四种工作方式;TMOD=0x00(工作模式0),TMOD=0x01(工作模式0),TMOD=0x02(工作模式2),TMOD=0x03(工作模式3)。

作用:

例如:在工业控制、汽车工业等领域,单片机的应用已经非常广泛,如智能仪表、实时工业控制、通信设备、导航系统、家用电器等。

通信方面,51单片机在GPS、红外、射频等方面有着非常广泛的应用。导航航空,虽然ARM已经逐渐占据主导地位,但是各个模块底层的51单片机仍在使用。

在工业控制领域,许多设备的底层控制是通过51单片机来实现的。51单片机由于仪器成本低,所以在行业中很受欢迎。汽车工业中,一辆汽车控制单片机众多,51单片机也占有一席之地

其他方面,其实作为最早的大量单片机之一,51单片机在各行各业并没有退出历史舞台,仍在发挥着作用。

51单片机只有一个累加器ACC,很多过程都需要通过ACC来完成,所以需要寄存器来保存中间结果。只能间接访问外部数据存储。

使用@dptr访问所有64k(包括您的扩展打印机、监视器、键盘等),或者使用P2和R0或R1访问某个区域。如果使用了中断,并且在中断中使用了更多的寄存器,可以交换整个寄存器组,引导隐式为0组,可以改为1、2、3组。

以上就是关于51单片机 串口程序全部的内容,包括:51单片机 串口程序、51单片机同时开启串口中断和定时器0中断的程序这样为什么错了、51单片机定时中断导致主程序数码管显示出问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9361766.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存