用串行接口控制信号灯
一、原理:MCS-51单片机内除了4个并行接口外,还有一个串行通信I/O接口。通过这个串行接口,可以实现单片机之间以及单片机与PC机之间的通信。
进入Proteus原理图编辑环境,画出原理图。在这个图中,使用了两片ATC51单片机(U1,U2),分别构成两个单片机的应用系统(暂且用甲机和乙机表示)。图中将甲机的P3.0、P3.1交叉相连,并将两片ATC51共地,连接成一个双机通信系统。
功能:编写程序,通过甲机(使用U1单片机)向乙机(使用U2单片机)发送数据,乙机P1口所连接的8个发光二极管实现量电流。 从接图中看到,甲、乙双方只连了3根线,两根用于传输数据(将甲机内部RAM的数据送到乙机中,实际上只用其中的一根)。显然,使用这样的线路,不可能使用以前所介绍的8位数据同时传送的方
式,在一个时刻只能传送一位数据。这样就必须使用单片机的串行口。 再看图中,使用了单片机的P3.0和P3.1两个引脚。回顾一下P3口的第二功能,发现P3.0、P3.1分别是串行数据的接收端和发送端。按题目要求,甲机负责发送,乙机负责接收。
二 、编写 、汇编、运行程序 步骤如下:
(1) 在Keil中新建并保存项目,,选择CPU类型为ATC5。 (2) 因两个应用系统一个发送,一个接受,因此要分别编程。
在Keil新建文档,分别输入下面的程序:
甲机发送程序(保存为xx1.asm): ORG 0000H
LJMP START ORG 0100H
START: MOV TMOD,#20H
MOV TL1,#72H MOV TH1,#72H SETB TR1 MOV SCON,#40H MOV A,#0FEH
LOOP: MOV SBUF,A
JNB TI,$ CLR TI
RL A LCALL
DELAY
SJMP LOOP
DELAY: MOV R0,#0FFH D1: D2:
乙机接收程序(保存为xx2.asm): ORG 0000H
LJMP START ORG 0100H MOV R1,#0FFH DJNZ R1,D2
DJNZ R0,D1 RET END
START: MOV TMOD,#20H
MOV TL1,#72H MOV TH1,#72H SETB TR1 MOV SCON,#40H SETB REN
LOOP: JNB RI,$
CLR RI MOV A,SBUF MOV P1,A SJMP LOOP END
(3) 在Keil中分别对源程序xx1.asm 、xx2.asm程序进行汇编,
得到xx1.hex 、xx2.hex文件。
(4) 给CPU载入程序。这里使用了两个单片机,分别在U1的
CPU属性对话框中的Program File栏目中选中编译好的xx1.hex文件,在U2的CPU属性对话框中的Program File栏目中选中编译好的xx2.hex。
(5) 在Proteus中运行程序。单击Proteus ISIS编辑界面中的左
下角的运行键,使之处于运行状态。观擦发光二极管是否为亮点流动。
三.电路分析:(1)甲乙双方都有对定时器T 1进行编程的语句,而且双方对定时器的编程完全相同。这说明MCS-51单片机在进行串行通信时,是与定时器是有关系的。
串行通信:串行通信是指一个数据逐位顺序传送的通信方式,只要一对传输线就可以完成通信。通行线路简单,成本低,特别是数据为数较多和传送距离较远时,这一优点更为突出。但是速度比并行通信慢。
发送 计算接收 机1 计算机2或外
MCS-51单片机的串行口采用异步通信方式。在异步通信中,传送的数据之间是不连续的,是以字符为单位传送,字符间隔不固定。字符帧由发送端一帧一帧地发送,每一帧数据均为低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以有各自的时钟控制数据的发送和接受,这两个时钟彼此,互不同步。
另外在异步通信中,对数据传送的速率有一定要求,要求发送端和接收端都要与相同的波特率工作。波特率就是每秒传送二进制数码的位数,是异步通信的另一个重要指标。波特率越高,数据传送速度越快。
异异步通信不需要传送同步时钟,字符长度不受,因此设备简单。缺点是,字符中因包含起始位和停止位而降低了有效数据的传输速率。
(2)另外,程序中还有SCON、SBUF这两个特殊功能寄存器,它们的作用就是对串行口进行控制。
1.数据缓冲器SBUF
两个互相的接受、发送缓冲器SBUF,共用一个99H。也就是说99H对应着2个寄存器:发送寄存器和接受寄存器。发送缓冲器用于存放要发送的数据,只能写入,不能读出。接收缓冲器用于存放接收端的数据,只能读出,不能写入。通过辨认对SBUF的指令是“读”还是“写”来区别是对接收缓冲器还是对发送缓冲器进行操作:读SBUF,例如“MOV A,SBUF”指令,就是读接收器缓冲器的内容;写SBUF,例如“MOV SBUF,A”指令,就是修改发送缓冲器的内容。
2.串行控制寄存器SCON
SCON可用于确定串行口通信的工作方式并控制串行通信的某些功能,监视和控制串行口的工作状态,也可用于存放要发送和接收到的第九个数据(TB8、TB9)并设有接受和发送中断标志RI和TI。
在任何模式中,CPU响应中断后,都必须用软件来清除TI和RI。 在项目中,在甲机发送和乙机发送接收程序中,都有CLR指令,就是用来清除TI和RI标志的。
(3)T1、R1分别是串行口发送和接收中断标志。项目中使用了查询方式,没有采用中断方式,因此在程序中没有中断服务程序,而是在判断RI或TI置位后,进行相应的处理。
参考文献:单片机原理及接口技术 第二版 李全利 高等教育出版社