单片机的MODEM通讯
发布时间:2008/6/3 0:00:00 访问次数:553
关键词:modem通讯at命令单片机
我们经常能见到关于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寄存器 a2a1a0 address w/r 寄存器 0 0 0 fff8 w 接收缓冲寄存器(rhr) r 发送保持寄存器(thr) 0 0 1 fff9 w 中断允许寄存器(ier) 0 1 0 fffa w fifo控制寄存器(fcr) 0 1 0 fffa r 中断状态寄存器(isr) 0 1 1 fffb w 线路控制寄存器(lcr) 1 0 0 fffc w modem控制寄存器(mcr) 1 0 1 fffd r 线路状态寄存器(lsr) 1 1 0 fffe r modem状态寄存器(msr) 1 1 1 ffff w/r 临时数据寄存器(spr) (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 波特率除数锁存器 波特率
/baud 锁存器 (hex) msb lsb 300 180 01 80 1200 60 00 60 4800 18 00 18 19.2k 06 00 06 57.6k 02 00 02 波特率
/baud 锁存器 (hex) msb lsb 600 c0 00 0c 2400 30 00 30 9600 0c 00 0c 38.4k 03 00 03 11.5k 00 00 01 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接线图。
图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
关键词:modem通讯at命令单片机
我们经常能见到关于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寄存器 a2a1a0 address w/r 寄存器 0 0 0 fff8 w 接收缓冲寄存器(rhr) r 发送保持寄存器(thr) 0 0 1 fff9 w 中断允许寄存器(ier) 0 1 0 fffa w fifo控制寄存器(fcr) 0 1 0 fffa r 中断状态寄存器(isr) 0 1 1 fffb w 线路控制寄存器(lcr) 1 0 0 fffc w modem控制寄存器(mcr) 1 0 1 fffd r 线路状态寄存器(lsr) 1 1 0 fffe r modem状态寄存器(msr) 1 1 1 ffff w/r 临时数据寄存器(spr) (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 波特率除数锁存器 波特率
/baud 锁存器 (hex) msb lsb 300 180 01 80 1200 60 00 60 4800 18 00 18 19.2k 06 00 06 57.6k 02 00 02 波特率
/baud 锁存器 (hex) msb lsb 600 c0 00 0c 2400 30 00 30 9600 0c 00 0c 38.4k 03 00 03 11.5k 00 00 01 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接线图。
图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
上一篇:数字交换芯片MT8985的应用