单片机的调制解调器通讯

发布者:导航灯最新更新时间:2018-04-11 来源: eefocus关键字:单片机  调制解调器  通讯 手机看文章 扫描二维码
随时随地手机看文章

  我们经常能见到关于PC的MODEM通讯的文章,但关于单片机MODEM通讯的文章却不多见。现在将我个人单片机MODEM通讯的实践经历写出来供大家参考。

  要写单片机的MODEM通讯必须要有两个背景知识,一个是AT命令集,另一个是通用异步接收发送器(UART)。

  1.AT命令集

  下面介绍我通讯程序例子中涉及到的AT命令。

  Dn:拨号命令。该命令使MODEM立即进入摘机状态,并拨出跟在后面的号码。D命令是基本的拨号命令,它受到其它命令的修饰可构成MODEM何时拨号以及如何拨号等操作。

 

  T:音频拨号。例如,ATDT2245879,其中2245879为电话号码。

  P:脉冲拨号。例如,ATDP2245879,其中2245879为电话号码。

  ,:标准暂停。我们常常碰到拨打外线电话时需要暂停一下,等听到二次拨号音(外线)之后才能再拨后续的号码。缺省时暂停时间为2s(秒),它由S8寄存器指定。

  Sn:表示MODEM内部的寄存器。

  S0:自动应答。如果要求MODEM具有自动应答特性,则应该预先将MODEM的S0寄存器设置为非0。

  S8:逗号拨号修饰符的暂停时间。该寄存器决定了当MODEM在拨号中遇到逗号(,)时应该暂停的时间。

  2.通用异步接收发送器UART

  深入理解UART内部结构以及内部寄存器各位的含义,详细了解数据发送和接收的过程,有助于编写出高效、稳定的程序。现以GM16C550为例介绍编写基本通讯程序需要知道的寄存器。实际的ADDRESS由具体接线决定。表1为GM16C550寄存器的介绍。

 
表1 GM16C550寄存器 
47.jpg

  (1) 波特率除数锁存器(LSB、MSB)

  在通讯之前要进行一些参数初始化,波特率是首先应该考虑的一项。该寄存器是一个16位的寄存器,分为低8位(LSB)和高8位(MSB)寄存器。

  当 LCR.7=1,且A2A1A0=000/001时,单片机访问的是波特率除数锁存器LSB/MSB。GM16C550推荐的工作频率是 1.8432MHz。这个频率除以16就是波特率的时钟频率,用于控制发送和接收数据的速度。下面给出波特率除数锁存器值的计算公式:

  波特率除数锁存器值=工作频率/(16×期望波特率)=1843200/(16×期望波特率)

  表2给出了常用波特率与波特率除数锁存器值。

  表2 波特率除数锁存器

波特率除数锁存器


  MOV DPTR,#LCR ;除数锁定允许

  MOV A,#80H

  MOVX @DPTR, A

  MOV DPTR,#LSB ;波特率为9600baud

  MOV A,#0CH

  MOVX @DPTR, A

  INC DPTR

  CLR A

  MOVX @DPTR, A


  图 1为GM16C550与RS232接线图。

GM16C550与RS232接线图
    图1 GM16C550与RS232接线图

  (2) 接收缓冲寄存器和发送保持寄存器(transmit and receive holding register)

  当LCR.7=0,且A2A1A0=000时,读操作单片机访问接收缓冲寄存器(RHR),写操作单片机访问发送保持寄存器(THR)。

  (3) 中断允许寄存器(interrupt enable register)

  当LCR.7=0,且A2A1A0=001时,单片机访问中断允许寄存器(IER)。

  IER.0=1,允许接收器数据就绪中断。

  IER.1=1,允许发送保持寄存器为空时中断。即当从发送保持寄存器把一个字节移到移位寄存器时,产生一个中断,使发送保持寄存器能够接收下一个字节。

  IER.2=1,表示允许接收有错信息或间断条件中断。

  IER.3=1,MODEM状态变化中断。

  IER.4~7,没有使用,设置为零。

  MOV DPTR,#IER

  MOV A,#01H

  MOVX @DPTR,A

  (4) FIFO控制寄存器(FIFO control register)

  数据发送和接收模式的选择。GM16C550提供了两种模式:FIFO和DMA。其中DMA又有两种模式DMA的模式0、DMA的模式1可供选择。我的举例采用默认的DMA的模式0。感兴趣的朋友可试一试其它模式,这里不再说明。

  (5) 中断状态寄存器(interrupt status register)

  前面介绍了几种中断,它们在各自的条件下产生中断,UART都会输出一个高电平的中断请求信号,触发同一个中断请求。为了具体判断是哪一种中断,还应该检测ISR,如表3所列。

  表3 中断状态寄存器中断状态寄存器


      ISR.0=1,表示没有中断产生。 
