编辑: 元素吧里的召唤 | 2019-07-02 |
系统设计 1.1 设计要求 设计一个通信模块,现实上位PC与下位机单片机之间的通讯,通讯协议使用RS-232协议. 具体要求是(1)结合硬件能够正常单向发送;
(2)能够正常接收发送字符串;
(3)能够正常显示所接收的字符;
(4)能够自动对接收或发送的字节数进行计数;
(5)能够手动设定波特率. 1.2 设计原理 串口是计算机上一种非常通用设备通信的协议,串口通信协议也可以用于获取远程采集设备的数据.串口按位(bit)发送和接收字节,尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.串口通信很简单并且能够实现远距离通信,对于串口而言,长度可达1200米. 典型地,串口用于ASCII码字符的传输,通信使用3根线完成:①地线,②发送,③接收.由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据.串口通信最重要的参数是波特率、数据位、停止位和奇偶校验.对于两个进行通行的端口,这些参数必须匹配. 51单片机有一个可编程全双工的串行通讯口,具有UART的全部功能,所以单片机和电脑之间可以方便地进行串口通讯.电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,可以采用专用芯片MAX232进行转换.TTL电平的
1 为2.4~5V,
0 为0~0.4V;
RS232电平的
1 为-15~-5V,
0 为+5~+15V,为负逻辑电平.要实现PC机与单片机通信,就必须先将TTL电平和RS232电平之间进行转换. 1.3 方案论证 1.3.1 总体思路 1.3.2 设计方案 先初始化串口和设置默认波特率,然后等待串口的中断,同时动态扫描数码管显示所要显示的数据.当串口中断触发时,对接收获发送的字符数进行计数并对字符进行处理,将字符映射到自己定义的数码管段码,以进行正常的显示.当片外中断触发时,重新设置波特率发生器的初值,并改变在数码管上显示的波特率数值.波特率的设置采用状态机实现,这样可以循环的设置波特率. 2.模块电路的设计 TTL与RS232电平转换电路 3.开发平台简介 单片机系统开发板由学院老师研制,具有丰富的接口与资源.能够进行基础的单片机实验,也能进行部分单片机设计的开发.这次的实训用到了最小单片机系统和多位数码管,能非常方便地进行实训的调试. 4.开发软件及编程语言简介 4.1 Keil软件 Keil软件是目前最流行开发MCS-51系列单片机的软件,提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起.同时可以作为单片机C语言和汇编语言的开发环境,可以完成编辑、编译、连接、调试、仿真等整个开发流程.开发人员可用IDE本身或其它编辑器编辑C或汇编源文件,然后分别由C51及A51编译器编译生成目标文件(.OBJ).最后可以生成HEX文件,烧录到目标芯片中. 4.2 编程语言 单片机汇编语言能够允许开发人员直接对单片机的寄存器及地址进行操作,但是汇编程序的可读性较差.由于编程跟底层硬件关系紧密,程序的移植性不够好. 单片机C语言是现在较为流行的单片机编程语言,编译器能够对程序进行优化,以提高程序的运行效率,同时程序的移植性较好.C语言的规则和可读性为众多编程人员所接受,同时对产品的开发提高效率. 5.心得体会 通过串口通讯实现与仿真实训,对于串口通信的理解较深了一层.在搜索资料的过程中,横向了解了串口通信在工业控制中的重要性.串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制.由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用.另外用串口方式通信,对于单片机紧缺的I/O资源来说,能够节约更多的I/O口. 目前由PC机作上位机而单片机作下位机的控制系统或数据传输系统已网络化,两者在异步通信中波特率的设定是一个首要解决的问题.如果设置不当会造成通信失败或不正常而无法实现数据交换,而无法控制系统或使网络瘫痪,因此设置合适的波特率是一个极其重要的问题.刚开始计算波特率时,没有考虑到实际波特率与标准波特率的误差太大而造成通信不正常. 由老师的指点及查阅的资料,知道PC机中的标准波特率有时候不能完全兼容单片机的波特率,比如实训所用的开发板上的晶振是24MHz,算出来的波特率基本上不是标准的.单片机采取近似标准的波特率,与PC机异步通信的波特率误差最大不超过5%,就能实现正常通信.对于常用的8位、9位和11位一帧的串行传送,其最大的波特率允许误差值分别为6.25%,5.56%和4.5%.在波特率不加倍时,根据9600bps算出来的实际波特率误差太大,最后改用加倍方式,算出的波特率才能正常通信. 在进行调试时,发现动态扫描数码管时还有残影,这是因为直接更新显示会留有原来LED的余辉,使得数码管有淡淡的红色,字符的显示不清晰.解决的方法是在显示字符之前,先把数码管熄灭,以消除数码管的残影,然后再进行一段时间延时,完全显示字符. 另外,从这次实训中,我还意识到工程观念的重要性.在完成一个设计的程序设计时,应该按文件至少按函数进行管理,并根据编程的规范严格要求自己,为今后的编程养成良好的习惯.我觉得这一点的认识胜过了对于一般知识的掌握. 6.参考文献 [1] 喻宗泉,等.单片机原理与应用技术.西安:西安电子科技大学出版社,2006 [2] 张培仁,等.基于C语言编程MCS-51单片机原理与应用.北京:清华大学出版社,2003 [3] 刘文涛.单片机语言C51典型应用设计.北京:人民邮电出版社,2005 7.程序和PCB * FileName: uart_baud.c * Description: Implementation of SerialPort * Author: ChenYinhua, GUET-2006 * Version: 1.0 * Date: 2009-03-03 * Platform: AT89S52(Atmel), KeilC51(ver:7.06) * Contact: [email protected] * * All Rights Reserved #include typedef unsigned char uchar;