;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; main loop ~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
loop
movlw 8 ; value used for lamp test |00
btfsc PORTA,5 ; lamp test? yes, skip, else |00
movf PORTA,W ; get input |00
andlw b'00001111' ; lower nibble only |00
movwf temp ; save temporarily |00
call bcd7seg ; W = digit segment pattern |00
movf temp,F ; if input = 0, set Z = 1 |00
bnz display ; branch to display '1'..'F' |00
;
; handle '0' value (leading zero suppression)
;
btfss PORTA,6 ; blank in? no, skip, else |00
movlw b'00000000' ; W = blank segment pattern |00
btfss PORTA,6 ; blank in? no, skip, else |00
bcf PORTA,7 ; blank out 'on' |00
display
btfss PORTB,0 ; CC type (1)? yes, skip, else |00
xorlw 0xFF ; CA type (0) (invert pattern) |00
movwf PORTB ; display '0'..'F' pattern |00
latch
btfss PORTA,4 ; latch high? yes, skip, else |00
bsf PORTA,7 ; blank out 'off' |00
btfss PORTA,4 ; latch high? yes, skip, else |00
goto latch ; branch (wait for active low) |00
goto loop ; branch (loop) |00
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
end