;
; setup ports and display sub-system variables
;
bsf STATUS,RP0 ; bank 1 |B1
movlw h'FF' ; |B1
movwf TRISA ; make Port A all inputs |B1
clrf TRISB ; make Port B all outputs |B1
bcf STATUS,RP0 ; bank 0 |B0
clrf DigSel ; init b7 digit select bit |B0
[COLOR=RoyalBlue]movlw TRISA ; address TRISA (in bank 1) |B0
movwf FSR ; setup for indirect access |B0
[/COLOR];
; display loop (8 msecs, 50% duty cycle, 62.5 Hz refresh rate)
;
Display
swapf PORTA,W ; W = hi nybble in b3..b0 bits |B0
btfss DigSel,7 ; left digit? yes, skip, else |B0
movf PORTA,W ; W = lo nybble in b3..b0 bits |B0
andlw b'00001111' ; mask off upper 4 bits |B0
call SegData ; get segment data in W |B0
iorwf DigSel,W ; add digit select bit in b7 |B0
movwf PORTB ; display new digit |B0
DelayUS(4000-26) ; 4-msecs including loop time |B0
[COLOR=RoyalBlue]clrf PORTA ; clear PORTA output latch |B0
clrf INDF ; setup PORTA all outputs |B0
DelayUS(4000) ; 4-msecs |B0
comf INDF,F ; setup PORTA all inputs |B0
[/COLOR] movlw b'10000000' ; mask for digit select bit |B0
xorwf DigSel,F ; toggle b7 digit select bit |B0
goto Display ; loop forever |B0