Hi This program i am using has two different timer routines and i dont what each one of them is doing.In the first one i do not understand what is meant by the Timer Register for the high byte(TH0) and v being shifted by 8. Also for routine number 2, what is meant by SCON = 0x50; and TMOD |= 0x20 ;.Where did the value 213 for TH1 come from(TH1=213)? 1)void timer0 (void) interrupt 1 using 1 { /* Int Vector at 000BH, Reg Bank 1 */ unsigned char i; unsigned int v; TR0 = 0; // stop timer v = TL0 | (TH0>>8); v += (unsigned int) (T0_CLOCK); TL0 = (unsigned char) v; TH0 = (unsigned char) (v >> 8); TR0 = 1; // start timer 2)void main (void) { bit CanMessageReq = 0; // Remote Frame Requested // init serial interface SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */ TH1 = 213; /* TH1: reload value for 1200 baud @ 20MHz */ TR1 = 1; /* TR1: timer 1 run */ TI = 1; /* TI: set TI to send first char of UART */ // ToDo take timer from RTX51 Tiny #define PERIOD -500 /* 250 usec interrupt period */ /* setup the timer 0 interrupt */ TL0 = (unsigned char) (T0_CLOCK); TH0 = (unsigned char) (T0_CLOCK >> 8); TMOD = TMOD | 0x01; /* select mode 1 */ TR0 = 1; /* start timer 0 */ ET0 = 1; /* enable timer 0 interrupt */
Oops! Some of that was rubbish. To transfer TH0 into the high half of v you would have to leftshift it. I think your code was doing something different, unfortunately I can't see it while typing this reply. Stefan