
150
CHAPTER 6
16-BIT TIMER/EVENT COUNTER 0
User’s Manual U12790EJ2V0UD
6.5.1 Interval timer
/*******************************************************************************/
/*
*/
/*
Setting example of timer 0 interval timer mode
*/
/*
Cycle set to 98 as intervalTM0 (at 6.3 MHz for 1 ms)
*/
/*
Variable ppgdata prepared as rewrite data area
*/
/*
: Cycle (if 0000, no change)
*/
/*
ppgdata to be checked at every INTTM00, and changed if required.
*/
/*
Therefore, if change is required, set the change data in ppgdata.
*/
/*
When changed, ppgdata cleared to 0000.
*/
/*
*/
/*******************************************************************************/
#pragma sfr
#pragma EI
#pragma DI
#define intervalTM0 98
/* Cycle data to be set to CR00 */
#pragma interrupt INTTM00 intervalint rb2
unsigned int ppgdata;
/* Data area to be set to timer 0 */
void main(void)
{
PCC = 0x0;
/* Set high-speed operation mode */
ppgdata = 0;
/* Set port */
/* Set the following to output */
P3 = 0b11111101;
/* Clear P31 */
PM3.1 = 0;
/* Set P31 as output */
/* Set interrupt */
TMMK00 = 0;
/* Cancel INTTM00 interrupt mask */
/* Set timer 0 */
PRM0 = 0b00000010;
/* Count clock is fx/2^6 */
CRC0 = 0b00000000;
/* Set CR00 and CR01 to compare register */
CR00 = intervalTM0;
/* Set cycle initial value to CR00 */
TOC0 = 0b00000111;
/* Invert on match with CR00, initial value L */
TMC0 = 0b00001100;
/* Clear & start on match between TM0 and CR00 */
EI();
while(1);
/* Loop as dummy here */
}
/* Timer 0 interrupt function */
void intervalint()
{
unsigned int work;
/***************************************************/
/*
*/
/* Define variables required for interrupt here
*/
/*
*/
/***************************************************/
work = ppgdata;
if (work != 0)
{
CR00 = work;
ppgdata = 0;
if (work == 0xffff)
{
TMC0 = 0b00000000;
/* Stop timer */
}
/***********************************************************/
/*
*/
/* Describe processing required for interrupt below
*/
/*
*/
/***********************************************************/
}