Check out and contribute to CodePedia, the wiki for developers.

View \TIER2.ASM

BANEL GSM

Submitted By: jaroban
Rating: starstarstarstar (Rate It)


; version 2.0

def_name1:      db      'Nezname miesto 1'
def_name2:      db      'Nezname miesto 2'

turn_gsm_on:    call    wait4it_f
                db      0,0,2,0
                setb    lift
tgo_again0:     call    switch_out
                call    puts_nf
                db      'turning on...',0
                jbc     lift,tgo_again0
                call    wait4it_f
                db      0,0,2,0
                call    switch_gsm
                clr     pwr_key
                call    tmr_int_f
                db      0,0,2,0
tgo_lp1:        call    do_them
                call    read_serial
                clr     a
                call    tmr_zro
                jnc     tgo_lp1
                setb    pwr_key
                call    tmr_int_f
                db      0,0,20,0
tgo_lp2:        call    do_them
                call    read_serial
                jnc     tgo_skip1
                call    find_nf
                db      'RDY',0
                ;anl     c,vdd_ext
                jc      tgo_ret
tgo_skip1:      clr     a
                call    tmr_zro
                jnc     tgo_lp2

tgo_lp2_5:      call    do_them
                call    get_chr
                jnc     tgo_skip2
                setb    lift
tgo_again1:     call    switch_out
                call    put_chr
                jbc     lift,tgo_again1
                jmp     tgo_lp2_5

tgo_skip2:      call    switch_gsm

                mov     wait_cnt,#1
tgo_lp3:        call    puts_nf
                db      'AT+IPR=9600',cr,0      ; set baud rate to 9600
                call    wait_for_ok
                jnc     tgo_lp3

                mov     wait_cnt,#1
tgo_lp4:        call    puts_nf
                db      'AT+CFUN=1',cr,0        ; make sure power stays on
                call    wait_for_ok
                jnc     tgo_lp4

                jmp     turn_gsm_on
tgo_ret:        setb    lift
tgo_again2:     call    switch_out
                call    puts_nf
                db      'success',0
                jbc     lift,tgo_again2
                ret

wait_for_ok:    mov     a,#5
                call    do_events
                db      'OK',0
                dw      wfo_done
                db      'ERROR',0
                dw      wfo_again
                db      0
                djnz    wait_cnt,wfo_again
                jmp     os_init
wfo_again:      call    cool_down
                clr     c
                ret
wfo_done:       call    cool_down
                setb    c
                ret

read_name_str:  call    switch_gsm
                mov     wait_cnt,#5
rns_again1:     call    cool_down
                call    puts_nf
                db      'AT+CPBR=',0
                call    insert_one
                call    puts_nf
                db      '8',cr,0
                mov     a,#5
                call    do_events
                db      '129,"',0
                dw      rns_skip1
                db      '145,"',0
                dw      rns_skip1
                db      'ERROR',0
                dw      rns_messed1
                db      0
rns_messed1:    djnz    wait_cnt,rns_again1
                sjmp    rns_default
rns_skip1:      call    get_name_str
                mov     tmp1,a
                mov     tmp2,#8
                mov     tmp3,#'"'
                call    read_string
                jnc     rns_messed1

                mov     wait_cnt,#5
rns_again2:     call    cool_down
                call    puts_nf
                db      'AT+CPBR=',0
                call    insert_one
                call    puts_nf
                db      '9',cr,0
                mov     a,#5
                call    do_events
                db      '129,"',0
                dw      rns_skip2
                db      '145,"',0
                dw      rns_skip2
                db      'ERROR',0
                dw      rns_messed2
                db      0
rns_messed2:    djnz    wait_cnt,rns_again2
rns_default:    call    get_def_name
                call    get_name_str
                mov     r0,a
                mov     r1,#16
                jmp     copy_from_code
rns_skip2:      call    get_name_str
                add     a,#8
                mov     tmp1,a
                mov     tmp2,#8
                mov     tmp3,#'"'
                call    read_string
                jnc     rns_messed2
                ret

read_signal:    call    switch_gsm
                call    puts_nf
                db      'AT+CSQ',cr,0
                mov     a,#5
                call    do_events
                db      '+CSQ: ##,',0
                dw      rsi_skip1
                db      '+CSQ: #,',0
                dw      rsi_skip2
                db      0
                ret
rsi_skip1:      dec     r0
                mov     a,@r0
                clr     c
                subb    a,#'0'
                mov     r1,a
                dec     r0
                mov     a,@r0
                clr     c
                subb    a,#'0'
                mov     b,#10
                mul     ab
                add     a,r1
                mov     signal,a
                ret
