STC15W408AS library 0.9.0
Timer0 Mode3

init

Timer initializaion functions

#define timer0_mode3_12T_init()
 Initialize mode3 12T for timer0. More...
 
#define timer0_mode3_1T_init()
 Initialize mode3 1T for timer0. More...
 

config

Timer configuration functions

#define timer0_mode3_enable_P35_output()   (bit_set(INT_CLKO, SBIT0))
 Enable P35 meander output.
 
#define timer0_mode3_disable_P35_output()   (bit_clr(INT_CLKO, CBIT0))
 Disable P35 meander output.
 
#define is_timer0_mode3_P35_output_enabled()   (test_if_bit_set(INT_CLKO, SBIT0))
 Get output to pin P3.5 output flag enabled value. More...
 
#define timer0_mode3_close_gate()   (bit_set(TMOD, SBIT3))
 Close timer starting gate. More...
 
#define timer0_mode3_open_gate()   (bit_clr(TMOD, CBIT3))
 Open timer starting gate. More...
 
#define is_timer0_mode3_gate_opened()   (test_if_bit_cleared(TMOD, SBIT3))
 Get timer starting gate state. More...
 

run in async mode

Timer run/stop/reload functions

#define timer0_mode3_reload(ticks)
 Reload timer0 mode3 ticks on the fly. More...
 
#define timer0_mode3_direct_reload(th0, tl0)
 Reload timer0 mode3 TH0 and TL0 on the fly. More...
 
#define timer0_mode3_start(ticks)
 Run timer0 in mode3. More...
 
#define timer0_mode3_direct_start(th0, tl0)
 Run timer0 in mode3 with direct set of TH0 and TL0 registers. More...
 
#define timer0_mode3_stop()
 Stop timer0. More...
 
#define is_timer0_mode3_started()   (TR0 == 1 && (is_timer0_mode3_gate_opened() || INT0 == 1))
 Get timer0 mode3 started status. More...
 

run in sync mode

Timer run once functions

#define timer0_mode3_delay(ticks)
 Run timer0 mode3 once and wait with program flow blocking timer not finished. More...
 

Detailed Description

Functions and data structures for timer0 mode3.

This module supports general purpose timer0. Timer can work as COUNTER or TIMER.

Counter increments on external singnal (like pin 1/0 change state).

For timer0 in mode3:

Timer0 in mode3 can be used in sync (main prorgam flow blocked until timer overloaded) and interrupt (call interrupt handler on timer overloaded) modes.

Author
Michael Golovanov

Macro Definition Documentation

◆ is_timer0_mode3_gate_opened

#define is_timer0_mode3_gate_opened ( )    (test_if_bit_cleared(TMOD, SBIT3))

Get timer starting gate state.

Returns
bool true if gate is open otherwise false

◆ is_timer0_mode3_P35_output_enabled

#define is_timer0_mode3_P35_output_enabled ( )    (test_if_bit_set(INT_CLKO, SBIT0))

Get output to pin P3.5 output flag enabled value.

Returns
bool true if output enabled oterwise false

◆ is_timer0_mode3_started

#define is_timer0_mode3_started ( )    (TR0 == 1 && (is_timer0_mode3_gate_opened() || INT0 == 1))

Get timer0 mode3 started status.

Returns
bool true if started otherwise false

◆ timer0_mode3_12T_init

#define timer0_mode3_12T_init ( )
Value:
{ \
enable_mcu_interrupts(); \
enable_timer0_interrupt(); \
TMOD &= 0xf0; \
TMOD |= 0x03; \
bit_clr(AUXR, CBIT7); \
}

Initialize mode3 12T for timer0.

◆ timer0_mode3_1T_init

#define timer0_mode3_1T_init ( )
Value:
{ \
enable_mcu_interrupts(); \
enable_timer0_interrupt(); \
TMOD &= 0xf0; \
TMOD |= 0x03; \
bit_set(AUXR, SBIT7); \
}

Initialize mode3 1T for timer0.

◆ timer0_mode3_close_gate

#define timer0_mode3_close_gate ( )    (bit_set(TMOD, SBIT3))

Close timer starting gate.

