基于MODEM的单片机与PC机间的远程通信究研究

发布者:SparkleMagic最新更新时间:2012-05-25 来源: 维库开发网 关键字:于MODEM  单片机  PC机  远程通信究 手机看文章 扫描二维码
随时随地手机看文章

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

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

1 PC机串行通信结构

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

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

2 单片机串行通信结构

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

3 单片机与PC机之间的硬件接口

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

4 软件设计与实现

下面以PC机呼叫单片机或单片机应答PC机为例来说明程序的设计。

4.1 PC机的程序设计

程序框图如图5所示。

a.初始化

为了实现异步串行通信,在PC机中要对其异步发送接收器UART进行初始化,以决定PC机异步串行通信的数据格式、传输速率、控制方式等。其程序如下:

outportb(COMU+30,OX83) /*使DLAB=1*/

outportb(COMU,OX60) /*波特率=1*/

outportb(COMU+1,OX00)

outportb(COMU+3,OX03) /*数据格式*/

outportp(COMU+4,OX03) /*禁止MODEM循环反馈*/

outportb(COMU,OX00) /*禁止中断*/

注:COMU为串行口端口地址

b.初始化MODEM

初始化MODEM程序如下:

{ int key,i;

char *at1=“ATZ”;

char *at2=“ATE1Q0V1L3X4S0=1”;

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

{

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

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

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

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

}

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

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

if(i< =15)key=at2[i];

if(i= =16)key=0x0d;

outportb(COMU,key);

delay(100);

}

delay(1000);

}

c.拨号

[page]

 

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

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

char str=info- >telephoneno;/*电话号码位数*/

int len1=strlen(str);

for(i=0;i<=39;i++)

{

if(I>24)

{

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

k+ +;

}

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

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

outportb(COMU,key); /*向串口送数据*/

delay(100); /*延时100毫秒*/

at1+ +;

}

delay(1000);

do

{

key=bioskey(1);

num1=inportb(COMU); /*检测回响码*/

delay(1);

if(mum1= =0x35)drev(); /*回响码为0x35则转入数据接收与处理器程序*/

}

while(key= =0);

key=bioskey(0);

if(key= =0x011b)return; /*按ESC键则返回*/

4.2 单片机程序设计

单片机程序框图如图6所示。

程序清单如下:

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

LD 70H;#0082HH;A口为输出,B口为输入

STB 70H,[72H]

LDB 16H,#20 ;串口初始化

LDB 11H,#09H ;方式1

LDB 0EH,#4DH;波特率为1200bps

LDB 0EH,80H

LDB 18H,#0CH;堆栈

ORB IOC1,#20H

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

LD 70H,#0003H ;使RTS和DTR均为高电平

STB 70H,[72H]

LCALL COMZ0 ;连续发出四个0

LCALL DT ;延时1000nS

LCALL COMZ1 ;初始化MODEM,发出at命令:ata

LCALL DT

LCALL COMZ2 ;初始化MODEM,发出at命令:ate1q0v1l3x4s0=1

LCALL DT

LCALL COMZ3 ;初始化MODEM,发出at命令:atS7=30

LCALL DT

RING0:LDB SPCON,#09H

RING1:LDB 60H,SPSTAT

JBC 60H,6,RING1

ANDB 60H,#0BFH

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

CMPB 70H,#80H

JE TD ;发送数据程序

LJMP RING1

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

COMZ2:LD72H,#0AB40H ;at命令首地址

LDB 20H,#17

COMZ2A:LDB 70H,[72H]+ ;取at命令

LDB SBUF,70H ;向串口送at命令

DJNZ 20H,COMZ2A

LDB 70H,#0DH

LDB SBUF,70H ;发出确认码

RET

 

关键字:于MODEM  单片机  PC机  远程通信究 引用地址:基于MODEM的单片机与PC机间的远程通信究研究

上一篇:基于变频控制系统单片机外围电路设计
下一篇:教你了解DSP与单片机的区别

推荐阅读最新更新时间:2024-03-16 13:00

