i see you use some GOSUBs & Return in your ISR... not a good idea to me...
Observe the way your program will flow, assuming there's no problem with the use of Gosub and Return (erm), your program will execute all lines.. and finally jump to...
Code:
counter = %11111111 'to take care that no segment is blinking harder
todec = %00000000'todec >> 4
gosub segmentsshiftout
segmentsshiftout:
SHIFTOUT PORTB.0, PORTB.1, LSBFIRST,[counter\8,segments\8] 'data, clock
pulsout PORTA.4,1
return
it's kinda dangerous here... once it have execute once the segmentsshiftout sub, it will execute it once again and meet a RETURN without a GOSUB... where the program branch now??? i guess at the begining of your ISR... or.. mmm... resume to your main loop, but as you NEVER EVER clear the interrupt flag, it will automatically jump back to your ISR.
try to add a GOTO after your last GOSUB segmentsshiftout, which will send it at the end of your ISR...
Code:
counter = %11111111 'to take care that no segment is blinking harder
todec = %00000000'todec >> 4
gosub segmentsshiftout
GOTO RESUME_ISR ' <-- Add this
segmentsshiftout:
SHIFTOUT PORTB.0, PORTB.1, LSBFIRST,[counter\8,segments\8] 'data, clock
pulsout PORTA.4,1
return
'
'
'
'
'
RESUME_ISR: ' <-- And this
TMR2 = RELOAD
TMR2ON = 1
TMR2if=0 ' Clear interrupt flag
resume
enable
Bookmarks