SYSTICK: Fix writing value to TMR0 registers.

A `%` modulo operator was used instead of a
`&` and-operator, to split a 16 bit value into two
8 bit values.
This causes that the SYSTICKs were 0.1% too fast.

Replace the manual split with a sfr16 type, so the
compiler does the split for us.
This commit is contained in:
René van Dorst
2025-12-26 10:07:13 +01:00
parent 0abe83e3e5
commit 9ff114d234
+2 -4
View File
@@ -119,8 +119,7 @@ __xdata uint8_t sfp_options[2];
void isr_timer0(void) __interrupt(1) void isr_timer0(void) __interrupt(1)
{ {
TR0 = 0; // Stop timer 0 TR0 = 0; // Stop timer 0
TH0 = SYSTICK_TIMER0_VALUE >> 8; T0_U16 = SYSTICK_TIMER0_VALUE;
TL0 = SYSTICK_TIMER0_VALUE % 0xff;
TR0 = 1; // Re-start timer 0 TR0 = 1; // Re-start timer 0
ticks++; ticks++;
@@ -295,8 +294,7 @@ void setup_timer0(void)
/* The TH0 registers contain the high/low byte that we load into Timer0 when T0 /* The TH0 registers contain the high/low byte that we load into Timer0 when T0
* overflows to 0x10000 * overflows to 0x10000
*/ */
TH0 = SYSTICK_TIMER0_VALUE >> 8; T0_U16 = SYSTICK_TIMER0_VALUE;
TL0 = SYSTICK_TIMER0_VALUE % 0xff;
CKCON &= 0xc7; CKCON &= 0xc7;
TCON = 0x10; // Start timer 0 TCON = 0x10; // Start timer 0