; version 1.0
serial_init: mov r0,#srl_fifo0
mov a,#sf0_size
call fifo_init
mov r0,#srl_fifo
mov a,#sf_size
call fifo_init
mov scon,#50h
mov a,#low(-srl_period)
mov tl2,a
mov rcap2l,a
mov a,#high(-srl_period)
mov th2,a
mov rcap2h,a
mov t2mod,#0
mov t2con,#00110100b
clr srl_sent_data
setb es
ret
serial_int: clr ea
push psw
push acc
anl psw,#11100111b
jnb ri,si_try_ti
clr ri
push ar0
push ar1
push b
mov r0,#srl_fifo0
mov a,sbuf
call fifo_write
pop b
pop ar1
pop ar0
si_try_ti: jnb ti,si_done
clr ti
setb srl_sent_data
si_done: pop acc
pop psw
setb ea
reti
read_serial: mov r0,#srl_fifo0
call fifo_read
jnc rs_ret
mov r0,#srl_fifo
call fifo_write
setb c
rs_ret: ret
switch_gsm: setb direction
mov p3,#mask_gsm
ret
switch_out: clr direction
jb lift,so_lift2
mov p3,#mask_out1
ret
so_lift2: mov p3,#mask_out2
ret
cool_down: jnb direction,cd_done
call tmr_int_f
db t_cool,0,1,0
cd_lp1: call do_them
call read_serial
jnc cd_skip1
call get_chr
call tmr_int_f
db t_cool,0,1,0
jmp cd_lp1
cd_skip1: mov a,#t_cool
call tmr_zro
jnc cd_lp1
cd_done: ret
get_chr: mov r0,#srl_fifo
jmp fifo_read
put_chr: jnb direction,pc_ok
if debug
call switch_out
call pc_ok
call switch_gsm
endif
pc_ok: mov sbuf,a
pc_lp2: call rst_wd
jnb srl_sent_data,pc_lp2
clr srl_sent_data
ret
put_byte: mov b,a
swap a
call hex_asc
call put_chr
mov a,b
call hex_asc
jmp put_chr
puts: mov a,@r0
call put_chr
inc r0
djnz r1,puts
ret
puts_no_spaces: mov a,@r0
cjne a,#' ',pns_skip1
sjmp pns_skip2
pns_skip1: call put_chr
pns_skip2: inc r0
djnz r1,puts_no_spaces
ret
puts_nf: pop dph
pop dpl
sjmp pnf_entry
pnf_lp: call put_chr
pnf_entry: clr a
movc a,@a+dptr
inc dptr
jnz pnf_lp
jmp @a+dptr