When gate is closed timer will ticks after start only when INT0 pin is HIGH

◆ timer0_mode3_delay

#define timer0_mode3_delay (   ticks)
Value:
{ \
bool is_gate_opened = is_timer0_mode3_gate_opened(); \
/* Waiting for timer overloaded (timer overload flag set to 1) */ \
while(!TF0) \
{ \
} \
timer0_mode3_stop(); \
\
if (!is_gate_opened) \
{ \
timer0_mode3_close_gate(); \
} \
}
#define is_timer0_mode3_gate_opened()
Get timer starting gate state.
Definition: timer0_mode3.h:129
#define timer0_mode3_open_gate()
Open timer starting gate.
Definition: timer0_mode3.h:120
#define timer0_mode3_start(ticks)
Run timer0 in mode3.
Definition: timer0_mode3.h:189

Run timer0 mode3 once and wait with program flow blocking timer not finished.

Before run timer0_mode3_12T_init or timer0_mode3_1T_init should be called.

After run program flow blocked until timer does not overloaded.

Dont mix call of timer0_mode3_delay with timer0_mode3_open_gate/timer0_mode3_close_gate calls.

Parameters
ticksuint16_t timer ticks count.

◆ timer0_mode3_direct_reload

#define timer0_mode3_direct_reload (   th0,
  tl0 
)
Value:
{ \
TH0 = th0; \
TL0 = tl0; \
}

Reload timer0 mode3 TH0 and TL0 on the fly.

Reload is available in modes 0, 2, 3.

Parameters
th0uint8_t TH0 value
tl0uint8_t TL0 value

◆ timer0_mode3_direct_start

#define timer0_mode3_direct_start (   th0,
  tl0 
)
Value:
{ \
timer0_mode3_direct_reload(th0, tl0); \
\
TF0 = 0; \
TR0 = 1; \
}

Run timer0 in mode3 with direct set of TH0 and TL0 registers.

Before run timer0_mode3_12T_init or timer0_mode3_1T_init should be called.

After run program flow not blocked and interrupt will raised when timer is overloaded. Interrupt handler void timer0ISR(void) __interrupt(1) should be defined in user code.

Timer rerun after overloaded and interupt handler called. Timer overload occurs on [TH0, TL0] = 0xff + 1

Dont mix call timer0_mode3_direct_start call with void timer0_mode3_delay call

Parameters
th0uint8_t TH0 value
tl0uint8_t TL0 value

◆ timer0_mode3_open_gate

#define timer0_mode3_open_gate ( )    (bit_clr(TMOD, CBIT3))

Open timer starting gate.

When gate is open timer ticks after starts

◆ timer0_mode3_reload

#define timer0_mode3_reload (   ticks)
Value:
{ \
uint16_t value = 0xffff - ticks; \
/* Load timer high and low bytes value */ \
TL0 = value & 0xff; \
TH0 = (value >> 8) & 0xff; \
}

Reload timer0 mode3 ticks on the fly.

Reload is available in modes 0, 2, 3.

Parameters
ticksuint16_t timer ticks reloaded value.

◆ timer0_mode3_start

#define timer0_mode3_start (   ticks)
Value:
{ \
timer0_mode3_reload(ticks); \
\
TF0 = 0; /* clear timer overload flag */ \
TR0 = 1; /* set run timer flag */ \
}

Run timer0 in mode3.

Before run timer0_mode3_12T_init or timer0_mode3_1T_init should be called.

After run program flow not blocked and interrupt will raised when timer is overloaded. Interrupt handler void timer0ISR(void) __interrupt(1) should be defined in user code.

Timer rerun after overloaded and interupt handler called.

Dont mix call timer0_mode3_start call with void timer0_mode3_delay call

Parameters
ticksuint16_t timer ticks count.

◆ timer0_mode3_stop

#define timer0_mode3_stop ( )
Value:
{ \
TR0 = 0; /* clear run timer flag */ \
TF0 = 0; /* clear timer overload flag */ \
}

Stop timer0.

Before stop timer0_mode3_start should be called. Dont mix timer0_mode3_stop call with timer0_mode3_delay call