rsi_skip2:      dec     r0
                mov     a,@r0
                clr     c
                subb    a,#'0'
                mov     signal,a
                ret

; tmp='1','2',...
get_number:     call    switch_gsm
                mov     wait_cnt,#5
gn_again:       call    cool_down
                call    puts_nf
                db      'AT+CPBR=',0
                call    insert_one
                mov     a,tmp1
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      '+CPBR: #,"',0
                dw      gn_skip2
                db      'ERROR',0
                dw      gn_messed
                db      0
gn_messed:      djnz    wait_cnt,gn_again
                clr     c
                ret
gn_skip2:       push    tmp1
                mov     tmp1,#number_str
                mov     tmp2,#16
                mov     tmp3,#'"'
                call    read_string
                pop     tmp1
                jnc     gn_messed
                setb    c
                ret

; tmp1='1','2',...
store_number:   call    switch_gsm
                call    puts_nf
                db      'AT+CPBW=',0
                call    insert_one
                mov     a,tmp1
                call    put_chr
                mov     a,#','
                call    put_chr
                mov     a,#'"'
                call    put_chr
                mov     r0,#number_str
                mov     r1,#16
                call    puts_no_spaces
                call    puts_nf
                db      '",,"num',0
                mov     a,tmp1
                call    put_chr
                mov     a,#'"'
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      'OK',0
                dw      sn_yes
                db      'ERROR',0
                dw      sn_no
                db      0
sn_no:          clr     c
                ret
sn_yes:         setb    c
                ret

; tmp1='1','2',...
read_sms:       call    switch_gsm
                mov     wait_cnt,#5
rs_again:       call    cool_down
                call    puts_nf
                db      'AT+CMGR=',0
                mov     a,tmp1
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      'Status',0
                dw      rs_skip2
                db      'STATUS',0
                dw      rs_skip2
                db      'Reset',0
                dw      rs_skip3
                db      'RESET',0
                dw      rs_skip3
                db      'ERROR',0
                dw      rs_ret
                db      'OK',0
                dw      rs_cont
                db      0
rs_messed:      djnz    wait_cnt,rs_again
rs_cont:        mov     wait_cnt,#5
rs_again2:      call    cool_down
                call    puts_nf
                db      'AT+CMGR=',0
                mov     a,tmp1
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      '"+',0
                dw      rs_skip1
                db      'ERROR',0
                dw      rs_ret
                db      'OK',0
                dw      rs_ret
                db      0
rs_cont2:       djnz    wait_cnt,rs_again2
rs_ret2:        ret
rs_skip1:       push    tmp1
                mov     tmp1,#number_str
                mov     tmp2,#16
                mov     tmp3,#'"'
                call    read_string
                pop     tmp1
                jc      rs_ret2
                jmp     rs_cont2
rs_skip2:       setb    send_status
                jmp     rs_cont
rs_skip3:       setb    send_reset
                jmp     rs_cont

; tmp1='1','2',...
delete_sms:     call    switch_gsm
                mov     wait_cnt,#5
ds_again:       call    cool_down
                call    puts_nf
                db      'AT+CMGD=',0
                mov     a,tmp1
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      'OK',0
                dw      ds_done
                db      'ERROR',0
                dw      ds_error
                db      0
ds_error:       djnz    wait_cnt,ds_again
ds_done:        ret

store_name:     call    switch_gsm
                call    cool_down
                call    puts_nf
                db      'AT+CPBW=',0
                call    insert_one
                call    puts_nf
                db      '8,"0000111222",,"',0
                call    get_name_str
                mov     r0,a
                mov     r1,#8
                call    puts
                mov     a,#'"'
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      'OK',0
                dw      sn_next
                db      'ERROR',0
                dw      sn_no
                db      0
                clr     c
                ret
sn_next:        call    cool_down
                call    puts_nf
                db      'AT+CPBW=',0
                call    insert_one
                call    puts_nf
                db      '9,"0000111222",,"',0
                call    get_name_str
                add     a,#8
                mov     r0,a
                mov     r1,#8
                call    puts
                mov     a,#'"'
                call    put_chr
                mov     a,#cr
                call    put_chr
                mov     a,#5
                call    do_events
                db      'OK',0
                dw      sn_yes
                db      'ERROR',0
                dw      sn_no
                db      0
                clr     c
                ret

sms_new_line:   mov     a,#cr
                call    put_chr
                call    wait4it_f
                db      t_wait,0,1,0
                ret

send_sms_number:
                call    puts_nf
                db      'AT+CMGS="',0
                jnb     send_plus,ssn_skip1
                mov     a,#'+'
                call    put_chr
