This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Timer

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 */

Parents
  • v is a 16 bit integer, TH0 is an 8 bit register containing the high 8 bits of a 16 bit timer. So, to get the high 8 bits of v into TH0 you have to rightshift by 8, likewise to transfer the contents of TH0 into the high half of v you have to rightshift it by 8.

    Regarding the contents of TMOD and SCON look in the device datasheet for a full explanation. The datasheet will also show you how the reload value of TH1 is calculated for baudrate generation.

    Stefan

Reply
  • v is a 16 bit integer, TH0 is an 8 bit register containing the high 8 bits of a 16 bit timer. So, to get the high 8 bits of v into TH0 you have to rightshift by 8, likewise to transfer the contents of TH0 into the high half of v you have to rightshift it by 8.

    Regarding the contents of TMOD and SCON look in the device datasheet for a full explanation. The datasheet will also show you how the reload value of TH1 is calculated for baudrate generation.

    Stefan

Children