你现在位置:首页>技术论文>电气常识>嵌入式系统>正文
单片机的MODEM通讯
日期:2008-6-12 19:05:40 来源:本站整理  
点击: 作者:
点击【】放大字体.
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

摘要 探讨单片机之间或单片机与PC之间采用MODEM的实现方法,以及通讯参数的设定、数据的接收发送和部分AT命令的介绍,并给出演示程序。
WWW_PL※CJS_COM-PLC-技.术_网

  关键词 MODEM通讯 AT命令 单片机 MODEM
WWW_P※LCJS_CO※M-PLC-技-.术_网

  我们经常能见到关于PC的MODEM通讯的文章,但关于单片机MODEM通讯的文章却不多见。现在将我个人单片机MODEM通讯的实践经历写出来供大家参考。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

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

  1 AT命令集
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  下面介绍我通讯程序例子中涉及到的AT命令。
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

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

   T:音频拨号。例如,ATDT2245879,其中2245879为电话号码。
WWW_P※LCJS_COM-PLC-)技.术_网

   P:脉冲拨号。例如,ATDP2245879,其中2245879为电话号码。
WWW_PLC※JS_COM-PmLC-技.术_网

   ,:标准暂停。我们常常碰到拨打外线电话时需要暂停一下,等听到二次拨号音(外线)之后才能再拨后续的号码。缺省时暂停时间为2s(秒),它由S8寄存器指定。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

   Sn:表示MODEM内部的寄存器。
WWW_P※LCJS_COM-PLC-)技.术_网

   S0:自动应答。如果要求MODEM具有自动应答特性,则应该预先将MODEM的S0寄存器设置为非0。
P.L.C.技.术.网——可编程控制器技术门户

   S8:逗号拨号修饰符的暂停时间。该寄存器决定了当MODEM在拨号中遇到逗号(,)时应该暂停的时间。
WW.W_PLCJS_COM-PLC-技.术_网

  2  通用异步接收发送器UART
WWW_PLCJS@_COM%-PLC-技.术_网

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

表1  GM16C550寄存器
W1WW_P4LCJS_COM-PLC-技.术_网

按此在新窗口浏览图片
WW.W_PLCJS_COM-PLC-技.术_网

  (1)  波特率除数锁存器(LSB、MSB)
WWW_PLC※JS_COM-PmLC-技.术_网

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

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

  波特率除数锁存器值=工作频率/(16×期望波特率)=1843200/(16×期望波特率)
WWW_PLCJS@_COM%-PLC-技.术_网

  表2给出了常用波特率与波特率除数锁存器值。
WWcW_PLCJS_COM-PLC-技.术_网

表2  波特率除数锁存器
WWW_P※LCJS_CO※M-PLC-技-.术_网

按此在新窗口浏览图片
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

MOV  DPTR,#LCR  ;除数锁定允许
——可——编——程——控-制-器-技——术——门——户

MOV  A,#80H
WWW_P※LCJS_COM-PLC-)技.术_网

MOVX  @DPTR, A
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

MOV  DPTR,#LSB  ;波特率为9600baud
——可——编——程——控-制-器-技——术——门——户

MOV  A,#0CH
plcjs.技.术_网

MOVX  @DPTR, A
WW.W_PLC※JS_C,OM-PL,C-技.术_网

INC  DPTR
WWW_PL※CJS_COM-PLC-技.术_网

CLR  A
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

MOVX  @DPTR, A
plcjs.技.术_网

 
按此在新窗口浏览图片
plcjs.技.术_网

图1  GM16C550与RS232接线图
WW.W_PLC※JS_C,OM-PL,C-技.术_网

(2)  接收缓冲寄存器和发送保持寄存器(transmit and receive holding register)
WWcW_PLCJS_COM-PLC-技.术_网

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

(3)  中断允许寄存器(interrupt enable register)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  当LCR.7=0,且A2A1A0=001时,单片机访问中断允许寄存器(IER)。
WW.W_PLCJS_COM-PLC-技.术_网

  IER.0=1,允许接收器数据就绪中断。