ssn_skip1:      mov     r0,#number_str
                mov     r1,#16
                call    puts_no_spaces
                mov     a,#'"'
                call    put_chr
                call    sms_new_line
                call    get_name_str
                mov     r0,a
                mov     r1,#16
                call    puts
                jmp     sms_new_line
               
send_sms1:      clr     send_plus
                mov     tmp1,#'1'
                call    get_number
                jc      sst_entry
                ret

send_status_sms:
                setb    send_plus
                call    lift_on
                jnc     sst_done
sst_entry:      mov     wait_cnt,#5
sst_lp1:        call    switch_out
                call    puts_nf
                db      'stat',0
                mov     r0,#srl_fifo0
                call    fifo_clear
                mov     tmp1,#status_str
                mov     tmp2,#32
                mov     tmp3,#esc
                call    read_string
                jc      sst_skip1
                djnz    wait_cnt,sst_lp1

                mov     wait_cnt,#3
sst_lp2:        call    switch_gsm
                call    cool_down
                call    send_sms_number
                call    puts_nf
                db      'Vytah neodpoveda.',0
                call    sms_new_line
                mov     a,#ctrl_z
                call    put_chr
                mov     a,#30
                call    do_events
                db      '+CMGS:',0
                dw      sst_done
                db      'ERROR',0
                dw      sst_drain2
                db      0
                mov     a,#esc
                call    put_chr
sst_drain2:     djnz    wait_cnt,sst_lp2
sst_done:       ret

sst_skip1:      mov     wait_cnt,#3
sst_lp3:        call    switch_gsm
                call    cool_down
                call    send_sms_number
                mov     r0,#status_str
                mov     r1,#16
                call    puts
                call    sms_new_line
                mov     r0,#status_str+16
                mov     r1,#16
                call    puts
                call    sms_new_line
                mov     a,#ctrl_z
                call    put_chr
                mov     a,#30
                call    do_events
                db      '+CMGS:',0
                dw      sst_done
                db      'ERROR',0
                dw      sst_drain3
                db      0
                mov     a,#esc
                call    put_chr
sst_drain3:     djnz    wait_cnt,sst_lp3
                ret

if 0
send_sms2:      clr     send_plus
                mov     tmp1,#'1'
                call    get_number
                jnc     ss2_done
                mov     wait_cnt,#3
ss2_lp:         call    send_sms_number
                call    puts_nf
                db      'Vytah je znovu OK.',0
                call    sms_new_line
                mov     a,#ctrl_z
                call    put_chr
                mov     a,#30
                call    do_events
                db      '+CMGS:',0
                dw      ss2_done
                db      'ERROR',0
                dw      ss2_drain
                db      0
                mov     a,#esc
                call    put_chr
ss2_drain:      djnz    wait_cnt,ss2_lp
ss2_done:       ret
endif

send_sms3:      clr     send_plus
                mov     tmp1,#'1'
                call    get_number
                jnc     ss3_done
                mov     wait_cnt,#3
ss3_lp:         call    send_sms_number
                call    puts_nf
                db      'Nap. baterky nizke.',0
                call    sms_new_line
                mov     a,#ctrl_z
                call    put_chr
                mov     a,#30
                call    do_events
                db      '+CMGS:',0
                dw      ss3_done
                db      'ERROR',0
                dw      ss3_drain
                db      0
                mov     a,#esc
                call    put_chr
ss3_drain:      djnz    wait_cnt,ss3_lp
ss3_done:       ret

send_sms4:      clr     send_plus
                mov     tmp1,#'1'
                call    get_number
                jnc     ss4_done
                mov     wait_cnt,#3
ss4_lp:         call    send_sms_number
                call    puts_nf
                db      'Nap. baterky OK.',0
                call    sms_new_line
                mov     a,#ctrl_z
                call    put_chr
                mov     a,#30
                call    do_events
                db      '+CMGS:',0
                dw      ss4_done
                db      'ERROR',0
                dw      ss4_drain
                db      0
                mov     a,#esc
                call    put_chr
ss4_drain:      djnz    wait_cnt,ss4_lp
ss4_done:       ret

hang_up:        call    cool_down
                call    puts_nf
                db      'ATH',cr,0
                call    wait4it_f
                db      t_wait,0,1,0
                call    puts_nf
                db      'ATH',cr,0
                call    wait4it_f
                db      t_wait,0,1,0
                jmp     cool_down

corner
© 1996-2008. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
Publisher: Lars Hagelin.
bootstrapLabs Logo A bootstrapLabs project.