课程设计报告书课程名称:MCS-51单片机课程设计题目:单片机与PC机之间的通信姓名:高永强学号:010700830学院:电气工程与自动化学院专业:电气工程与自动化年级:2007级指导教师:张丽萍目录1.引言与系统结构 (2)2.硬件实现2.1.AT89C52 (2)2.2.MAX232芯片 (3)2.3. 9针串口 (5)3.虚拟串口调试 (7)4.Proteus仿真原理图及元件清单 (14)5.软件设计 (15)6.主程序代码 (16)7.心得体会 (18)8.参考文献 (18)1.引言与系统结构:利用PC 机配置的异步通信适配器,可以方便的完成PC 机遇89C52单片机的数据通信。
由于89C52单片机输入、输出电平为TTL 电平,而PC 机配置的是RS-232标准串行接口,二者的电器规范不一致,因此采用MXA232单芯片 实现89C52单片机于PC 机的RS-232标准接口通信电路。
如今,在很多场合中,要求单片机不仅能独立完成单机的控制任务,还要能与其他数据控制设备(单片机、PC 机等)进行数据交换。
串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,比如可以很直观地把红外遥控器键值的数据码显示在电脑上,可以使编写红外遥控程序时方便不少,起到仿真器的某些功效。
89C52有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL 电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND.第2脚的RXD.第3脚的TXD 。
图1 系统结构2.硬件实现:2.1.AT89C52:AT89C52是51系列单片机的一个型号,它是ATMEL 公司生产的。
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
图2 AT89c52引脚图2.2. MAX232芯片:是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,适用于各种EIA-232C和V.28/V.24的通信接口。
MAX232芯片的功能: MAX232内部有一个电源电压变换器,可以把输入的+5V电源电压变换成为RS-232C输出电平所需的±10V电压。
所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。
对于没有±12V电源的场合,其适应性更强图3 MAX232芯片引脚图4中,上半部分的的电容C1,C2,C3,C4以及V+,V-是电源变换电路部分。
在实际应用中,器件对电源噪声很敏感。
因此,VCC必须要对地加去耦电容C5,电容C1,C2,C3和C4取同样数值的钽电容,用以提高抗干扰能力。
在连接时必须尽量靠近器件。
下半部分为发送和接收部分。
实际应用中T1IN和T2IN 可直接接TTL/CMOS电平的89C52单片机的串行发送端TXD;R1OUT和R2OUT 可直接接TTL/CMOS电平的89C52单片机的的串行接收端;T1OUT和T2OUT可直接接PC的RS-232串口的接收端RXD;R1IN和R2IN直接接PC的RS-232串口的发送端TXD。
图4 MAX232典型工作电路图2.3.9针串口:一个完整的RS-232接口是一个25针的D 型插头座,25针的连接器实际上只有9根连接线,所以就产生了一个简化的9针D 型RS-232插头座,常用的就是一个9针的D 型插头座。
EIA-RS-232C 对电器特性、逻辑电平和各种信号线功能都作了规定: 在TxD 和RxD 上:逻辑1(MARK)=-3V ~-15V 逻辑0(SPACE)=+3~+15V在RTS 、CTS 、DSR 、DTR 和DCD 等控制线上: 信号有效(接通,ON 状态,正电压)=+3V ~+15V 信号无效(断开,OFF 状态,负电压)=-3V ~-15V介于-3~+3V 之间的电压无意义,低于-15V 或高于+15V 的电压也认为无意义。
因此如果要进行通信,还要对信号的电平进行转换,比如使用MAX3232芯片来转换电平。
使用串口进进行通信时,我们最主要关心的时以下这三个引脚:输入输出RS-232输入V CCC C C 45 GND2 RXD3 TXD要完成数据的发送与接收就必须要到上面这三个引脚。
而其它引脚是用来控制传输规则的,即握手协议。
下面是9针串口(DB9),引脚功能。
引脚号缩写英文全称功能说明1DCD Data Carrier Detection数据载波检测2RXD Receive Data接收数据3TXD Transmit Data发送数据4DTR Data Terminal Ready数据终端准备5GND System Ground信号地6DSR Data Set Ready数据设备准备好7RTS Request to Send请求发送8CTS Clear to Send清除发送9RI Ring Indicator振铃指示图5 九针串口引脚功能图6 protues串口图我们还要注意串口插座有公母两种类型其中:公的串口插座是带有插针的 (有针) 母的串口插座是不带有插针的(有洞).3.虚拟串口调试:单片机和Proteus 虚拟串口调试,就是我们不需要实际的串口进行调试,只需要用protues加串口,在加串口调试助手就行了。
写好单片机串口程序加载到protuse仿真里,这边串口调试助手就有反应。
比如我们的程序是单片机通过串口发送数据C到电脑,然后串口调试助手就回接收到C。
也可以有单片机接收数据串口调试助手发送数据。
3.1.设置虚拟串口(如图)图7开始界面3.2.然后按add pair 添加串口,添加了COM3和COM4,执行后如下图图8 添加串口3.3.我们启动虚拟串口调试软件图9 启动3.4.打开自己的仿真图。
图10仿真图单片机的RXD连接COMPIN的RXD,单片机的TXD连接COMPIM的RXD。
3.5.设置COMPIM的属性图11设置COMPIM的属性我们需要关心的是 Physical port、Physical Baud Rate、Virtual Baud Rate 这三个栏目,特别是波特率的值一定要与源文件(C程序)规定的值一定,比如我们这里是 9600则就是因为源文件中设置的就是 9600,在这里我们一定要选择好 COM3,默认是 COM1。
设置完成这个界面如上图。
3.6.我们需要把串口号和波特率设置,串口号一定记住在COMPIM中我们设置成了 COM3,在这里要设置成 COM4 才行,我试了 COM3 是不出现的。
波特率一定要与 COMPIM的波特率设置成一样的。
设置如下图。
图12串口号和波特率设置用的时候记得打开串口。
3.7. Keil的设置图13 Keil的设置我们最好改成11.0592M图14晶振设置还有就是Protues里也要做相应设置成11.0592M3.8.所有准备工具均已经完成,现在开始运行仿真图15 终端接收到的数据图16 串口调试小助手接收到的数据3.9.调试原程序#include <reg52.h>#include<stdio.h>void delay1ms(){unsigned int i;for(i=500000;i>0;i--); //延时}Initial_com(){TMOD=0x20; //定时器T1 PCON &= 0xef; SCON=0x50;TH1=0xfd; //波特率设置为9600TL1=0xfd;TR1=1; //开定时器T1运行控制位}main(){Initial_com();while(1){SBUF='c';while(!TI);delay1ms();delay1ms();TI=0;}}4.Proteus仿真原理图:图 17 原理图形元件清单:极性电容 C3 C4 C5 C6 容值为1uf 无极性的电容 C1 C2 容值为1ufAT89c52一片max232一片9针串口(母)12MHz 晶振5.软件设计:图18 程序流程6.主程序代码:#include <reg52.h> unsigned char butter; void send();void receive();void main(){PCON=0x80;SCON=0Xd0;TMOD=0X20;TH1=0Xfd;TL1=0Xfd;TR1=1;TI=1;while(1);receive();send();}void send(){if(TI==1){ SBUF=1; TI=0;}}void receive() {if(RI==1) {ACC=SBUF;butter=ACC; RI=0;}}7.心得体会:通过这次课程设计,更加深入理解了PC与单片机的串行通讯。
通过硬件的焊接与调试,增强了动手能力,懂得如何更好的排线,避免短路,将知识用于实践。
当在调试过程中出现问题时,学会了如何一一排除错误,例如,刚刚开始的时候我在cpu的发送端发现有波形,而通过max232后波形却消失了或者变的很不规则,这种情况下只能不断的检查电路,最后发现时max232的接地端没接好。
还有就是当max232输出端有信号了可是串口却收不到数据,我用排除法一一排查问题的原因,首先max232输出端有信号而串口收不到数据我将pc的串口的2,3脚接在一起并且发给个数据发现串口有接受数据,那么pc串口没问题,那么问题只能出现小板上,通过检查发现还是接地不好,所以通过这次课设让我了解怎样进行调试,怎样使实验达到最好的效果,学会了如何使用资料自学,更加深入的了解一些课堂上学不到的知识。