WWW_P※LCJS_COM-PLC-)技.术_网

  IER.1=1,允许发送保持寄存器为空时中断。即当从发送保持寄存器把一个字节移到移位寄存器时,产生一个中断,使发送保持寄存器能够接收下一个字节。
P.L.C.技.术.网——可编程控制器技术门户

  IER.2=1,表示允许接收有错信息或间断条件中断。
WWW_PLC※JS_COM-PmLC-技.术_网

  IER.3=1,MODEM状态变化中断。
WW.W_PLCJS_COM-PLC-技.术_网

  IER.4~7,没有使用,设置为零。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

MOV DPTR,#IER
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

MOV A,#01H
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

MOVX @ DPTR ,A
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

(4)  FIFO控制寄存器(FIFO control register)
WWW_P※LCJS_CO※M-PLC-技-.术_网

  数据发送和接收模式的选择。GM16C550提供了两种模式:FIFO和DMA。其中DMA又有两种模式DMA的模式0、DMA的模式1可供选择。我的举例采用默认的DMA的模式0。感兴趣的朋友可试一试其它模式,这里不再说明。
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

(5)  中断状态寄存器(interrupt status register)
WWW_P※LCJS_COM-PLC-)技.术_网

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

表3  中断状态寄存器
WWW_P※LCJS_COM-PLC-)技.术_网

按此在新窗口浏览图片
WWW.PLCJS.COM——可编程控制器技术门户

  ISR.0=1,表示没有中断产生。
WWcW_PLCJS_COM-PLC-技.术_网

  ISR.4~5没有使用。
WWcW_PLCJS_COM-PLC-技.术_网

  ISR.6~7,当采用FIFO的接收和发送模式时,这两位都设置为1;反之,都设置为0。
WWW_PLCJS_COM-PLC-技.术_网

(6)  线路控制寄存器(line control register)
WWW_P※LCJS_CO※M-PLC-技-.术_网

  LCR.0~1,表示发送和接收时的字节长度,如表4所列。
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  LCR.2,这一位与LCR.0~1共同定义了停止位的长度,如表5所列。
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

表4  线路控制寄存器LCR.0~1
WWW.PLCJS.COM——可编程控制器技术门户

按此在新窗口浏览图片
W1WW_P4LCJS_COM-PLC-技.术_网

表5  线路控制寄存器LCR.2
WWW_PLC※JS_COM-PmLC-技.术_网

按此在新窗口浏览图片
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  LCR.3=1,进行奇偶校验。
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  LCR.4=0,进行奇校验;LCR.4=1,进行偶校验。
WWW_PLCJS_COM-PLC-技.术_网

  LCR.5=1,奇偶校验位恒为1或0。
——可——编——程——控-制-器-技——术——门——户

  表6为线路控制寄存器LCR.3~5。
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

表6  线路控制寄存器LCR.3~5
WWW_PLCJS_COM-PLC-技.术_网

按此在新窗口浏览图片
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WW.W_PLCJS_COM-PLC-技.术_网

  LCR.6=1,表示允许间断,即允许发送器寄存器保持一个完整帧时间以上的空号状态。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  LCR.7,用于区分访问除数锁存寄存器还是访问接收缓冲/发送保持和中断允许寄存器。
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

MOVDPTR,#LCR;通讯传输长度为8位,停止位为1,
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

;偶校验
WWW_PL※CJS_COM-PLC-技.术_网

MOVA,#1BH
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

MOVX @DPTR,A
WWW_PLC※JS_COM-PmLC-技.术_网

(7)  MODEM控制寄存器(MODEM control register)
WW.W_PLC※JS_C,OM-PL,C-技.术_网

  这是一个MODEM和外设接口的寄存器。
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  MCR.0=1时,强制芯片引脚DTR=0;
W1WW_P4LCJS_COM-PLC-技.术_网

  MCR.0=0时,强制芯片引脚DTR=1。
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  MCR.1=1时,强制芯片引脚RTS=0;
WWW_PLCJS@_COM%-PLC-技.术_网

  MCR.1=0时,强制芯片引脚RTS=1。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  MCR.2=1时,强制芯片引脚OP1=0;
