单片机的MODEM通讯
(8) 线路状态寄存器(line status register)
豹LSR.0:当接收移位寄存器接收到的字节完全移到接收缓冲寄存器时,该位置1。如果读该寄存器,那么这一位被清零。
豹LSR.1:出现超越错时,这一位被置1。读该寄存器,这一位被清零。
豹LSR.2:出现奇偶校验错时,这一位被置1。读该寄存器,这一位被清零。
豹LSR.3:出现停止位不完整、丢失、空号时,这一位被置1。读该寄存器,这一位被清零。
豹LSR.4:当接收寄存器检测到空号状态已持续一个完整帧传输时间时,这一位被置1。读该寄存器,这一位被清零。
豹LSR.5:当发送的字节从发送保持寄存器移到发送移位寄存器时,该位置1。
豹LSR.6:当发送保持寄存器和发送移位寄存器都没用字节时,该位置1。
豹LSR.7:当奇偶校验错、帧格式错、空号错有一个出现时,该位置1。
Setdata:
MOV DPTR,#LSR
MOVX A,@DPTR
JNB ACC.5,Setdata
MOV A,DataNumber;DataNumber记录发 ;送字符的个数
MOV DPTR,#AtCommand ;AtCommand定义AT命令参数的起始地址
MOVC A,@A+DPTR
MOV DPTR,#THR ;发送保持寄存器
MOVX @DPTR,A
INC DataNumber
MOV A,DataNumber
CJNE A,#0BH,Setdata ;发送11个字符
AtCommand:DB “A”,“T”,“S”,“0”,“=”,“2”,“S”,“8”, “=”,“5”,0DH
(9) MODEM状态寄存器(MODEM status register)
豹MSR.0~3=1时,表示自上一次单片机读MSR寄存器之后,分别反映MODEM控制逻辑的四个输入信号的状态发生了变化。
豹MSR.0=1时,清除发送信号(CTS)已经发生了变化。
豹MSR.1=1时,数据设备就绪信号(DSR)已经发生了变化。
豹MSR.2=1时,振铃信号(RI)已经发生了变化。
豹MSR.3=1时,载波信号(DCD)已经发生了变化。
豹MSR.4~7四位分别反映MODEM控制逻辑的四个输入信号的当前状态。
豹MSR.4=1时,清除发送信号(CTS)有效。
豹MSR.5=1时,数据设备就绪信号(DSR)有效。
豹MSR.6=1时,振铃信号(RI)有效。
豹MSR.7=1时,载波信号(DCD)有效。
(10) 临时数据寄存器(scratchpag register)
可以存储用户信息。
有了上面知识的准备后就可以轻松地写出单片机的MODEM通讯程序。现在可把零散的东西组织起来了。
GM16C550芯片初始化模块
Init_16C550:
豹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
豹MOV DPTR,#LCR;通讯传输长度为8位,停止 ;位为1,偶校验
豹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
采用中断的方式接数据
Interrupt2:
豹PUSH ACC
豹PUSH DPH
豹PUSH DPL
豹PUSH PSW
豹MOV DPTR,#RHR ;接受数据
豹MOVX A,@DPTR
豹……………………
豹POP PSW
豹POP DPL
豹POP DPH
豹POP ACC
豹RETI
至此,完成了一个小型的单片机MODEM通讯系统。其中的检错寄存器、MODEM状态寄存器等应用限于篇幅没有完全涉及到。有兴趣的朋友可以试一试,那么你就会对MODEM通讯有一个比较深刻的认识。
- 用双端口RAM实现与PCI总线接口的数据通讯(05-06)
- 朗谷数字音频处理技术在音频及网络通讯领域的应用(05-19)
- 用FIFO实现DSP间的双向并行异步通讯(08-15)
- 基于VxWorks的系统故障快速恢复设计(01-12)
- 基于Windows CE.NET实现蓝牙通讯模块的几种方法(01-25)
- 基于DSP核信号采集系统通讯接口电路设计(01-16)