原创 基于MODEM的单片机与PC机间的远程通信

2009-8-13 11:28 2671 4 4 分类: MCU/ 嵌入式

来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain


摘要:公用电话网技术成熟、覆盖范围广,利用现有的化用电话网来实现单片机与PC机远程通信是一种非常有效的方法。本文详细介绍利用现有公共电话网实现8098单片机与远程PC机之间数据通信的硬件、软件设计和实现方法。


j0kE8J%h'yH&Z!L-?;n0 电子园51单片机学习网3a3e @ A+Q;r5|


    关键词:单片机 PC机 通信 调制解调器


TgRY:X2Y0 电子园51单片机学习网t3SS6~r;J{;g


随着计算机技术、通信技术的发展和成熟,数据通信已经成为一种广泛应用的通信方式,它是利用通信系统将数字、字母及字符等以二进制形成在计算机之间进行传输、交换和处理。数据通信可以在两台及以上PC机之间、PC机与单片机之间以及单片机之间进行,通过通信通道如公用电话网、载波通道、光绺通道、微波通道、卫星通道将两机联结。目前,单片机以其高性能价格比、高可靠性广泛用于自动监视、测量、控制等技术领域。单片机主要用作从机,安装在监视、测量和控制现场,而PC机则用作主机,安装在条件优越的环境(如温度和温度适合、几乎无干扰源)中。单片机与PC机之间利用公共电话网通过调制解调器MODEM实现远程数字通信,其原理框图如图1所示。在实际中,PC机和单片机之间通信距离近的小于1km,远的可达上千km。电子园51单片机学习网w b)k yAd2_ h!Y


&Rea"fs9qv P0本文将详细介绍8098单片机与PC机通过MODEM利用共用电话网实现远程通信的硬件结构,以及程序设计和实现方法。


$tT+u6d*g9K0 电子园51单片机学习网*}7b"d"}a,B


1 PC机串行通信结构


$E zTW!OW/X_?-l0 电子园51单片机学习网0f9p_0_Y8|


PC机与单片机之间的通信一般采用串行异步通信方法。在PC机中设置四个(COM1、COM2、COM3、COM4)或两个(COM1、COM2)符合RS-232C接口标准的串行口(以下均以两个串行口来说明)。其中COM2为25针的连接器,COM1为9针的连接器。6136_200904071938421xNIY.gif电子园51单片机学习网#o(xG Wc


电子园51单片机学习网w g AH`


PC 机为实现异步通信,设置了通用异步接收器和发送器,即:UART通过编程可以设定通信格式和速度。PC机中UART的电平为TTL电平,而串行口的电平为 RS-232C的电平,为此PC机发送出去的数据要经电平转换器(如1488)转换为RS-232C电平;PC机接收的数据要经电平转换器(如1489)转换为TTL电平。PC机串行通信的硬件结构如图2所示。电子园51单片机学习网3ahyWRG6U#hr$o


(}MO)|1K g7?f `02 单片机串行通信结构


