GSM Module - Receive String Code

Status
Not open for further replies.

Suraj143

Active Member
I want to detect whether it is a call or a SMS on a SIM800L module. I wrote my own ISR based method. but sometimes its messed up not receiving the correct characters.
Is there any proper way to receive them?

Code:
            org            0004h
            movwf       W_Temp          ; save off current W register contents
            movf        STATUS,W        ; move status register into W register
            movwf        S_Temp
            bcf            STATUS,RP0        ; B0
            ;
;-------------------------------------------------------------------------------------
Check_UART    btfss        PIR1,RCIF        ; Is it a Recieve interrupt?
            goto        ISR_Exit       
            movf        RCREG,W            ; read the buffer
            andlw        b'01111111'
            movwf        RX_DATA            ; load to a temperory register
;----------------------------------------------------------------------

Start_RX    movf        RX_DATA,W
            xorlw        .13                ; CR?
            btfsc        STATUS,Z
            goto        ISR_Exit
            movf        RX_DATA,W
            xorlw        .10                ; LF?
            btfsc        STATUS,Z
            goto        ISR_Exit
            movf        RX_DATA,W
            ;
            btfsc        Flag_Register,String_CALL
            goto        Do_CALL
            btfsc        Flag_Register,String_SMS
            goto        Do_SMS
            ;
Check_Call    xorlw        'R'
            btfss        STATUS,Z
            goto        Check_SMS
            movf        RX_DATA,W
            goto        Do_CALL
Check_SMS    movf        RX_DATA,W
;--------------------------------------------------
;+CMT: "+44128740842","","19/14/05,14:24:45+22"
;Hi
Do_SMS        bsf            Flag_Register,String_SMS
            btfss        SMS_Register,0
            goto        SMS_State_1
            btfss        SMS_Register,1
            goto        SMS_State_2
            btfss        SMS_Register,2
            goto        SMS_State_3
            btfss        SMS_Register,3
            goto        SMS_State_4
            btfss        SMS_Register,4
            goto        SMS_State_5
            btfss        SMS_Register,5
            goto        SMS_State_6
            btfss        SMS_Register,6
            goto        SMS_State_7
            btfss        SMS_Register,7
            goto        SMS_State_8
            goto        String_Exit
            
SMS_State_1    xorlw        '+'
            btfss        STATUS,Z
            goto        String_Exit
            bsf            SMS_Register,0
            goto        ISR_Exit           
            
SMS_State_2    xorlw        'C'
            btfss        STATUS,Z
            goto        String_Exit
            bsf            SMS_Register,1
            goto        ISR_Exit           
;=======================================================================       
Do_CALL        bsf            Flag_Register,String_CALL
            btfss        Call_Register,0
            goto        State_1
            btfss        Call_Register,1
            goto        State_2
            btfss        Call_Register,2
            goto        State_3
            btfss        Call_Register,3
            goto        State_4
            ;
            btfss        Call_Register,4
            goto        State_5
            ;
            btfss        Call_Register,5
            goto        State_6
            goto        ISR_Exit
;-----------------------------------------------------------------------           
State_1        xorlw        'R'
            btfss        STATUS,Z
            goto        String_Exit
            bsf            Call_Register,0
            goto        ISR_Exit           

State_2        xorlw        'I'
            btfss        STATUS,Z
            goto        String_Exit
            bsf            Call_Register,1
            goto        ISR_Exit
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…