——可——编——程——控-制-器-技——术——门——户

  MCR.2=0时,强制芯片引脚OP1=1。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  MCR.3=1时,强制芯片引脚OP2=0;
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  MCR.2=0时,强制芯片引脚OP2=1。
WWW_PLCJS_COM-PLC-技.术_网

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

  其它位保留。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

MOVDPTR,#MCR;异步串口芯片的DTR、RTS引脚送出逻辑低电平
W1WW_P4LCJS_COM-PLC-技.术_网

MOVA,#03H
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

MOVX @DPTR,A
WWW_PLC※JS_COM-PmLC-技.术_网

(8)  线路状态寄存器(line status register)
WWW.PLCJS.COM——可编程控制器技术门户

  LSR.0:当接收移位寄存器接收到的字节完全移到接收缓冲寄存器时,该位置1。如果读该寄存器,那么这一位被清零。
——可——编——程——控-制-器-技——术——门——户

  LSR.1:出现超越错时,这一位被置1。读该寄存器,这一位被清零。
WWW_PLC※JS_COM-PmLC-技.术_网

  LSR.2:出现奇偶校验错时,这一位被置1。读该寄存器,这一位被清零。
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  LSR.3:出现停止位不完整、丢失、空号时,这一位被置1。读该寄存器,这一位被清零。
P.L.C.技.术.网——可编程控制器技术门户

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

  LSR.5:当发送的字节从发送保持寄存器移到发送移位寄存器时,该位置1。
——可——编——程——控-制-器-技——术——门——户

  LSR.6:当发送保持寄存器和发送移位寄存器都没用字节时,该位置1。
WWW_PLC※JS_COM-PmLC-技.术_网

  LSR.7:当奇偶校验错、帧格式错、空号错有一个出现时,该位置1。
WWW_P※LCJS_CO※M-PLC-技-.术_网

Setdata
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  MOV  DPTR,#LSR
WW.W_PLCJS_COM-PLC-技.术_网

  MOVX  A,@DPTR
WW.W_PLC※JS_C,OM-PL,C-技.术_网

  JNB  ACC.5,Setdata
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  MOV  A,DataNumber;DataNumber记录发送字符的个数
WW.W_PLC※JS_C,OM-PL,C-技.术_网

  MOV  DPTR,#AtCommand
WWW_PL※CJS_COM-PLC-技.术_网

  AtCommand定义AT命令参数的起始地址
WWW_PLCJS@_COM%-PLC-技.术_网

  MOVC  A,@A+DPTR
WWW_PLC※JS_COM-PmLC-技.术_网

  MOV  DPTR,#THR  ;发送保持寄存器
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  MOVX  @DPTR,A
——可——编——程——控-制-器-技——术——门——户

  INC  DataNumber
——可——编——程——控-制-器-技——术——门——户

  MOV  A,DataNumber
plcjs.技.术_网

  CJNE  A,#0BH,Setdata  ;发送11个字符
WWW.PLCJS.COM——可编程控制器技术门户

AtCommand:DB  “A”,“T”,“S”,“0”,“=”,“2”,“S”,“8”,“=”,“5”,0DH
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

(9)  MODEM状态寄存器(MODEM status register)
WWW_P※LCJS_CO※M-PLC-技-.术_网

  MSR.0~3=1时,表示自上一次单片机读MSR寄存器之后,分别反映MODEM控制逻辑的四个输入信号的状态发生了变化。
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  MSR.0=1时,清除发送信号(CTS)已经发生了变化。
W1WW_P4LCJS_COM-PLC-技.术_网

  MSR.1=1时,数据设备就绪信号(DSR)已经发生了变化。
WWW_PLCJS_COM-PLC-技.术_网

  MSR.2=1时,振铃信号(RI)已经发生了变化。
