單片機(jī)的MODEM通訊
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本文引用地址:http://www.ex-cimer.com/article/171883.htm
(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)備后就可以輕松地寫出單片機(jī)的MODEM通訊程序。現(xiàn)在可把零散的東西組織起來了。
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;通訊傳輸長度為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í)。
評(píng)論