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

View \TIMING.ASM

BANEL GSM

Submitted By: jaroban
Rating: starstarstarstar (Rate It)


; version 2.0

timer0_int:     clr     ea
                push    psw
                push    acc
                anl     psw,#11100111b
                mov     wdtrst,#01eh
                mov     wdtrst,#0e1h
os_tm_again:    mov     a,timer_no
                jz      os_tm_end
                push    ar0
                push    ar1
                push    ar2
                push    ar3
                mov     r2,a
                rl      a
                rl      a
                add     a,#timer_table-1
                mov     r0,a
                mov     r1,a
os_tm_lp1:      mov     r3,#4
                mov     a,@r0
                djnz    acc,os_tm_skip1
                mov     @r0,#tmr_per_sec
                dec     r0
                dec     r3
                mov     a,@r0
                djnz    acc,os_tm_skip1
                mov     @r0,#60
                dec     r0
                dec     r3
                mov     a,@r0
                djnz    acc,os_tm_skip1
                dec     timer_no
                inc     r0
                inc     r0
                mov     r3,#4
os_tm_lp2:      mov     a,@r1
                mov     @r0,a
                dec     r0
                dec     r1
                djnz    r3,os_tm_lp2
                sjmp    os_tm_skip2
os_tm_skip1:    mov     @r0,a
                mov     a,r0
                clr     c
                subb    a,r3
                mov     r0,a
os_tm_skip2:    djnz    r2,os_tm_lp1
                pop     ar3
                pop     ar2
                pop     ar1
                pop     ar0
os_tm_end:      clr     tr0
                mov     a,tl0                   ; 1
                add     a,#low(-tmr0_period+7)  ; 1
                mov     tl0,a                   ; 1
                mov     a,th0                   ; 1
                addc    a,#high(-tmr0_period+7) ; 1
                mov     th0,a                   ; 1
                setb    tr0                     ; 1
                jc      os_tm_again
                pop     acc
                pop     psw
                setb    ea
                reti

; timer id, minutes, seconds, sub-seconds
tmr_int_f:      clr     ea
                pop     dph
                pop     dpl
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r3,a
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r4,a
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r5,a
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r6,a
                push    dpl
                push    dph
                sjmp    ti_entry_f

; a=timer id  r4=minutes  r5=seconds  r6=sub-seconds
tmr_int:        clr     ea
                mov     r3,a
ti_entry_f:     inc     r6
                inc     r5
                inc     r4
                djnz    r6,ti_adj
                mov     r6,#tmr_per_sec
                djnz    r5,ti_adj
                mov     r5,#60
                djnz    r4,ti_adj
                sjmp    zt_entry_ti
ti_adj:         mov     r0,#timer_table
                mov     a,timer_no
                jz      ti_ok
                mov     r1,a
ti_lp:          mov     a,@r0
                xrl     a,r3
                jz      ti_wr
                mov     a,r0
                add     a,#4
                mov     r0,a
                djnz    r1,ti_lp
                mov     a,timer_no
                xrl     a,#no_of_timers
                jz      ti_ret
ti_ok:          inc     timer_no
                mov     a,r3
                mov     @r0,a
ti_wr:          inc     r0
                mov     a,r4
                mov     @r0,a
                inc     r0
                mov     a,r5
                mov     @r0,a
                inc     r0
                mov     a,r6
                mov     @r0,a
ti_ret:         setb    ea
                ret

; a=timer id
zro_tmr:        clr     ea
                mov     r3,a
zt_entry_ti:    mov     r0,#timer_table
                mov     a,timer_no
                jz      zt_ret
                mov     r2,a
zt_lp1:         mov     a,@r0
                xrl     a,r3
                jz      zt_found
                mov     a,r0
                add     a,#4
                mov     r0,a
                djnz    r2,zt_lp1
zt_ret:         setb    ea
                ret
zt_found:       mov     a,timer_no
                rl      a
                rl      a
                add     a,#timer_table-4
                mov     r1,a
                mov     r2,#4
zt_lp2:         mov     a,@r1
                mov     @r0,a
                inc     r0
                inc     r1
                djnz    r2,zt_lp2
                dec     timer_no
                setb    ea
                ret

; a=timer id  c=timer is zero
tmr_zro:        clr     ea
                mov     r3,a
                mov     r0,#timer_table
                mov     a,timer_no
                jz      tz_yes
                mov     r1,a
tz_lp:          mov     a,@r0
                xrl     a,r3
                jz      tz_no
                mov     a,r0
                add     a,#4
                mov     r0,a
                djnz    r1,tz_lp
tz_yes:         setb    c
                setb    ea
                ret
tz_no:          clr     c
                setb    ea
                ret

if 0
; a=timer id  r4=minutes  r5=seconds  r6=sub-seconds
get_tmr:        clr     ea
                mov     r3,a
                mov     r0,#timer_table
                mov     a,timer_no
                jz      gt_zero
                mov     r1,a
gt_lp:          mov     a,@r0
                xrl     a,r3
                jz      gt_found
                mov     a,r0
                add     a,#4
                mov     r0,a
                djnz    r1,gt_lp
gt_zero:        clr     a
                mov     r4,a
                mov     r5,a
                mov     r6,a
                setb    ea
                ret
gt_found:       inc     r0
                mov     a,@r0
                mov     r4,a
                inc     r0
                mov     a,@r0
                mov     r5,a
                inc     r0
                mov     a,@r0
                mov     r6,a
                cjne    a,#tmr_per_sec,gt_skip1
                mov     r6,#0
                mov     a,r5
                cjne    a,#60,gt_skip2
                mov     r5,#0
                sjmp    gt_done
gt_skip1:       dec     r5
gt_skip2:       dec     r4
gt_done:        setb    ea
                ret
endif

rst_wd:         mov     wdtrst,#01eh
                mov     wdtrst,#0e1h
                mov     wd_cnt,#wd_max
                ret

wait4it_f:      clr     ea
                pop     dph
                pop     dpl
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r3,a
                mov     r7,a
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r4,a
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r5,a
                clr     a
                movc    a,@a+dptr
                inc     dptr
                mov     r6,a
                push    dpl
                push    dph
                call    ti_entry_f
w4if_lp:        push    ar7
                call    do_them
                pop     ar7
                mov     a,r7
                call    tmr_zro
                jnc     w4if_lp
                ret

wait4it:        mov     r7,a
                call    tmr_int
w4i_lp:         push    ar7
                call    do_them
                pop     ar7
                mov     a,r7
                call    tmr_zro
                jnc     w4i_lp
                ret

corner
© 1996-2008 CommunityHeaven LLC. 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.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.