ISR.4~5没有使用。 
ISR.6~7,当采用FIFO的接收和发送模式时,这两位都设置为1;反之,都设置为0。

(6) 线路控制寄存器(line control register)
 LCR.0~1,表示发送和接收时的字节长度,如表4所列。
LCR.2,这一位与LCR.0~1共同定义了停止位的长度,如表5所列。
54


  LCR.6=1,表示允许间断,即允许发送器寄存器保持一个完整帧时间以上的空号状态。

  LCR.7,用于区分访问除数锁存寄存器还是访问接收缓冲/发送保持和中断允许寄存器。 MOVDPTR,#LCR;通讯传输长度为8位,停止位为1,;偶校验

  MOVA,#1BH

  MOVX @DPTR,A

  (7) MODEM控制寄存器(MODEM control register)

  这是一个MODEM和外设接口的寄存器。

  MCR.0=1时,强制芯片引脚DTR=0;

  MCR.0=0时,强制芯片引脚DTR=1。

  MCR.1=1时,强制芯片引脚RTS=0;

  MCR.1=0时,强制芯片引脚RTS=1。

  MCR.2=1时,强制芯片引脚OP1=0;

  MCR.2=0时,强制芯片引脚OP1=1。

  MCR.3=1时,强制芯片引脚OP2=0;

  MCR.2=0时,强制芯片引脚OP2=1。

  MCR.4=1时,循环返回模式,可用于芯片自测。

  其它位保留。

  MOVDPTR,#MCR;异步串口芯片的DTR、RTS引脚送出逻辑低电平

  MOVA,#03H

  MOVX @DPTR,A

  (8) 线路状态寄存器(line status register)

  LSR.0:当接收移位寄存器接收到的字节完全移到接收缓冲寄存器时,该位置1。如果读该寄存器,那么这一位被清零。

  LSR.1:出现超越错时,这一位被置1。读该寄存器,这一位被清零。

  LSR.2:出现奇偶校验错时,这一位被置1。读该寄存器,这一位被清零。

  LSR.3:出现停止位不完整、丢失、空号时,这一位被置1。读该寄存器,这一位被清零。

  LSR.4:当接收寄存器检测到空号状态已持续一个完整帧传输时间时,这一位被置1。读该寄存器,这一位被清零。

  LSR.5:当发送的字节从发送保持寄存器移到发送移位寄存器时,该位置1。

  LSR.6:当发送保持寄存器和发送移位寄存器都没用字节时,该位置1。

  LSR.7:当奇偶校验错、帧格式错、空号错有一个出现时,该位置1。


  Setdata:

  MOV DPTR,#LSR

  MOVX A,@DPTR

  JNB ACC.5,Setdata

  MOV A,DataNumber;DataNumber记录发 ;送字符的个数

  MOV DPTR,#AtCommand ;AtCommand定义AT命令参数的起始地址

  MOVC A,@A+DPTR

  MOV DPTR,#THR ;发送保持寄存器

  MOVX @DPTR,A

  INC DataNumber

  MOV A,DataNumber

  CJNE A,#0BH,Setdata ;发送11个字符

  AtCommand:DB “A”,“T”,“S”,“0”,“=”,“2”,“S”,“8”, “=”,“5”,0DH

  (9) MODEM状态寄存器(MODEM status register)

   MSR.0~3=1时,表示自上一次单片机读MSR寄存器之后,分别反映MODEM控制逻辑的四个输入信号的状态发生了变化。

  MSR.0=1时,清除发送信号(CTS)已经发生了变化。

  MSR.1=1时,数据设备就绪信号(DSR)已经发生了变化。

  MSR.2=1时,振铃信号(RI)已经发生了变化。

  MSR.3=1时,载波信号(DCD)已经发生了变化。

  MSR.4~7四位分别反映MODEM控制逻辑的四个输入信号的当前状态。

  MSR.4=1时,清除发送信号(CTS)有效。

  MSR.5=1时,数据设备就绪信号(DSR)有效。

  MSR.6=1时,振铃信号(RI)有效。

  MSR.7=1时,载波信号(DCD)有效。

  (10) 临时数据寄存器(scratchpag register)

  可以存储用户信息。

  有了上面知识的准备后就可以轻松地写出单片机的MODEM通讯程序。现在可把零散的东西组织起来了。

  GM16C550芯片初始化模块

  Init_16C550:

  MOV DPTR,#LCR ;除数锁定允许

  MOV A,#80H

  MOVX @DPTR, A

  MOV DPTR,#LSB ;波特率为9600baud

  MOV A,#0CH

  MOVX @DPTR, A

  INC DPTR

  CLR A

  MOVX @DPTR, A

  MOV DPTR,#LCR;通讯传输长度为8位,停止 ;位为1,偶校验

  MOV A,#1BH

  MOVX @DPTR, A

  MOV DPTR,#MCR;异步串口芯片的DTR。RTS ;引脚送出逻辑低电平

  MOV A,#03H

  MOVX @DPTR,A

  MOV DPTR,#IER

  MOV A,#01H

  MOVX @DPTR,A

  采用中断的方式接数据

  Interrupt2:

  PUSH ACC

  PUSH DPH

  PUSH DPL

  PUSH PSW

  MOV DPTR,#RHR ;接受数据

  MOVX A,@DPTR

  ……………………

  POP PSW

  POP DPL

  POP DPH

  POP ACC

  RETI

  至此,完成了一个小型的单片机MODEM通讯系统。其中的检错寄存器、MODEM状态寄存器等应用限于篇幅没有完全涉及到。有兴趣的朋友可以试一试,那么你就会对MODEM通讯有一个比较深刻的认识。


