I'm doing a LED pattern design.ISR does the multiplexing part.Patterns feeding in Main loop.
My oscillator is 8Mhz, Every 600uS I get an interrupt & update the display.
For below pattern I need to call two subroutines which takes total 710uS which is ovelapping ISR (Because I get inteerupts on every 600uS).So everytime I have to disable interrupts before calling this subroutines (Which I don't like).I need to optimize my subroutines within 600uS.
Note: It does not need two subroutines, any how I need to optimize....
Any Help
Thanks
My oscillator is 8Mhz, Every 600uS I get an interrupt & update the display.
For below pattern I need to call two subroutines which takes total 710uS which is ovelapping ISR (Because I get inteerupts on every 600uS).So everytime I have to disable interrupts before calling this subroutines (Which I don't like).I need to optimize my subroutines within 600uS.
Note: It does not need two subroutines, any how I need to optimize....
Any Help
Thanks
Code:
;Bank2 RAM
cblock 110h
D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15,D16 ; 16 10-1Fh
D17,D18,D19,D20,D21,D22,D23,D24,D25,D26,D27,D28,D29,D30,D31,D32 ; 32 20-2Fh
D33,D34,D35,D36,D37,D38,D39,D40,D41,D42,D43,D44,D45,D46,D47,D48 ; 48 30-3Fh
D49,D50,D51,D52,D53,D54,D55,D56,D57,D58,D59,D60,D61,D62,D63,D64 ; 64 40-4Fh
D65,D66,D67,D68,D69,D70,D71,D72,D73,D74,D75,D76,D77,D78,D79,D80 ; 80 50-5Fh
D81,D82,D83,D84,D85,D86,D87,D88,D89,D90,D91,D92,D93,D94,D95,D96 ; 96 60-6Fh
endc
Pat_Loop bcf INTCON,GIE
lcall Full_Rotate_CCW ;Rotate Pattern CCW
pagesel $
movlw b'11000000' ;Feed new Pattern Data
lcall Spread_Up_Fast ;Pattern Shift Up
pagesel $
bsf INTCON,GIE
lcall Del_80mS
pagesel $
goto Pat_Loop
;This Routine Takes 320uS
Spread_Up_Fast clrf W_Height
movwf P1
Spread_Up_Fast_A
movf P1,W
movwf R1
movwf R2
movwf R3
movwf R4
movwf R5
movwf R6
bsf STATUS,IRP
movlw .48
movwf Columns
movlw 10h
movwf FSR
Spread_Fast_Loop
rlf R6,F
rlf R5,F
rlf R4,F
rlf R3,F
rlf R2,F
rlf R1,F
rlf INDF,F
incf FSR,F
rlf INDF,F
incf FSR,F
decfsz Columns,F
goto Spread_Fast_Loop
bcf STATUS,IRP
return
;This routine Takes 390uS
Full_Rotate_CCW bsf STATUS,IRP
movlw .48
movwf Temp
movlw 70h
movwf FSR
bsf STATUS,RP1
movf D1,W
bcf STATUS,RP1
;
Full_R_CCW_Loop1
decf FSR,F
decf FSR,F
xorwf INDF,W
xorwf INDF,F
xorwf INDF,W
decfsz Temp,F
goto Full_R_CCW_Loop1
;
movlw .48
movwf Temp
movlw 71h
movwf FSR
bsf STATUS,RP1
movf D2,W
bcf STATUS,RP1
;
Full_R_CCW_Loop2
decf FSR,F
decf FSR,F
xorwf INDF,W
xorwf INDF,F
xorwf INDF,W
decfsz Temp,F
goto Full_R_CCW_Loop2
bcf STATUS,IRP
return