
大 学
课程设计
| 学 院(系): | 机械电子工程学院 | ||
| 专 业: | 测控技术与仪器 | ||
| 学 生 姓 名: | 学 号: | ||
| 课程设计题目: | 单片机间串行通信 | ||
| 起 迄 日 期: | 2011年1月 3 日 - 1 月 14日 | ||
| 课程设计地点: | |||
| 指 导 教 师: | |||
摘要………………………………………………………………………………………2
一 总体设计……………………………………………………………………………2
1 设计要求……………………………………………………………………………2
2 设计方案……………………………………………………………………………2
二 硬件设计……………………………………………………………………………3
1 51单片机串行通信功能 …………………………………………………………3
三 原理图和PCB图…………………………………………………………………5
四 汇编程序……………………………………………………………………………6
五 联合调制……………………………………………………………………………7
六 设计小结……………………………………………………………………………8
摘要
串行通信是单片机的一个重要应用。本次课程设计就是要利用单片机来完成一个系统,实现双片单片机间串行通信。通信的结果实用数码管进行显示,数码管采用查表方式显示。在通信过程中,使用通信协议进行通信。
一、总体设计
1.设计要求:
1.完成两台单片机间一主一从的单工通信。主机发送数据,从机接收数据并在数码管上显示。
2.完成两台单片机的全双工通信。通信双方的任一单片机可同时发送和接收数据,并将数据在各自的数码管上显示。
2.设计方案:
本次设计,单片机间的串行通信可以通过将串口相互连接而实现。单片机之间的信号都是TTL电平,并不需要特别的电平转换。单片机和单片机的串口可以直接通过导线连接,但两者的TXD和RXD需要相互反接才能正常收发。
二、硬件设计
1.51单片机串行通信功能
图1.ATC51
计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。
51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下:
(1)数据缓冲器(SBUF)
接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。
(2)串行控制寄存器(PCON)
SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:
| SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
| SM0 | SM1 | 工作方式 | 功能 | 波特率 |
| 0 | 0 | 0 | 8位同步移位寄存器(用于I/O扩展) | fORC/12 |
| 0 | 1 | 1 | 10位异步串行通信(UART) | 可变(T1溢出率*2SMOD/32) |
| 1 | 0 | 2 | 11位异步串行通信(UART) | fORC/或fORC/32 |
| 1 | 1 | 3 | 11位异步串行通信(UART) | 可变(T1溢出率*2SMOD/32) |
REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。
TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。
RB9:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。
TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。
RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。
(3)输入移位寄存器
接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。
(4)波特率发生器
波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。
(5)电源控制寄存器PCON
其最高位为SMOD。
(6)波特率计算
当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。由于是定时方式,T1计数率= fORC/12。产生溢出所需机器周期数=模M-计数初值X。
三、原理图及PCB图
四、汇编程序
两个单片机,使用同一个程序,源代码如下:
ORG 0000H
SJMP START
ORG 0003H
LJMP INT0_INT
ORG 0023H
LJMP UART_INT
;----------------------------------------
START:
MOV SP, #60H
MOV SCON,#50H ;方式1,8-n-1
MOV TMOD,#20H
MOV TH1, #0FDH ;波特率设置
MOV TL1, #0FDH ; ***************
SETB TR1
SETB IT0 ;P3.2下降沿触发中断
SETB EX0
SETB ES ;开放中断
SETB EA
SJMP $
;----------------------------------------
INT0_INT:
MOV P2, #0FFH
MOV A, P2 ;读出的拨码开关信息
; MOV P0, A ;调试的时候,可在本方显示,以证明中断正常
; JB TI, $
MOV SBUF,A ;向串口发送
RETI
;----------------------------------------
UART_INT:
JB TI, _FA_
MOV A, SBUF ;读出串口收到的信息
MOV P0, A ;送到P0口进行显示
CLR RI
RETI
;--------------------
_FA_:
CLR TI
RETI
;----------------------------------------
END
五、联合调试
首先使用KeilC将编写完成的汇编程序编译生成HEX文件,将HEX文件烧录到两片单片机中,进行仿真实验,实验结果可以看到,各自单片机的数码管已将接受到的数据完整的显示了出来。
两个单片机串行通信的实验结果如下图所示:
六、设计小结
经过繁忙而又紧张的课程设计,终于顺利的完成了设计任务。虽然在这段时间里每天都那么繁忙,但是在这忙碌的过程中却得到了许多的收获。
经过课程设计,在查阅资料的过程中,学习了基于单片机的C语言程序设计,了解了单片机串行通信的基本知识,对于以后的学习和工作都有很大的益处。
在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好,导致数据不能正确的传输,在解决问题的过程中,对于通信协议的实现有了深刻的认识。
通过这次课程设计,锻炼了自己思考的能力。
主要参考文献:
1.单片机原理与应用
2.单片机的c语言应用程序设计
