⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modemt.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************MODEMT********************
;本程序实现单片机控制MODEM拨号和发送数据,在4M的主频下波特率为9600。
;入口参数:待发送数据在首地址在SADR中,接收缓冲区首地址在DADR中。
;出口参数:若联机成功,W=0,否则,W=0FFH。
;占用资源:W,STATUS,TMR1,USART,023H,024H,028H~02AH,2重堆栈。
;说    明:发送数据首地址在SADR中,数据结束符为0AH(换行符)。

           IFNDEF        MODEMT1      
             
            #DEFINE      MODEMT1
            INCLUDE      "DLYNMS.ASM"
                                    
SAVEW       EQU         07FH        ;现场保护中保存W的地址
SAVES       EQU         07EH

GETATDATA  ADDWF	PCL,F          
           DT           "ATZ0",D'13'
           DT           "ATM0E0N0S0=1"  ;MODEM初始化
           DT           .13          ;确认
           DT           "ATH0",D'13' ;挂机           
           DT           "ATDTXXXXX"  ;拨号命令,X可为任意号码
           DT           .13            
GETDATA3   ADDWF        PCL,F
           DT           "CONNECT 9600",D'13',D'10'
GETDATA4   ADDWF        PCL,F
           DT           "NO CARRIER",D'13',D'10'
GETDATA5   ADDWF        PCL,F
           DT           "OK",0DH,0AH

MODEMT     MOVF         DADR,W      ;接收数据缓冲区首地址
           MOVWF        FSR
           CLRF         SOU
           BSF          STATUS,RP0
           MOVLW        19H
           MOVWF        SPBRG       
           BSF          TXSTA,BRGH  ;高速模式,波特率为9600
           BCF          TXSTA,SYNC  ;异步模式
           BCF          TXSTA,TX9   ;发送8位数据
           BSF          TXSTA,TXEN  ;使能发送功能
           BSF          PIE1,RCIE   ;开串行口中断  
           BCF          PIE1,TXIE
           BCF          STATUS,RP0
           BCF          RCSTA,RX9   ;接收8位数据
           BSF          RCSTA,SPEN  ;使能串行口
           BSF          RCSTA,CREN  ;开始连续接收          
           BCF          PIR1,RCIF   ;清中断标志
           BSF          INTCON,PEIE
           BSF          INTCON,GIE

           CLRF         TEMP1
           CALL         SENDCMD     ;发送ATZ命令

           MOVLW        .5
           MOVWF        TEMP1
           CALL         SENDCMD     ;MODEM初始化

           MOVLW        .23
           MOVWF        TEMP1
           CALL         SENDCMD     ;拨号命令

LOOP114    BTFSC        SOU,1
           RETLW        0FFH        ;联机失败,带错误码返回
           BTFSS        SOU,0
           GOTO         LOOP114     ;等待联机信号
           MOVF         SADR,W      ;发送数据缓冲区首地址
           MOVWF        FSR        
NEXT72     MOVF         INDF,W
           MOVWF        TXREG
           INCF         FSR,F
           BTFSS        PIR1,TXIF
           GOTO         $-1
           SUBLW        0AH         ;遇到换行符则数据块发送结束
           BTFSS        STATUS,Z
           GOTO         NEXT72           
           
           CLRF         SOU
           CALL         DLYNMS
           CALL         DLYNMS
           CALL         DLYNMS
           CALL         DLYNMS      ;延时1S

           MOVF         DADR,W
           MOVWF        FSR
           CLRF         SOU
          
           MOVLW        .3
           MOVWF        TEMP1
           MOVLW        '+'
LOOP113    MOVWF        TXREG       ;断开连线并进入命令状态
           NOP
           BTFSS        PIR1,TXIF
           GOTO         $-1                      
           DECFSZ       TEMP1,F
           GOTO         LOOP113
           BTFSS        SOU,2
           GOTO         $-1             
 
           MOVLW        .18
           MOVWF        TEMP1
           CALL         SENDCMD     ;挂机
           RETLW        0
;******************发送AT指令********************
SENDCMD    BCF          SOU,2
SENDCMD1   MOVF         TEMP1,W
           CALL         GETATDATA   ;取AT指令
           MOVWF        TXREG       ;开始发送
           SUBLW        .13
           BTFSC        STATUS,Z
           GOTO         DONE30
           BTFSS        PIR1,TXIF
           GOTO         $-1
           INCF         TEMP1,F
           GOTO         SENDCMD1
DONE30     MOVF         SOU,F
           BTFSC        STATUS,Z
           GOTO         DONE30           
           RETURN
;*****************接收中断服务程序***************
RCINT1     MOVWF        SAVEW
           SWAPF        STATUS,W
           CLRF         STATUS
           MOVWF        SAVES       ;保护现场

           MOVF         RCREG,W
           MOVWF        INDF
           INCF         FSR,F       ;接收数据

           SUBLW        0AH
           BTFSS        STATUS,Z
           GOTO         BACK
           MOVF         DADR,W
           MOVWF        FSR         ;恢复数据缓冲区首地址

           MOVLW        .14
           MOVWF        TEMP2
           CLRF         TEMP3
NEXT77     MOVF         TEMP3,W
           CALL         GETDATA3
           SUBWF        INDF,W
           BTFSS        STATUS,Z
           GOTO         NEXT74
           INCF         FSR,F
           INCF         TEMP3,F
           DECFSZ       TEMP2,F
           GOTO         NEXT77      ;判断是否返回"CONNECT"信号
           BSF          SOU,0       ;置联机标志
           GOTO         BACK1
NEXT74     MOVF         DADR,W
           MOVWF        FSR
           MOVLW        .12
           MOVWF        TEMP2
           CLRF         TEMP3
NEXT73     MOVF         TEMP3,W
           CALL         GETDATA4
           SUBWF        INDF,W
           BTFSS        STATUS,Z
           GOTO         NEXT75
           INCF         FSR,F
           INCF         TEMP3,F
           DECFSZ       TEMP2,F
           GOTO         NEXT73      ;判断是否返回"NO CARRIER"信号
           BSF          SOU,1       ;置联机标志
           GOTO         BACK1
NEXT75     MOVF         DADR,W
           MOVWF        FSR
           MOVLW        .4
           MOVWF        TEMP2
           CLRF         TEMP3
NEXT76     MOVF         TEMP3,W
           CALL         GETDATA5
           SUBWF        INDF,W
           BTFSS        STATUS,Z
           GOTO         BACK1
           INCF         FSR,F
           INCF         TEMP3,F
           DECFSZ       TEMP2,F
           GOTO         NEXT76      ;判断是否返回"OK"信号
           BSF          SOU,2
BACK1      MOVF         DADR,W
           MOVWF        FSR          
BACK       SWAPF        SAVES,W
           MOVWF        STATUS
           SWAPF        SAVEW,F
           SWAPF        SAVEW,W     ;恢复现场
           RETFIE
          ENDIF
            
           




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -