Using C as such has caused a big advance for me, if you consider assembler source like this:Excellent! Good work finding that fault out.
I've been caught myself with similar issues when translating my old code from PIC 16F to new 18F chips and casually replacing "PORTB" with "LATB" etc.
That is another good reason to keep C code vertical with one process on each line, separating tests and writes so things like;
if(PORTB.F0)
{
LATB.F0 = 1;
}
will be easier to update and translate than when people do things like;
if(PORTB.F0=1)
where they perform a write to a port or a variable inside a test.
Rich (BB code):
l_push:
lfsr d'1',v_stackptr
movff INDF1,FSR1L
decf INDF1,f,ACCESS
movwf INDF1,ACCESS
return
l_pop:
lfsr d'1',v_stackptr
movff INDF1,FSR1L
incf INDF1,f,ACCESS
movf INDF1,w,ACCESS
return
org 0x0100
l_refresh:
bcf INTCON,TMR0IF,ACCESS
incf v_tmr0_ctr,f
btfss v_tmr0_ctr,d'4'
goto l_refresh_skip0
call l_refresh_load
call l_refresh_store
clrf v_tmr0_ctr
l_refresh_skip0:
incf v_ledctr_0,f
btfss v_ledctr_0,d'6'
goto l_refresh_skip1
btfsc v_ledctr_1,d'3'
goto l_led1
goto l_led2
l_led1:
movlw b'11101111'
andwf v_m_ioxp1,f
movlw b'00000100'
goto l_led_rdy
l_led2:
movlw b'11111011'
andwf v_m_ioxp1,f
movlw b'00010000'
l_led_rdy:
xorwf v_m_ioxp1,f
clrf v_ledctr_0
incf v_ledctr_1
l_refresh_skip1:
return
l_refresh_load:
movf TBLPTRH,w,ACCESS
call l_push
movf TBLPTRL,w,ACCESS
call l_push
call l_lr1
call l_pop
movwf TBLPTRL,ACCESS
call l_pop
movwf TBLPTRH,ACCESS
movf v_linemem0,w
addlw v_m_data
clrf FSR0H,ACCESS
movwf FSR0L,ACCESS ; load matrix data pointer into FSR
movff POSTINC0,v_m_currline0
movff POSTINC0,v_m_currline1
movff INDF0,v_m_currline2
movf v_linemem1,w
addlw v_m_data
movwf FSR0L,ACCESS ; load matrix data pointer into FSR
movff POSTINC0,v_m_currline3
movff POSTINC0,v_m_currline4
movff INDF0,v_m_currline5
movlw b'00000001'
andwf v_m_currline5,f
movlw high(l_phase_bits)
movwf PCLATH,ACCESS
rlncf v_m_phase,w
call l_phase_bits
iorwf v_m_currline5,f
movlw high($+1)
movwf PCLATH,ACCESS
incf v_m_phase,f
btfsc v_m_phase,d'2'
clrf v_m_phase
l_refresh_nextphase:
movlw v_m_currline5
movwf v_m_serialptr
movlw d'8'
movwf v_m_serialctr
bsf v_status,c_status_serialdata
bcf PORTC,c_PC2_E,ACCESS ; disable E signal
btfsc v_status,c_status_lcd_more
call l_lcd_init
return