单片机及外围电路
单片机及外围电路 图5 单片机及外围电路 图5是单片机及外围电路,单片机选用ATMEL公司的AT89C55,内部带有20K字节的程序存储器,是整个故障检测电路的控制核心,它通过运行程序控制检测电路进行电压检测,将检测的结果进行初步处理,产生单元级故障表,送上级进行综合处理。集成电路D2(MAX813)是看门狗,主要功能是监视单片机程序的运行状态,如果程序跑飞超过1.6秒,看门狗就产生一个复位信号,对单片机进行复位,使程序重新进入正常步骤。集成电路D3(MAX485)是RS-485串行通信接口,它实现TTL电平与RS-485电平的相互转换,是检测电路与上级单元的通信接口。二极管V2是故障指示灯,当检测到电源故障时,点亮指
[模拟电子]
<font color='red'>单片机</font>及外围电路
如何学习51单片机
学过51单片机的人,都知道这个学习的过程可能不是那么“美好”,所以,今天给大家介绍一些关于51单片机的学习方法。 1、我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础。 2、对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此。库只是一个接口,方便使用者使用而已。 3、汇编语言在工作中很少用到,了解就好。 4、51单片机的P0口很特别。 5、C语言就是C语言,51单片机就是51单片机,算法就是算法,外围电路就是外围电路,传感器就是传感器,通信器件就是通信器件,电路图就是电路图,PCB图就是PCB图,仿真就是仿真。 当你以后再也不使用51了,C语言的知识还在,算法的知识还在,搭建单片机的最小系统的技
[单片机]
一款基于单片机的脉冲快速充电系统设计
1、开关电源电路的设计 系统中的开关电源电路为蓄电池的充电提供稳定的电压采用的是反激式的开关电源电路。反激式开关电源的电路比较简单,比正激式开关电源少用了一个大的储能滤波电感,以及一个续流二极管,因此,反激式开关电源的体积要比正激式开关电源的体积小,且成本也要低。此外,反激式开关电源输出电压受占空比的调制幅度,相对于正激式开关电源来要高很多,因此,反激式开关电源要求调控占空比的误差信号幅度要比较低,误差信号放大器的增益和动态范围也要较小。基于这些优点,反激式开关电源在目前家电领域中被广泛的应用。如图1所示。 图1开关电源电路 开关电源电路控制芯片采用UC3842,UC3842是目前比较理想的新型的脉宽调制器。由该集成电
[单片机]
一款基于<font color='red'>单片机</font>的脉冲快速充电系统设计
单片机驱动ds18b20用12864液晶显示温度程序
全部完整的源代码下载: http://www.51hei.com/bbs/dpj-20391-1.html 下面是ds18b20.h文件:/*------------------------------------ 名称:ds18b20驱动及其显示模块 编写:YuMin_Dong 时间:2013.01.21 ------------------------------------*/ #ifndef _DS18B20_H_ #define _DS18B20_H_ /*------------------------------------ 位定义 ---------------------------------
[单片机]
<font color='red'>单片机</font>驱动ds18b20用12864液晶显示温度程序
STM32单片机学习(5) 定时器中断实验
/* * * 软件功能: 定时器中断实验 * */ #include stm32f10x.h #include delay.h void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); void TIM3_Configuration(u16 arr,u16 psc); /* 函数: int main(void) 功能: main主函数 参数: 无 返回: 无 / int main(void) { RCC_Configuration(); GPIO_Configuration(); NVIC_Co
[单片机]
单片机外部与内部时钟源的切换
DAVE 数字应用工程师,出自Infineon科技。它能帮我们准确而快速地进行基于Infineon8位、16位或32位单片机的嵌入式系统设计。由于Infineon的嵌入式控制器的寄存器的数量非常大,大约有一千多个。所以对大量寄存器的初始化是一件相当棘手的事,而有了DAVE的平台就能很轻松地完成这些事情。同时DAVE还可完成单片机的其它初始化工作,与Keil或、Tasking等编译软件实现链接,轻松完成嵌入式系统的软件开发工作。 XC2336B是Infineon的16位微控制器XC2000家族中的一员,它将功能和性能都得到扩展的C166SV2内核、功能强大的片上外设子系统和各种片上存储器进行了完美结合。执行速度更快、稳定性更好、操作更
[单片机]
<font color='red'>单片机</font>外部与内部时钟源的切换
单片机程序调试黑皮书
1、程序的确定性比硬件大,不要害怕程序问题。 2、写程序,最重要的不是学会某种语言,而是会分析问题并提出解决问题的方法。 3、含有中断的程序较为复杂,需要编写者清楚同一时刻,我在做什么,其他人在做什么,用“并发”的方式思考问题,才能写好。 4、程序模块化是为了编写而不是为了运行,模块化和函数是两个不同的概念,函数是为了将需要多次使用的代码统一编写,以便减少程序代码量,便于维护;模块化是指将复杂的程序功能化整为零而成的功能块,一个模块可能由多个函数组成,也可能就是一个函数,还有可能只是一段紧密相连的代码块。 模块---打开冰箱门 1、抬起右手,移动到冰箱门把中心右侧1cm处 2、弯曲右手手指,构筑冰箱门 3、以2kg的力量向后拉 4
[单片机]
泰芯TXLink仿真器MCU单片机开发调试工具
泰芯TXLink调试器MCU单片机开发工具仿真器 TXLink是珠海泰芯半导体有限公司基于Keil在8051开发平台的调试器,目前支持泰芯TX8全系列MCU(TX8系列包括TX8C1010/TX8C12**/TX8M22**/TX8T32**/TX8P6***/TX8W7***)的在线仿真功能和在线下载功能,支持断点、单步运行、跨步运行、暂停、运行等调试操作,支持RAM、SFR 的查看与修改,方便用户在开发阶段对程序的调试。 TXLink调试工具的左边是输入端,使用USB连接电脑通讯。右边是输出端,可外接扩展板,与泰芯TX8系列MCU接通信。 泰芯TXLink仿真调试器外观 泰芯TXLink左侧输入端通过USB与电脑连
[单片机]
泰芯TXLink仿真器<font color='red'>MCU</font><font color='red'>单片机</font>开发调试工具
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved