??? 06/05/10 14:23 Modified: 06/05/10 14:25 Read: times |
#176422 - Put the compiler to work... Responding to: ???'s previous message |
Why not document your reload calculation formula for all time, by including it in your source code? Maybe get the compiler to do the calculation work for you, each time you change target crystal and oscillator frequencies?
// In your module's associated header file... #define CRYSTAL_FREQ 11059200 #define STATES_PER_CYCLE 12u #define PERIPH_CLOCK_FREQ CRYSTAL_FREQ / STATES_PER_CYCLE #define OSC_FREQUENCY 8000u #define PERIOD_COUNTS PERIPH_CLOCK_FREQ / OSC_FREQUENCY #define T0_OVERFLOW 65535u #define RELOAD (unsigned int)(T0_OVERFLOW - PERIOD_COUNTS) // In your timer initialisation routine... TL0 = (unsigned char)(RELOAD & 0xFF); TH0 = (unsigned char)(RELOAD >> 8); Caveat: This could probably be done better, and is merely a suggested route. It might even be wrong! Regards, Murray R. Van Luyn. |
Topic | Author | Date |
80C52 Timer0 | 01/01/70 00:00 | |
where is the EA initialize? | 01/01/70 00:00 | |
EA initialize | 01/01/70 00:00 | |
no reason in what you show | 01/01/70 00:00 | |
TL0 and TH0 | 01/01/70 00:00 | |
Calculations for Timer T0 at 8KHz: have you tried 0xFF8D ??? | 01/01/70 00:00 | |
correction | 01/01/70 00:00 | |
Yeah - 0x8D | 01/01/70 00:00 | |
Thanks for that typo, More for 8KHz with 50% duty cycle | 01/01/70 00:00 | |
Put the compiler to work... | 01/01/70 00:00 | |
fine, but | 01/01/70 00:00 | |
T0 overflows at 65535+1, don't overlook this | 01/01/70 00:00 | |
right answer, wrong premise | 01/01/70 00:00 | |
Exact calculations require semantics | 01/01/70 00:00 | |
you are welcome to find out | 01/01/70 00:00 | |
Thanks for the correction...![]() | 01/01/70 00:00 |