关键字:单片机  调制解调器  通讯 引用地址:单片机的调制解调器通讯

上一篇:提高单片机应用系统可靠性的软件技术与方法介绍
下一篇:PowerPC G4 系列单板机的设计

推荐阅读最新更新时间:2024-03-16 15:59

ST推出新款超低功耗STM32微控制器
同级最高的闪存容量,最大容量高达512KB。 中国,2014年3月26日 ——意法半导体STM32 L1系列超低功耗ARM® Cortex®-M3 32位微控制器新增一款512KB闪存产品。目前L1系列共有三个产品线合70余款产品,其超低功耗和存储容量的组合在市场上堪称独一无二,闪存和RAM最大容量分别高达512KB和80KB。 新产品采用意法半导体独有的超低泄漏电流的110纳米CMOS制造工艺和优化的系统架构,工作能耗极低,目标应用瞄准高成本效益的嵌入式设计,适用于健身、医疗、穿戴式设备和工业/电表等电池供电的联网产品。 L1系列的主要特性: · 高性能ARM Cortex-M3 32位内核:在32
[单片机]
ST推出新款超低功耗STM32<font color='red'>微控制器</font>
MSP430教程12:MSP430单片机MSP430定时器
在MSP430系列单片机中带有功能强大的定时器资源,这定时器在单片机应用系统中起到重要的作用。利用MSP430(以下称为430)单片机的定时器可以用来实现计时,延时,信号频率测量,信号触发检测,脉冲脉宽信号测量,PWM信号发生。另外通过软件编写可以用作串口的波特率发生器。后面我们将用定时器A作为一个波特率发生器,来编写一个串口例程给初学者参考。以加强初学者对定时器A的理解和应用。 在430的大系列产品中,不同的子系列产品定时器资源有所不同;在F11X,F11X1中是不带定时器B资源的。430的定时器主要分为3部分模块:看门狗定时器,定时器A,定时器B。定时器A主要资源特点有16位定时计数器,其计数模式有4种。多种计数时钟信号供
[单片机]
基于STC89S52单片机的电子万年历系统
目前基于单片机控制技术的微电子技术得到空前的发展。广泛应用于各种控制领域、智能领域、仿真领域。控制领域里的定时计时控制、温度控制,在生产、生活等领域已经得到了广泛的应用。液晶显示模块在各种测量仪器、测量装置、显示仪表等日用电子产品中的应用越来越广泛,并且对器件的测量精度和显示精度的要求也越来越高,尤其是对时间的测量不但要求准确,而且需要读取数值更直观更方便。本文以AT89S52单片机为主控芯片,以DALLAS公司推出的实时时钟芯片DS1302为时钟控制芯片,以1602液晶显示模块为显示器,进行电子万年历系统的设计。本系统可同屏显示年、月、日、星期、温度以及闹钟设置等功能。 1 系统总体设计 本系统以STC89S52单片机为核心,
[单片机]
基于STC89S52<font color='red'>单片机</font>的电子万年历系统
MCS-51系列单片机并行P1口特性
MCS-51系列 单片机 并行P1口为准双向口,只能作为通用I/O口使用,用来传送数据。它的每一位可以分别定义为输入线或输出线,即用户可以把P1口的某些位作为输出线使用,另外的一些位作为输入线使用。 P1口的某一位作为输出线时,将“1”写入该位口锁存器,则 Q 端上的输出场效应管T截止,该位的输出引脚由内部的拉高 电路 拉成高 电平 ,输出“1”;将“0”写入口锁存器,输出场效应管T导通,引脚输出低电平,即输出“0”。 P1口的某一位作为输入线时,该位的口锁存器必须保持“1”,使输出场效应管T截止,这时该位引 脚由内部拉高电路拉成高电平,也可以由外部的电路拉成低电平,CPU读P1引脚状态时实际上就是读出外部电路
[单片机]
MCS-51系列<font color='red'>单片机</font>并行P1口特性
AVR单片机ADC的应用
AVR单片机ADC的应用 1.数模转换的基础知识 数模转换器(ADC)基本上是一个比例上的问题,即由ADC产生的数字值跟输入模拟量与转换器量程的比值有关的。转换关系如下: Vin/Vfullscale=X/(2N-1)  其中X是数字输出,N是数字输出的位数(ADC的位数),Vin是模拟输入量的值,Vfullscale是模拟输入量的最大值。 数模转换的转换精度计算: Vresolution=Vfullscale/((2N-1) 2.AVR微控器的ADC介绍 AVR微控器的ADC具有两个ADC寄存器:ADC控制与状态寄存器ADCSR控制ADC的运行;ADC多路复用选择器ADMUX,控制8个测量的模拟量输入。 为
[单片机]
AVR<font color='red'>单片机</font>ADC的应用
ZigBee-CC2530单片机 - 实现计算机串口通讯控制LED发光二极管
程序源码 /************************************************************** * 文件名称:uart2.c * 功 能:PC机控制发光二极管亮灭 *************************************************************/ #include ioCC2530.h #include string.h //定义led灯端口 #define LED1 P1_0 // P1_0定义为P1_0 #define LED2 P1_1 // P1_0定义为P1_1 #define uint unsigned int #
[单片机]
英飞凌推出新一代AURIX™微控制器,加速汽车的电气化和数字化进程
未来出行的重要趋势是碳中和、 自动驾驶 、互联和信息安全。而微电子技术将在出行方式的转型中发挥核心作用。作为全球车用半导体市场的领导者, 英飞凌 科技股份公司(FSE: IF X / OTCQX: IFNNY)持续以科技创新引领未来出行。该公司近日宣布推出采用28纳米工艺技术生产的新AURIX™ A TC4x系列微控制器( MCU ),进一步增强其AURIX™ 微控制器家族的产品阵容。AURIX™ TC4x系列微控制器可广泛应用于新一代电动汽车、高级驾驶辅助系统( AD AS)、汽车电子/电气(E/E)架构以及人工智能( AI )应用等。 英飞凌科技汽车 电子 事业部总裁Peter Schiefer表示:“我们推出新一代AU
[汽车电子]
英飞凌推出新一代AURIX™<font color='red'>微控制器</font>,加速汽车的电气化和数字化进程
通过利用C8051F020单片机实现立体声信号相位差电平差测试仪的设计
将LR立体声信号经频谱分析、整形及占空比检测电路进行处理,采用过零鉴相法,通过测矩形波占空比,实现相位差的测试。将LR信号用AD736专用芯片实现AC/DC转换,通过单片机编程,得到LR电平差。 在立体声播音或放音时,如果左右声道信号存在相位差和电平差,对播音或放音质量将会产生一定影响,出现声像漂移、音量减小、噪音增大和失真等故障现象。左右声道相位差电平差越大,音质也越差,严重时还会造成无音故障。 为此文中设计了立体声信号相位差电平差测试仪,只有准确测出相位差电平差,再用补偿电路进行修正,才能保证播音或放音质量,更好地满足人们欣赏到音质优美的广播或音乐的需要。 1 设计方案 如图1所示,是立体声信号相位差电平差测试仪原理方
[单片机]
通过利用C8051F020<font color='red'>单片机</font>实现立体声信号相位差电平差测试仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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