Hi
I was looking through your version and come across this again, as is also in DT’s original code:
I am wondering about a few things like why this is here:Code:; ----------------- ADD TimerConst to TMR1H:TMR1L ADD2_TIMER macro CHK?RP T1CON BCF T1CON,TMR1ON ; 1 InstCycle, Turn off timer MOVLW LOW(TimerConst) ; 1 InstCycle ADDWF TMR1L,F ; 1 InstCycle, Reload timer with correct value BTFSC STATUS,C ; 1 or 2 InstCycles INCF TMR1H,F ; 1 InstCycle MOVLW HIGH(TimerConst) ; 1 InstCycle ADDWF TMR1H,F ; 1 InstCycle endm
Depending on the carry status after the add, we would still have 8 instructions, because if the skip takesCode:BTFSC STATUS,C ; 1 or 2 InstCycles
two instructions, it skipped a line that would have taken another instruction.
I don’t understand why it’s necessary. If the ISR is called on timer overflow, then even if it is not zero
by the time it’s reset, it should be a known value, and not have to be checked.
This somehow looks like it’s setup as if the ISR was called a variable time after the overflow interrupt which should never happen.
I think there is something I’m not seeing, and the code it so simple, there must be a reason, otherwise it’s easily fixed.
I’m seeing error when I use a 10MHz crystal to generate a 1Hz LED pulse, and get it roughly synced (visible to Human) with
the output of a GPS pulse per second signal. After an hour I can see a difference between the two blinking LEDs,
which for a Human to see, would probably take some ms difference.
There could be error in my code, but I doubt that as I have only interfaced with DT’s timer,
or I have a terrible crystal, or board layout (very likely because the crystal is mounted to a two pin header to make it removable,
or crystals just really are that bad.





Bookmarks