單片機的MODEM通訊
發布時間:2008/6/3 0:00:00 訪問次數:533
關鍵詞: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的應用