前面我们进行了两个单片机之间串口通信的电路设计,带有MAX232芯片的串口通信和多个单片机之间的串口通信电路设计。虽然电路有所不同,其上运行的程序却可以是一样的,只分主机和从机就行了。下面我们介绍这两个程序,先看主机程序:
程序在一开始定义了传送内容的数组和长度,共7个数,当然,长度也是7。然后是串口的工作方式定义,这个计算比较复杂,我们先看SCON的定义,见表10-2。
表10-2 通信方式控制寄存器SCON
其中的SM0、SM1就是决定工作方式的,见表10-3。
表10-3 串口工作方式
其中,UART是一种通用串行数据总线,用于异步通信。UART将接收到的并行数据转换成串行数据来传输。fosc是晶振频率,从波特率这一栏看到,方式1、3波特率是可变的,它的计算公式如下:
式中,SMOD是电源控制寄存器PCON的最高位,它控制串行通信波特率加倍,即SMOD=1时,波特率加倍;X是定时器的初值。(www.xing528.com)
因此,已知波特率、SMOD和晶振频率fosc,可以求出X,反之亦然。程序中X为F3即十进制243,SMOD=0,可求得波特率为2400。
综上所述,程序一开始就是定义串口工作方式和设置串口通信的波特率并启动定时器工作。一般情况下,常用的设置是一样的,只要照搬程序设置部分就行了。
串口通信的动作就是2种,发送数据和接收数据。程序写法也几乎是一样的,发送数据:
从以上程序可以看出,发送和接收的数据都是放在SBUF中的,发送的标志是TI,当TI为1时即发送完成,因此,TI为0时要等待,完成后仍然要把TI清零,为下一次发送作准备。同样,接收的标志是RI,当RI为1时接收完成。
以下是从机的程序:
我们看到,从机串口通信的定义与主机是一样的,多了一个REN=1,允许接收数据。接收过程与主机一致,先接收数据长度,然后根据长度循环接收数据。其余就是将接收数据存放在数据,循环显示数据。
主机和从机程序分别新建工程,生成可执行文件,调入单片机即可仿真运行了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。