亚洲国产成人,色呦呦内射午夜,无码一级片,无码人妻少妇色欲AV一区二区

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><delect id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></delect><acronym id="jg8hh"><dd id="jg8hh"></dd></acronym><button id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></button><samp id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></samp>

<p id="jg8hh"></p>

<samp id="jg8hh"><legend id="jg8hh"></legend></samp>
<samp id="jg8hh"><legend id="jg8hh"><samp id="jg8hh"></samp></legend></samp>

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><acronym id="jg8hh"></acronym><p id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></p><p id="jg8hh"></p>

<p id="jg8hh"></p><delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect><button id="jg8hh"><listing id="jg8hh"><i id="jg8hh"></i></listing></button>
<delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect>

單片機(jī)的MODEM通訊

發(fā)布時(shí)間:2024-05-02
摘要 探討單片機(jī)之間或單片機(jī)與pc之間采用modem的實(shí)現(xiàn)方法,以及通訊參數(shù)的設(shè)定、數(shù)據(jù)的接收發(fā)送和部分at命令的介紹,并給出演示程序。
關(guān)鍵詞 modem通訊 at命令 單片機(jī) modem
我們經(jīng)常能見到關(guān)于pc的modem通訊的文章,但關(guān)于單片機(jī)modem通訊的文章卻不多見。現(xiàn)在將我個(gè)人單片機(jī)modem通訊的實(shí)踐經(jīng)歷寫出來(lái)供大家參考。
要寫單片機(jī)的modem通訊必須要有兩個(gè)背景知識(shí),一個(gè)是at命令集,另一個(gè)是通用異步接收發(fā)送器(uart)。
1 at命令集
下面介紹我通訊程序例子中涉及到的at命令。
dn:撥號(hào)命令。該命令使modem立即進(jìn)入摘機(jī)狀態(tài),并撥出跟在后面的號(hào)碼。d命令是基本的撥號(hào)命令,它受到其它命令的修飾可構(gòu)成modem何時(shí)撥號(hào)以及如何撥號(hào)等操作。
t:音頻撥號(hào)。例如,atdt88888888,其中88888888為。
p:脈沖撥號(hào)。例如,atdp88888888,其中88888888為。
,:標(biāo)準(zhǔn)暫停。我們常常碰到外線時(shí)需要暫停一下,等聽到二次撥號(hào)音(外線)之后才能再撥后續(xù)的號(hào)碼。缺省時(shí)暫停時(shí)間為2s秒,它由s8寄存器。
sn:表示modem內(nèi)部的寄存器。
s0:自動(dòng)應(yīng)答。如果要求modem具有自動(dòng)應(yīng)答特性,則應(yīng)該預(yù)先將modem的s0寄存器設(shè)置為非0。
s8:逗號(hào)撥號(hào)修飾符的暫停時(shí)間。該寄存器決定了當(dāng)modem在撥號(hào)中遇到逗號(hào)(,)時(shí)應(yīng)該暫停的時(shí)間。
2 通用異步接收發(fā)送器uart
深入理解uart內(nèi)部結(jié)構(gòu)以及內(nèi)部寄存器各位的含義,詳細(xì)了解數(shù)據(jù)發(fā)送和接收的過(guò)程,有助于編寫出、穩(wěn)定的程序?,F(xiàn)以gm16c550為例介紹編寫基本通訊程序需要知道的寄存器。實(shí)際的address由具體接線決定。表1為gm16c550寄存器的介紹。
表1 gm16c550寄存器
500this.width=500 border=0>
(1) 波特率除數(shù)鎖存器(lsb、msb)
在通訊之前要進(jìn)行一些參數(shù)初始化,波特率是首先應(yīng)該考慮的一項(xiàng)。該寄存器是一個(gè)16位的寄存器,分為低8位(lsb)和高8位(msb)寄存器。
當(dāng)lcr.7=1,且a2a1a0=000/001時(shí),單片機(jī)訪問(wèn)的是波特率除數(shù)鎖存器lsb/msb。gm16c550推薦的工作頻率是1.8432mhz。這個(gè)頻率除以16就是波特率的時(shí)鐘頻率,用于控制發(fā)送和接收數(shù)據(jù)的速度。下面給出波特率除數(shù)鎖存器值的計(jì)算公式:
波特率除數(shù)鎖存器值=工作頻率/(16×期望波特率)=1843200/(16×期望波特率)
表2給出了常用波特率與波特率除數(shù)鎖存器值。
表2 波特率除數(shù)鎖存器
500this.width=500 border=0>
mov dptr,#lcr ;除數(shù)鎖定允許
mov a,#80h
movx @dptr, a
mov dptr,#lsb ;波特率為9600baud
mov a,#0ch
movx @dptr, a
inc dptr
clr a
movx @dptr, a
  500this.width=500 border=0>
