\$\begingroup\$
\$\endgroup\$
1
I have a 8051 micro controller ,it has timer0,1,2,3 with different modes.
in timer0,mode0, i got a sample code (as shown below).
from that code
TH0_INIT=0xFC //5.0ms@XTAL=12MHz, Period = (10.85/2) ms@XTAL=22.1184MHz
TL0_INIT=0x0F
both TH0,TL0 load with hex values..but could not derive these values from equation below . (website) Could you please tell me, how these hex values derive?
tick = (1/(Fosc/12)
tick = 12/Fosc$$ For Fosc == 11.0592Mhz, the tick time will be
tick = 12/11.0592M = 1.085069444us = 1.085us
Delay = TimerCount * tick
Count = (Delay/tick)
RegValue = TimerMax- Count RegValue = TimerMax-(Delay/tick) = TimerMax - (Delay/1.085us)
RegValue = TimerMax-((Delay/1.085) * 10^6)$$
source code for timer0,mode0
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "Function_define.h"
#include "SFR_Macro.h"
#define TH0_INIT \
0xFC // 5.0ms@XTAL=12MHz, Period = (10.85/2) ms @XTAL = 22.1184MHz
#define TL0_INIT 0x0F
void Timer0_ISR(void) interrupt 1 // interrupt address is 0x000B
{
TH0 = TH0_INIT;
TL0 = TL0_INIT;
P12 = ~P12; // GPIO
toggle when interrupt
}
void main(void) {
TMOD = 0XFF;
Set_All_GPIO_Quasi_Mode;
TIMER0_MODE0_ENABLE;
clr_T0M;
clr_T1M;
TH0 = TH0_INIT;
TL0 = TL0_INIT;
// set_ET0; //enable Timer0 interrupt
// enable Timer1 interrupt
set_EA; // enable interrupts
set_TR0; // Timer0 run
while (1) {
TH0 = TH0_INIT;
TL0 = TL0_INIT;
set_TR0;
while (!TF0)
;
clr_TR0;
P12 = ~P12;
TF0 = 0;
}
}
-
\$\begingroup\$ What is the delay you are looking for? What value of register are you getting? Mode 0 is only 13 bit mode which means counts of only upto 0x1FFF possible \$\endgroup\$User323693– User3236932020年01月25日 12:57:28 +00:00Commented Jan 25, 2020 at 12:57
1 Answer 1
\$\begingroup\$
\$\endgroup\$
2
For mode 0:
- 8192 is the number of ticks available before the timer overflows (13 bit mode).
- Assuming 12MHz clock, the timer will be clicking at 1 MHz.
- One tick is equal to 1 us
- Let us compute counters for 5 ms
- Register value is 8192 - 0.005/1u.
- So the counters should have value of 3192.
- Timer higher byte = 0x0C
- Timer lower byte = 0x78
answered Jan 25, 2020 at 13:37
-
\$\begingroup\$ But...why ..TH0_INIT=0xFC TL0_INIT=0x0F? \$\endgroup\$RAVI– RAVI2020年01月25日 14:07:50 +00:00Commented Jan 25, 2020 at 14:07
-
\$\begingroup\$ @RAVI that nearly comes to about 1 ms.. since mode 0 only supports 13bit, there is no way the counter valid values can be higher than 0x2000. Does the code run? Can you check once and validate \$\endgroup\$User323693– User3236932020年01月25日 15:17:55 +00:00Commented Jan 25, 2020 at 15:17