1999年6月 JOURNALOFTIANJININSTITUTEOFTECHNOLOGY Jun.1999
文章编号:1004-2261(1999)02-057-05
Ξ
采用MAX232实现MCS-51单片机与PC机的通信
刘艳玲
(天津理工学院机械系 天津 300191)
摘要:介绍了MAX232芯片的使用,采用MAX232接口的通信电路,以及MCS-51单片机与PC机的点对点串行通信程序设计1
关键词:单片机;通信;MAX232;PC机中图分类号:TG241 文献标识码:A
TheuseofcommunicationbetweenMCS-51single
chipmicrocomputerandPCmicrocomputerwithMAX232
LIUYanling
(Dept.ofMechanicalEng.,TianjinInstituteofTechnology,Tianjin300191,China)
Abstract:ThechapterdiscussesabouthowtouseMAX232incommunicationbetweenthePCmicrocom2puterandMCS-51singlechipmicrocomputerbythepointtootherpointseriescommunicationandcom2municationprogramdesign.
Keywords:Singlechipmicrocomputer;Communication;PCmicrocomputer;MAX232
在现代工业自动化控制中,单片机的应用越来越广泛1随着应用范围的扩大和解决问题的需要,对某些数据需要进行较复杂的处理1由于单片机的运算功能较差,借助PC机来进行数据的处理已经显得尤为重要1因此,利用MCS-51单片机的串行接口与PC机的串行接口COM1或COM2进行串行通信更具实际意义1
1 串行通信
串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制位移动的1它的优点是只需一对传输线进行传送信息,因此其成本低,适用于远距离通信;它的缺点是传送速度低1
串行通信有异步通信和同步通信两种基本通信方式1同步通信适用于传送速度高的情况,其硬件复杂1而异步通信应用于传送速度在50到19200波特之间1是比较常用的传送方式1在异步通信中,数据是一帧一帧传送的,每一串行帧的数据格式由一位起始位,5~8位的数据位,一位奇偶校验位(可省略)和一位停止位四部分组成1在串行通信前,发送方和接收方要约定具体的数据格式和波特率(通信协议)1
PC机采用可编程串行异步通信控制器8250来实现异步串行通信1通过对8250的初始化编程,可以控制串行数据传送格式和速度1在PC机中一般有两个标准RS-232C串行接口COM1和COM21MCS-51系列单片机片内含有一个全双工的串行接口,通过编程也可实现串行通信功能1
Ξ
收稿日期:1998-12-07
第一作者:刘艳玲(1963-),女,讲师
© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
58 天 津 理 工 学 院 学 报 15卷
2 RS-232C标准
RS-232C是美国电子工业协会(EIA)正式公布的,在异步串行通信中应用最广的标准总线1
该标准适用于DCE和DTE间的串行二进制通信,最高数据传送速率可达19.2kbps,最长传送电缆
可达15米1RS-232C标准定义了25根引线,对于一般的双向通信,只需使用串行输入RXD,串行输出TXD和地线GND1RS-232C标准的电平采用负逻辑,规定+3V~+15V之间的任意电平为逻辑“0”电平,-3V~-15V之间的任意电平为逻辑“1”电平,与TTL和CMOS电平是不同的1在接口电路和计算机接口芯片中大都为TTL或CMOS电平,所以在通信时,必须进行电平转换,以便与RS-232C标准的电平匹配1MAX232芯片可以完成电平转换这一工作1
3 MAX232芯片简介
MAX232芯片是MAXIM公司生产的低功耗、单电源双RS232发送/接收器1适用于各种EIA-232E和V.28/V.24的通信接口1MAX232芯片内部有一个电源电压变换器,可以把输入的+5V
电源变换成RS-232C输出电平所需±10V电压,所以采用此芯片接口的串行通信系统只要单一的+5V电源就可以1
μF/MAX232外围需要4个电解电容C1、C2、C3、C4,是内部电源转换所需电容1其取值均为1
μF的去耦电容125V1宜选用钽电容并且应尽量靠近芯片1C5为0.1
MAX232的引脚T1IN、T2IN、R1OUT、R2OUT为接TTL/CMOS电平的引脚1引脚T1OUT、T2OUT、R1IN、R2IN为接RS-232C电平的引脚1因此TTL/CMOS电平的T1IN、T2IN引脚应接MCS-51的串行发送引脚TXD;R1OUT、R2OUT应接MCS-51的串行接收引脚RXD1与之对应的RS-232C电平的T1OUT、T2OUT应接PC机的接收端RD;R1IN、R2IN应接PC机的发送端TD1
4 串行接口电路
采用MAX232接口的硬件接口电路如图1所示1
现选用其中一路发送/接收1R1OUT接
MCS-51的RXD,T1IN接MCS-51的TXD1T1OUT接PC机的RD,R1IN接PC机的TD1因为MAX232具有驱动能力,所以不需要外加驱动电路1
5 通信程序设计
串行通信程序包括两方面,一方面是MCS-51单片机的通信程序,另一方面为PC机的通信程序1在编写程序之前,制定其双方通信
协议是十分重要的,否则将无法保证通信数据图1 MAX232接口电路的可靠性,从而失去通信的意义1现约定其通信协议如下:
1)串行通信波特率为1200bps1
2)帧格式为:一位起始位,八位数据位,一位可编程的第九位(此位为发送和接收的地址/数据的标志位),一位停止位1
3)设定单片机的地址码为F1H1在传送数据前先联络地址码,如地址码正确则传送数据,否则继续联络地址码1
4)无奇偶校验位1数据的通信采用累加和校验的方法,即每传送一组数据(个数自定,设为
© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
第2期 刘艳玲:采用MAX232实现MCS-51单片机与PC机的通信 59100个),校验一次累加和是否正确,正确则回送00H,否则回送FFH15)通信可以有中断传送方式和查询方式1在这里介绍查询方式通信1
6)联络方式为PC机主动联络MCS-51单片机17)PC机采用COM2通信15.1 PC机的通信程序设计
PC机的通信程序采用C语言编写1它可以直接对PC机的UART8250中各寄存器进行操作1程
序框图如图2所示1
图2 PC机通信程序框图 图3 MCS-51单片机通信程序框图
PC机的串行通信程序如下:
#include time-tT1,T2; #defineP10x2f8 /3COM2的口地址3/#defineP20x2f9#defineP30x2fb#defineP40x2fc#defineP50x2fd #defineNO100 /3个数3/FILE3p; /3文件指针3/voidunsignedsub1();voidunsignedfasong(); main(){ outportb(P3,0x80); /38250初始化3/ outportb(P1,0x60); /3波特率1200bps3/outportb(P2,0x0);outportb(P4,0x0);outportb(P2,0x0);start: inti,data〔100〕; unsignedcharSt,St1,to={0},toi,Fa,Jie,Head;unsignedcharjieshou(); © 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. 60 天 津 理 工 学 院 学 报 15卷 gotore; } } voidunsignedfasong(chardata) outportb(P3,0x2b); /3置传送地址3/if(kbhit())exit(0);/3有任意键按下退出3/sub1(); /3调发送一组字符函数3/} voidunsignedsub1() /3发送一组字符函数3/{ /3发送一个字符函数3/ { T1=time(NULL); /3读时间3/while(1) {T2=time(NULL); /3读时间3/ Fa=0xf1; while(1) { if(kbhit())exit(0);/3有任意键按下退出3/ fasong(Fa); /3发送地址3/ Jie=jieshou(); /3接收回送地址3/ if(Jie==Fa)break; /3正确则跳出3/ } outportb(P3,0x3b); /3置传送数据3/ (T.txt”))==NULL) if((p=fopen“,“r” if(difftime(T2,T1)>=1.00)/3超时,退出3/ ); { printf(″Error\\n″ return;} St=inportb(P5); /3读状态3/ if((St&0x20)!=0) /3发送缓冲器空吗?3/ { outportb(P1,data); /3发送数据3/ break; } elsecontinue; } } unsignedcharjieshou()/3接收一个字符函数3/{T1=time(NULL); /3读时间3/while(1) { T2=time(NULL); /3读时间3/ /3打开文件3/ );{ printf(″\\ncannotopenfile\\n″ exit(0); } re: to=0; for(i=0;i<=NO;i++) { data〔i〕=fgetc(p); to=to+data〔i〕; ); fasong(data〔i〕 if(difftime(T2,T1)>=1.00)/3超时,退出3/ ); {printf(″Error\\n″ } fasong(to); /3发送累加和3/ toi=jieshou(); /3接收一字符3/ if(toi==0) );/3如果相等显示OK!3/ {printf(″OK!\\n″ break;} St1=inportb(P5); /3读状态3/ if((St1&0x01)!=0) /3接收就绪吗?3/ { Head=inportb(P1);/3接收3/ fclose(p); } else { fseek(p,-NOL,SEEK-CUR);/3指针回退3/ break; } } return(Head); /3返回接收字符3/} 5.2 MCS-51单片机的通信程序设计 根据通信协议,因波特率为1200bps,现选用定时器T1作为波特率发生器,选用晶振为 12MHZ,定时器T1工作于模式2,定时器初值为0E6H1MCS-51单片机的通信程序框图如图3所示1程序如下: ORG0000H LJMPSTARTORG0080HSTART: MOVA,#20H ;定时器初始化 MOVTMOD,AMOVTH1,#0E6H MOVTL1,#0E6H MOVSCON,#0E0H ;串口初始化CLREA ;清中断CLRESCLRET1SETBTR1ACALLSUB1 © 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. 第2期 刘艳玲:采用MAX232实现MCS-51单片机与PC机的通信 61 ;调接收一组数据子程序AJMP$ ;通信结束SUB1: MOVSCON,#0E0HSETBSM2LOOP: ACALLRESUB ;个数减1不为0继续接收ACALLRESUB ;接收累加和MOVA,R0 CJNEA,20H,LOOP3 ;累加和是否相等MOVR7,#00H ;相等,回送00HACALLTRSUB AJMPLOOP4 ;转返回LOOP3: MOVR7,#0FFH ;不相等,回送FFHACALLTRSUBCLRC AJMPLOOP1 ;转重新接收LOOP4: RET ;返回 TRSUB: ;发送一个数据子程序 MOVA,R7MOVSBUF,AJNBTI,$CLRTIRET RESUB: ;接收一个数据子程序 SETBRENCLRRIJNBRI,$CLRRIMOVA,SBUFMOVR0,ARET ;调接收子程序接收地址码MOVA,R0CLRC SUBBA,#0F1H ;是否为0FHJNZLOOP ;否,重新接收地址MOVR7,#0F1H ;是,回送地址码ACALLTRSUBCLRSM2CLRTB8LOOP1: MOVDPTR,#0100H MOV20H,#00H ;累加和初值为0MOVR3,#100 ;一组个数为100LOOP2: ACALLRESUB ;调接收子程序接收一字符MOVA,R0 MOVX@DPTR,A ;存内存ADDA,20H ;累加INCDPTRDJNZR3,LOOP2 6 结 论 大多数RS-232C技术规范的目标在于提供必要的定时和电压电平以驱动损耗较大的线路传输电缆,如MC1488、MC1489组成RS-232接口,则需要±12V、+5V电源供电,使TTL和CMOS逻辑的转换匹配1MAX232芯片兼取了RS-232C的技术指标,并只需要+5V电源1为串行通信带来了可靠的性能及低廉的价格1本文介绍的通信接口电路及程序已经在《电视智能监测系统》等系统中得到了实际应用,其效果良好1参 考 文 献: 〔1〕李 泓.MCS-51系列单片机与IBM-PC微机通信技术.电子技术应用.1996,7〔2〕《MAXIM“热门”IC数据手册之六十二》.武汉力源单片机技术研究所,1994,11〔3〕李朝青编著.《单片机原理及接口设计》.北京:北京航空航天大学出版社,1994,9 © 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. 因篇幅问题不能全部显示,请点此查看更多更全内容