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