WWW_PLCJS_COM-PLC-技.术_网

  MSR.3=1时,载波信号(DCD)已经发生了变化。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  MSR.4~7四位分别反映MODEM控制逻辑的四个输入信号的当前状态。
——可——编——程——控-制-器-技——术——门——户

  MSR.4=1时,清除发送信号(CTS)有效。
WWW.PLCJS.COM——可编程控制器技术门户

  MSR.5=1时,数据设备就绪信号(DSR)有效。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  MSR.6=1时,振铃信号(RI)有效。
W1WW_P4LCJS_COM-PLC-技.术_网

  MSR.7=1时,载波信号(DCD)有效。
WWW_P※LCJS_CO※M-PLC-技-.术_网

(10)  临时数据寄存器(scratchpag register)
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  可以存储用户信息。
WWW_PLC※JS_COM-PmLC-技.术_网

  有了上面知识的准备后就可以轻松地写出单片机的MODEM通讯程序,现在可把零散的东西组织起来。
P.L.C.技.术.网——可编程控制器技术门户

  GM16C550芯片初始化模块
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

Init_16C550:
WWcW_PLCJS_COM-PLC-技.术_网

  MOV  DPTR,#LCR  ;除数锁定允许
P.L.C.技.术.网——可编程控制器技术门户

  MOV  A,#80H
plcjs.技.术_网

  MOVX  @DPTR, A
WWW_PLC※JS_COM-PmLC-技.术_网

  MOV  DPTR,#LSB  ;波特率为9600baud
WW.W_PLC※JS_C,OM-PL,C-技.术_网

  MOV  A,#0CH
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  MOVX  @DPTR, A
WWW.PLCJS.COM——可编程控制器技术门户

  INC  DPTR
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  CLR  A
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  MOVX  @DPTR, A
WW.W_PLCJS_COM-PLC-技.术_网

  MOV  DPTR,#LCR;通讯传输长度为8位,停止位为1,偶校验
WWW_PL※CJS_COM-PLC-技.术_网

  MOV  A,#1BH
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  MOVX  @DPTR, A
——可——编——程——控-制-器-技——术——门——户

  MOV  DPTR,#MCR;异步串口芯片的DTR。RTS引脚送出逻辑低电平
WWW_PLCJS@_COM%-PLC-技.术_网

  MOV  A,#03H
——可——编——程——控-制-器-技——术——门——户

  MOVX  @DPTR,A
WWW_P※LCJS_COM-PLC-)技.术_网

  MOV  DPTR,#IER
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  MOV  A,#01H
WWcW_PLCJS_COM-PLC-技.术_网

  MOVX  @DPTR,A
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  采用中断的方式接数据
WWW.PLCJS.COM——可编程控制器技术门户

Interrupt2:
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  PUSH  ACC
WWW_PL※CJS_COM-PLC-技.术_网

  PUSH  DPH
plcjs.技.术_网

  PUSH  DPL
WWW_PLCJS@_COM%-PLC-技.术_网

  PUSH  PSW
WWW.PLCJS.COM——可编程控制器技术门户

  MOV  DPTR,#RHR  ;接受数据
WWW_PL※CJS_COM-PLC-技.术_网

  MOVX  A,@DPTR
WWW_PLCJS@_COM%-PLC-技.术_网

   ……………………
WWcW_PLCJS_COM-PLC-技.术_网

   POP  PSW
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

   POP  DPL
P.L.C.技.术.网——可编程控制器技术门户

   POP  DPH
WW.W_PLC※JS_C,OM-PL,C-技.术_网

   POP  ACC
WWcW_PLCJS_COM-PLC-技.术_网

   RETI
WWcW_PLCJS_COM-PLC-技.术_网

  至此,完成了一个小型的单片机MODEM通讯系统。其中的检错寄存器、MODEM状态寄存器等应用限于篇幅没有完全涉及到。有兴趣的朋友可以试一试,那么你就会对MODEM通讯有一个比较深刻的认识。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

plcjs.技.术_网

上一篇: Yaffs文件系统结构
下一: 没有了
评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行