PE\3{w0 电子园51单片机学习网{vj:^%R ^T


在单片机中,一般只设置一个25针或9针连接的串行口,由于单片机8098中的电平为TTL电平,为了要经过RS-232C实现异步通信,也要用一片 1488和两片1489来进行电平转换。单片机串行通信的硬件接口如图3所示。请求发送信号(RTS)和数据终端就绪信号(DTR)由单片机8098经 8255的A口送出去。清除发送CTS、数据设备就绪DSR、载波检测DCD和振铃指示RI由8255的B口送入8098。电子园51单片机学习网!b{B@x


X/R']*K!Rgy03 单片机与PC机之间的硬件接口


dX/yVsY@~0 电子园51单片机学习网7EdM-@HzJo]


当单片机与PC机距离很近时(15m以内),它们之间的数据通信可以通过其串行口以3线或多线直线相连;不距离很远(几十公里上升公里)时,可以利用调制解调器MODEM通过共用电话网来实现数据通信,这时单片机与PC机之间的硬件接口如图4所示。


OR7At/[-D"r+Npl7F0


'U%UC8Zz-`'}04 软件设计与实现


x;|Sn LLH k0


f ^&Ld.W.^T8i3X7rb0下面以PC机呼叫单片机或单片机应答PC机为例来说明程序的设计。


#f!_G&a'kSDV0


Ff,s Y }*h04.1 PC机的程序设计


;~FUY+q0


1mZ&o W2E4GnF.T0程序框图如图5所示。电子园51单片机学习网n6XBn@e e;Tz5M


zM{Ls7a"}0a.初始化


3}|G.^ n-d's*]0


U(Z@+w@P0为了实现异步串行通信,在PC机中要对其异步发送接收器UART进行初始化,以决定PC机异步串行通信的数据格式、传输速率、控制方式等。其程序如下:电子园51单片机学习网*q2X g(t|_Rj._


电子园51单片机学习网;GS1z;l#WL


outportb(COMU+30,OX83) /*使DLAB=1*/6136_2009040719384227YQQ.gif电子园51单片机学习网;r a4[o z8x-Ct


OVL(eeT I?0outportb(COMU,OX60) /*波特率=1*/电子园51单片机学习网LYb cprxd


1J&d+RsI0outportb(COMU+1,OX00)电子园51单片机学习网D-K:@ NMK(zS


电子园51单片机学习网$m~-fH!CM/| g


outportb(COMU+3,OX03) /*数据格式*/电子园51单片机学习网)t)TCwGuV


电子园51单片机学习网y j!x a wD


outportp(COMU+4,OX03) /*禁止MODEM循环反馈*/电子园51单片机学习网(_.Q7zlC0{ d_6l


电子园51单片机学习网$kn%F4H.v7YEE


outportb(COMU,OX00) /*禁止中断*/电子园51单片机学习网)GN@ N},a-s:SS


!Y k2v!aRK0注:COMU为串行口端口地址


4h%ANI%P2P-{0 电子园51单片机学习网sQ c"SnJ*D


b.初始化MODEM


G8IaF?5Q0lP I0


[(~2E4n:mzf8eA#q0初始化MODEM程序如下:电子园51单片机学习网3R$rz(b.X-r-J:|T,SE f


电子园51单片机学习网"uN9V$H0\n


{ int key,i;


A(qTfp G4E0 电子园51单片机学习网Shr FX-Z []}


char *at1=“ATZ”;电子园51单片机学习网/K VC i-Y]o[ e


N8t\z yfm7w;m~"ul0char *at2=“ATE1Q0V1L3X4S0=1”;电子园51单片机学习网6fPr'i&t ]


电子园51单片机学习网cM$r Q7V`D'}


for(i=0,i<=3;i++)


(]\ Jqjvw;S0 电子园51单片机学习网?kD]'e5P$p


{


1H:d&R,k6c!iN^0 电子园51单片机学习网^#H m:wH.GO


if(i<=2)key=at1; /*发出at命令*/


%J:d^6CwT6lnD'X uz0


x2MJoVz0if(i= =3)key=0x0d; /*确认码*/电子园51单片机学习网"dn7\ Xb.GE


电子园51单片机学习网R-x I*D A


outportb(COMU,key); /*发出数据*/


@6K|wqf7n+l0 电子园51单片机学习网8r7E e(N Q/`6zy


delay(100); /*延时100mS*/


RI)h \6v?(_9dn"P0 电子园51单片机学习网*[C)cD9t$o


}


/LZV`6l"G A0 电子园51单片机学习网A7b#Yi YJ/k


delay(1000); /*延时1000mS*/


2@b4pAe N0 电子园51单片机学习网(c,_ bf-U


for(i=0;i<=0;i+ +)电子园51单片机学习网]q*c YaX snz


8v&GBw2t$u'y|0if(i< =15)key=at2;电子园51单片机学习网#D`r ?/Z4x3B\4l


电子园51单片机学习网6Mv co"] A


if(i= =16)key=0x0d;电子园51单片机学习网0q8SC e9[*A


电子园51单片机学习网u6a[wfB)I)e L$|


outportb(COMU,key);6136_200904071938423C22o.gif电子园51单片机学习网X+w{:L:D.nBZA


电子园51单片机学习网Lw+e\#~*B


delay(100);


aW/K4N;|4}0


$z*Sf%B rL{)h{&u0}电子园51单片机学习网}f} HJ


电子园51单片机学习网6{%\ Zb$G0P


delay(1000);


}4L }"hC fA C7I0 电子园51单片机学习网3FK1PB u


}电子园51单片机学习网T|D5c)T s


电子园51单片机学习网I,|-lS:gz


c.拨号


k7Q#eJ4d0


[Q4[;m@9a0PC 机要实现与单片机进行数据通信,首先通过近程MODEM拨打单片机的电话号码如38459620。PC机首先发出命令如at+h0e1v0x2& c1dt,然后发出电话号码,最后再发出确认码0x0d。PC机通过串行口向近程MODEM发送命令或数字,每次只能送出一个字符或数字,而MODEM接收并响应需要一定的时间,故PC机每发出一个字符或数字都要延时100ms。当确认码发出后还要延时1000ms,然后检测由近程MODEM反馈回PC机的回响码。若回响码为OX35则转入数字接收及处理程序,否则继续检测回响码。程序如下:


^Ec_E%a%A ^4O;?0 电子园51单片机学习网+WW Fx!?.p o u


“ath0q0v0l3x4&c1&d2dt”;/*取info结构中的电话号码*/


9h[I1N2h-Q3v Y0 电子园51单片机学习网&F2eeWQ,v1p1sY


char str="info-" >telephoneno;/*电话号码位数*/电子园51单片机学习网D gI k {4XNMo


电子园51单片机学习网l.\d[Q4VT


int len1=strlen(str);


'A"N9Z*rk&T0


OsN"c wc0for(i=0;i<=39;i++)


+f5H6`&I5? ^$F3j0 电子园51单片机学习网t)d.{;WIO)JP


{


)P;H)kF#\0]0 电子园51单片机学习网,}?3iIAv$wn;P


if(I>24)电子园51单片机学习网G:j9Z6wH+u'E


电子园51单片机学习网%f|N8RNu)s0D}


{


,Eem q7KYrl0


!aKGQn0key=str[k]; /*发电话号码*/


'R$gI0U{I0 电子园51单片机学习网};N@R)Gg


k+ +;


oYq!QW @n0 电子园51单片机学习网4l%ZK%\-D-JWw7`|S2H


}6136_200904071938424sTkj.gif


T4bz?c0


l4i0g7P l5X0if(i<24)key=*at1; /*at命令*/


mSbd%L bUJ0 电子园51单片机学习网S t'{0kSX!M3\8qA


if(i= =39)key=0x0d; /*发确认码*/


/S*\1m%{-W-S0


)oIL+m.f0outportb(COMU,key); /*向串口送数据*/电子园51单片机学习网$p:T!dS u4q4u


电子园51单片机学习网)A\+C Dkp G)c$yc


delay(100); /*延时100毫秒*/电子园51单片机学习网~K9N q:Z$s


cid K `K_-~0at1+ +;电子园51单片机学习网C@g:_.Z9?


c%y(A7j{0}


G f~U'A#sLF0


?u"}os.Sa}0delay(1000);电子园51单片机学习网$O+V6}5B;}e G


-m'`#F j'N%y*jR0do


$?a*ZsM#l'G#V0


Q}@M*h1B k8u0{电子园51单片机学习网GL3lz Z1CZ


电子园51单片机学习网f'noy0jP;d


key=bioskey(1);电子园51单片机学习网;kqXiO Z


7R*Z6]/Fv6Ob,g%w0G:t0num1=inportb(COMU); /*检测回响码*/电子园51单片机学习网7W+f?s(@B:NL


电子园51单片机学习网D3[AJ Je9Y3G9J


delay(1);


5Q+xg_l-{ yEe!Y0L"G0


1x0i wn([!KA0if(mum1= =0x35)drev(); /*回响码为0x35则转入数据接收与处理器程序*/电子园51单片机学习网Yp;hK&Kr/j G6b


电子园51单片机学习网+j'dL1EZ


}


sPq\*G7xA`;~l0


!E pQp&ZU?Pc9[0while(key= =0);电子园51单片机学习网9RjN5k-Ctacv


a$H7m"Q0? CK0key=bioskey(0);电子园51单片机学习网^7ek3DE A/H2c_}w[


电子园51单片机学习网D&[5r |]


if(key= =0x011b)return; /*按ESC键则返回*/6136_200904071938425zGjY.gif电子园51单片机学习网 W1{0U3OuKUR


电子园51单片机学习网H9u CC$LB1rm


4.2 单片机程序设计


;Fl*v J?k} `0


N:|wm$Ybs4`0单片机程序框图如图6所示。


`Tl%j-u+J e1h6e0


2Fl1K;Voa _1o3I0程序清单如下:电子园51单片机学习网Z7F!yj(L~%SD


电子园51单片机学习网(N5d"e Q^!g%[


LD 72H,#4003H;8255命令口地址


2FE9e [:q9K/n:g0


Hs4n&I%[*vd,C-q9]0LD 70H;#0082HH;A口为输出,B口为输入电子园51单片机学习网Ym&q(zT}H0Wfe+C6x


0].e{uG0STB 70H,[72H]


w1].fT8~4i^0


!U8Fgf/iKCz0LDB 16H,#20 ;串口初始化


o^j"s H5J){@0


#k,j4n2O@2e0LDB 11H,#09H ;方式1


g8M5ECaZ9T S9mv0 电子园51单片机学习网?6Hx|7e8c


LDB 0EH,#4DH;波特率为1200bps电子园51单片机学习网3Ze^u Fg2B*FR


电子园51单片机学习网-d/Tf&oF\:_s F


LDB 0EH,80H


F'gf3z QkcI)L0 电子园51单片机学习网T~1\%B!~y


LDB 18H,#0CH;堆栈


4O&|.~8l;K0Z;S9hkG/eV0


8Q2}h|| FO0ORB IOC1,#20H


&Zb Z8p FRk0 电子园51单片机学习网LMB pE


LD 72H,#4000H ;8255的A口地址


&XEb q#R P\_0


Cs:kzN4am0LD 70H,#0003H ;使RTS和DTR均为高电平


d7Cm G:KwNt!w3l0 电子园51单片机学习网)Wc9ruY8x


STB 70H,[72H]电子园51单片机学习网2_V9v1PU7k


电子园51单片机学习网&C2hK"a6n5~2d


LCALL COMZ0 ;连续发出四个0


j1Br t\cP0


Xi$MX'b%P0LCALL DT ;延时1000nS电子园51单片机学习网VnG.G.O&a)iUgN


Lk|_)D s9}r0LCALL COMZ1 ;初始化MODEM,发出at命令:ata电子园51单片机学习网2kT+U*S;J


;}JRH$O1BY-q5sN0LCALL DT电子园51单片机学习网~-PNVH7U2JO


y+E\EwM)G0LCALL COMZ2 ;初始化MODEM,发出at命令:ate1q0v1l3x4s0=16136_20090407193842692uO.gif电子园51单片机学习网k1~hTI3|7^x


JnMT0AL GR'e0LCALL DT电子园51单片机学习网6j#Z n/_6D5h`*F


电子园51单片机学习网7T+M&X:q'k:FFd#B)v2c


LCALL COMZ3 ;初始化MODEM,发出at命令:atS7=30电子园51单片机学习网2X!F&q4H'RJ,a+S


电子园51单片机学习网#l]-X:[u(K:?dC


LCALL DT电子园51单片机学习网z/k6I*j'B/lLhJ/^6_


B;m?x{~ K0RING0:LDB SPCON,#09H


GC^.q$W6b0 电子园51单片机学习网6H _#oM1Z1l


RING1:LDB 60H,SPSTAT


5A6DR&}VT:\`T\0


;v!gxE+S0JBC 60H,6,RING1


[%P6x _ w4S9Y0 电子园51单片机学习网YhW3_$L


ANDB 60H,#0BFH电子园51单片机学习网S,YN2Vs_m


电子园51单片机学习网6@'gULr%z


LDB 70H,SUBF ;从串口接收一个数据


;B n6tMm%S!j0


wH] d8D_| o0CMPB 70H,#80H


&S$s8Hh:[2m5ZUj0 电子园51单片机学习网-`!@2V!~UFB(@$[


JE TD ;发送数据程序


_8y,Vh1Te|#]0 电子园51单片机学习网 W3e'I },p-czg


LJMP RING1电子园51单片机学习网7I[ H1Ue-qH.[/`A#p


C^0E_rfzj`+ucU0由于单片机向MODEM发出at命令程序是相似的,故在此仅为at命令:ate1q0v1l3x4s0=1为例来加以说明。假设at命令存放在以0AB40H为首地址的外部存贮器中。程序如下:


JD Cn6['? ]0


!A0K(Vj c or0COMZ2:LD72H,#0AB40H ;at命令首地址


7@1L P/H3`z `$t(Y"k d x0


F#o8R~1G"J$S\0LDB 20H,#17电子园51单片机学习网xjDP/gk^U)D1J)Q


电子园51单片机学习网SlBk-n ln


COMZ2A:LDB 70H,[72H]+ ;取at命令电子园51单片机学习网6R T6s&f"VW c\x K


8YX#u&M5XI?H+|0LDB SBUF,70H ;向串口送at命令


IH v(Kw5u+y1se0 电子园51单片机学习网as0^2[9J"i#i*J


DJNZ 20H,COMZ2A


"l+`2Nny0


|$JL"im8ZHZ)s,d0LDB 70H,#0DH


#Z#_qlqC:]l0


"PQ }.U%Qu8|0LDB SBUF,70H ;发出确认码


TX _;j4W u0


N3|RV~0RET


wyk`m0

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条