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...
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.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
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


i see you use some GOSUBs & Return in your ISR... not a good idea to me...


Bookmarks