圖1 gm16c550與rs232接線圖
(2) 接收緩沖寄存器和發(fā)送保持寄存器transmitreceive holding register
當(dāng)lcr.7=0,且a2a1a0=000時(shí),讀操作單片機(jī)訪問(wèn)接收緩沖寄存器(rhr),寫操作單片機(jī)訪問(wèn)發(fā)送保持寄存器(thr)。
(3) 中斷允許寄存器(interrupt enable register)
當(dāng)lcr.7=0,且a2a1a0=001時(shí),單片機(jī)訪問(wèn)中斷允許寄存器(ier)。
ier.0=1,允許接收器數(shù)據(jù)就緒中斷。
ier.1=1,允許發(fā)送保持寄存器為空時(shí)中斷。即當(dāng)從發(fā)送保持寄存器把一個(gè)字節(jié)移到移位寄存器時(shí),產(chǎn)生一個(gè)中斷,使發(fā)送保持寄存器能夠接收下一個(gè)字節(jié)。
ier.2=1,表示允許接收有錯(cuò)信息或間斷條件中斷。
ier.3=1,modem狀態(tài)變化中斷。
ier.4~7,沒有使用,設(shè)置為零。
mov dptr,#ier
mov a,#01h
movx @ dptr ,a
(4) fifo控制寄存器(fifo control register)
數(shù)據(jù)發(fā)送和接收模式的選擇。gm16c550提供了兩種模式:fifo和dma。其中dma又有兩種模式dma的模式0、dma的模式1可供選擇。我的舉例采用默認(rèn)的dma的模式0。感興趣的朋友可試一試其它模式,這里不再說(shuō)明。
(5) 中斷狀態(tài)寄存器(interrupt status register)
前面介紹了幾種中斷,它們?cè)诟髯缘臈l件下產(chǎn)生中斷,uart都會(huì)輸出一個(gè)高電平的中斷請(qǐng)求信號(hào),觸發(fā)同一個(gè)中斷請(qǐng)求。為了具體判斷是哪一種中斷,還應(yīng)該檢測(cè)isr,如表3所列。
表3 中斷狀態(tài)寄存器
500this.width=500 border=0>
isr.0=1,表示沒有中斷產(chǎn)生。
isr.4~5沒有使用。
isr.6~7,當(dāng)采用fifo的接收和發(fā)送模式時(shí),這兩位都設(shè)置為1;反之,都設(shè)置為0。
(6) 線路控制寄存器(line control register)
lcr.0~1,表示發(fā)送和接收時(shí)的字節(jié)長(zhǎng)度,如表4所列。
lcr.2,這一位與lcr.0~1共同定義了停止位的長(zhǎng)度,如表5所列。
表4 線路控制寄存器lcr.0~1
500this.width=500 border=0>
表5 線路控制寄存器lcr.2
500this.width=500 border=0>
lcr.3=1,進(jìn)行奇偶校驗(yàn)。
lcr.4=0,進(jìn)行奇校驗(yàn);lcr.4=1,進(jìn)行偶校驗(yàn)。
lcr.5=1,奇偶校驗(yàn)位恒為1或0。
表6為線路控制寄存器lcr.3~5。
表6 線路控制寄存器lcr.3~5
500this.width=500 border=0>
lcr.6=1,表示允許間斷,即允許發(fā)送器寄存器保持一個(gè)完整幀時(shí)間以上的空號(hào)狀態(tài)。
lcr.7,用于區(qū)分訪問(wèn)除數(shù)鎖存寄存器還是訪問(wèn)接收緩沖/發(fā)送保持和中斷允許寄存器。
movdptr,#lcr;通訊傳輸長(zhǎng)度為8位,停止位為1,
;偶校驗(yàn)
mova,#1bh
movx @dptr,a
(7) modem控制寄存器(modem control register)
這是一個(gè)modem和外設(shè)接口的寄存器。
mcr.0=1時(shí),強(qiáng)制芯片引腳dtr=0;
mcr.0=0時(shí),強(qiáng)制芯片引腳dtr=1。
mcr.1=1時(shí),強(qiáng)制芯片引腳rts=0;
mcr.1=0時(shí),強(qiáng)制芯片引腳rts=1。
mcr.2=1時(shí),強(qiáng)制芯片引腳op1=0;
mcr.2=0時(shí),強(qiáng)制芯片引腳op1=1。
mcr.3=1時(shí),強(qiáng)制芯片引腳op2=0;
mcr.2=0時(shí),強(qiáng)制芯片引腳op2=1。
mcr.4=1時(shí),循環(huán)返回模式,可用于芯片自測(cè)。
其它位保留。
movdptr,#mcr;異步串口芯片的dtr、rts引腳送出邏輯低電平
mova,#03h
movx @dptr,a
(8) 線路狀態(tài)寄存器(line status register)
lsr.0:當(dāng)接收移位寄存器接收到的字節(jié)*移到接收緩沖寄存器時(shí),該位置1。如果讀該寄存器,那么這一位被清零。
lsr.1:出現(xiàn)超越錯(cuò)時(shí),這一位被置1。讀該寄存器,這一位被清零。
lsr.2:出現(xiàn)奇偶校驗(yàn)錯(cuò)時(shí),這一位被置1。讀該寄存器,這一位被清零。
lsr.3:出現(xiàn)停止位不完整、丟失、空號(hào)時(shí),這一位被置1。讀該寄存器,這一位被清零。
lsr.4:當(dāng)接收寄存器檢測(cè)到空號(hào)狀態(tài)已持續(xù)一個(gè)完整幀傳輸時(shí)間時(shí),這一位被置1。讀該寄存器,這一位被清零。
lsr.5:當(dāng)發(fā)送的字節(jié)從發(fā)送保持寄存器移到發(fā)送移位寄存器時(shí),該位置1。
lsr.6:當(dāng)發(fā)送保持寄存器和發(fā)送移位寄存器都沒用字節(jié)時(shí),該位置1。
lsr.7:當(dāng)奇偶校驗(yàn)錯(cuò)、幀格式錯(cuò)、空號(hào)錯(cuò)有一個(gè)出現(xiàn)時(shí),該位置1。
setdata
mov dptr,#lsr
movx a,@dptr
jnb acc.5,setdata
mov a,datanumber;datanumber記錄發(fā)送字符的個(gè)數(shù)
mov dptr,#atcommand
atcommand定義at命令參數(shù)的起始地址
movc a,@a+dptr
mov dptr,#thr ;發(fā)送保持寄存器
movx @dptr,a
inc datanumber
mov a,datanumber
cjne a,#0bh,setdata ;發(fā)送11個(gè)字符
atcommand:db “a”,“t”,“s”,“0”,“=”,“2”,“s”,“8”,“=”,“5”,0dh
(9) modem狀態(tài)寄存器(modem status register)
msr.0~3=1時(shí),表示自上一次單片機(jī)讀msr寄存器之后,分別反映modem控制邏輯的四個(gè)輸入信號(hào)的狀態(tài)發(fā)生了變化。
msr.0=1時(shí),清除發(fā)送信號(hào)(cts)已經(jīng)發(fā)生了變化。
msr.1=1時(shí),數(shù)據(jù)設(shè)備就緒信號(hào)(dsr)已經(jīng)發(fā)生了變化。
msr.2=1時(shí),振鈴信號(hào)(ri)已經(jīng)發(fā)生了變化。
msr.3=1時(shí),載波信號(hào)(dcd)已經(jīng)發(fā)生了變化。
msr.4~7四位分別反映modem控制邏輯的四個(gè)輸入信號(hào)的當(dāng)前狀態(tài)。
msr.4=1時(shí),清除發(fā)送信號(hào)(cts)有效。
msr.5=1時(shí),數(shù)據(jù)設(shè)備就緒信號(hào)(dsr)有效。
msr.6=1時(shí),振鈴信號(hào)(ri)有效。
msr.7=1時(shí),載波信號(hào)(dcd)有效。
(10) 臨時(shí)數(shù)據(jù)寄存器(scratchpag register)
可以存儲(chǔ)用戶信息。
有了上面知識(shí)的準(zhǔn)備后就可以輕松地寫出程序,現(xiàn)在可把零散的東西組織起來(lái)。
gm16c550芯片初始化模塊
init_16c550:
mov dptr,#lcr ;除數(shù)鎖定允許
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;通訊傳輸長(zhǎng)度為8位,停止位為1,偶校驗(yàn)
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
采用中斷的方式接數(shù)據(jù)
interrupt2:
push acc
push dph
push dpl
push psw
mov dptr,#rhr ;接受數(shù)據(jù)
movx a,@dptr
……………………
pop psw
pop dpl
pop dph
pop acc
reti
至此,完成了一個(gè)小型的單片機(jī)modem通訊系統(tǒng)。其中的檢錯(cuò)寄存器、modem狀態(tài)寄存器等應(yīng)用限于篇幅沒有*涉及到。有興趣的朋友可以試一試,那么你就會(huì)對(duì)modem通訊有一個(gè)比較深刻的認(rèn)識(shí)。
上一個(gè):比亞迪電動(dòng)汽車換一次電池多少錢,一分鐘打消你買比亞迪dmi
下一個(gè):104K 16V X7R 0805電容型號(hào)推薦

氣質(zhì)聯(lián)用儀?-Agilent6890N+5973
美國(guó)jamesbury 球閥
在我國(guó)離婚如何分割沒有房產(chǎn)證的財(cái)產(chǎn)
日常生活中的茶文化
這些割曬機(jī)的保養(yǎng)你該知道
探索SCM440結(jié)構(gòu)鋼的特性和應(yīng)用領(lǐng)域
洋桔梗生產(chǎn)要注重田間管理
OSE-Y30第三代高速組織研磨器操作指南
選購(gòu)柴油發(fā)電機(jī)組真假辨別方法
1公分彩色橡塑板能達(dá)到多少度