*/
Do you receive the Programmer's Heaven newsletter? If not, why not subscribe?
*/

View BNL_5X7\INPUT.ASM

BANEL 5x7

Submitted By: jaroban
Rating: (Not rated) (Rate It)


; version 1.0

read_inputs:    mov     a,p3
                jb      polarity_pin,ri_ok
                cpl     a
ri_ok:          mov     inputs,a
                ret

detect_clock:   mov     c,clock_pin
                anl     c,/clock_old
                jc      dc_yes
                mov     c,clock_pin
                mov     clock_old,c
                clr     a
                ret
dc_yes:         setb    clock_old
                mov     a,#0ffh
                ret
               
; r0=cnt  dptr -> table of bit addresses
pol_byte:       mov     r2,#0
pb_lp:          clr     a
                movc    a,@a+dptr
                mov     r1,a
                swap    a
                rl      a
                anl     a,#1fh
                add     a,#pol_table_old
                xch     a,r1
                anl     a,#7
                call    get_rvs_mask
                anl     a,@r1
                clr     c
                jz      pb_shift
                setb    c
pb_shift:       mov     a,r2
                rlc     a
                mov     r2,a
                inc     dptr
                djnz    r0,pb_lp
                ret

process_data:   mov     a,pol_index
                jnz     pd_get_bit
                jnb     data_pin,pd_ret
                inc     pol_index
pd_ret:         clr     a
                ret
pd_get_bit:     dec     a
                mov     r0,a
                swap    a
                rl      a
                anl     a,#1fh
                add     a,#pol_table
                xch     a,r0
                anl     a,#7
                call    get_rvs_mask
                jb      data_pin,pd_set
                cpl     a
                anl     a,@r0
                sjmp    pd_inc
pd_set:         orl     a,@r0
pd_inc:         mov     @r0,a
                inc     pol_index
                mov     a,#36+1
                cjne    a,pol_index,pd_ret
                mov     pol_index,#0

                mov     r0,#pol_table
                mov     r1,#pol_table_old
                mov     r2,#5
                mov     b,#0
pd_lp1:         mov     a,@r0
                mov     r3,a
                xch     a,@r1
                xrl     a,r3
                orl     b,a
                inc     r0
                inc     r1
                djnz    r2,pd_lp1
                mov     a,b
                jz      pd_ret
                mov     a,#0ffh
                ret

find_char:      mov     r0,a
                mov     dptr,#symbol_table
fc_lp:          clr     a
                movc    a,@a+dptr
                jz      fc_done
                xrl     a,r0
                jz      fc_done
                mov     a,dpl
                add     a,#6
                mov     dpl,a
                clr     a
                addc    a,dph
                mov     dph,a
                jmp     fc_lp
fc_done:        inc     dptr
                ret

show_data:      clr     ea

                mov     r0,#2
                mov     dptr,#pol_dir
                call    pol_byte
                rrc     a
                mov     going_up_n,c
                rrc     a
                mov     going_dn_n,c

                mov     r0,#8
                mov     dptr,#pol_ascii0
                call    pol_byte
                call    find_char
                mov     r0,#digits_n
                call    copy_data

                mov     r0,#8
                mov     dptr,#pol_ascii1
                call    pol_byte
                call    find_char
                mov     r0,#digits_n+1
                call    copy_data

                mov     a,#75
                call    init_transition

                setb    ea
                ret

process_bcd:    mov     a,inputs
                rr      a
                rr      a
                anl     a,#00111111b
                mov     r0,a
                mov     a,p0
                anl     a,#11000000b
                orl     a,r0
                xch     a,bcd_inputs
                xrl     a,bcd_inputs
                jz      pb_ret
                cpl     a
pb_ret:         ret

show_bcd:       clr     ea
                mov     a,bcd_inputs
                mov     c,acc.4
                mov     going_dn_n,c
                mov     c,acc.5
                mov     going_up_n,c
                anl     a,#00001111b
                mov     r0,a
                mov     a,bcd_inputs
                anl     a,#11000000b
                rl      a
                rl      a
                xrl     a,#1
                add     a,r0

                rl      a
                add     a,#low(number_table)
                mov     dpl,a
                clr     a
                addc    a,#high(number_table)
                mov     dph,a
                clr     a
                movc    a,@a+dptr
                mov     r7,a
                mov     a,#1
                movc    a,@a+dptr
                mov     r6,a

                call    find_char
                mov     r0,#digits_n
                call    copy_data
                mov     a,r7
                call    find_char
                mov     r0,#digits_n+1
                call    copy_data

                mov     a,#100
                call    init_transition

                setb    ea
                ret

initial_thread: mov     p0,#11100000b
                mov     p3,#0ffh
                clr     going_dn_o
                clr     going_up_o
                clr     clock_old
                clr     a
                mov     data_cnt,a
                mov     clock_cnt,a
                mov     pol_index,a
                mov     bcd_inputs,#0aah
                call    init_outputs

input_main_lp:  call    rst_wd
                call    read_inputs
                call    process_bcd
                jz      iml_skip1
                call    show_bcd
iml_skip1:      call    detect_clock
                jz      iml_skip2
                call    process_data
                jz      iml_skip2
                call    show_data
iml_skip2:      jmp     input_main_lp

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.