
183
CHAPTER 7
8-BIT TIMER/EVENT COUNTERS 50, 51
User’s Manual U12790EJ2V0UD
7.5.3 Interval timer (16-bit)
/***************************************************************/
/*
*/
/*
Timer 5 operation sample
*/
/*
Cascade connection setting example
*/
/*
*/
/***************************************************************/
#pragma sfr
#pragma EI
#pragma DI
#define intervalTM5 98
/* Cycle data to be set to CR */
#pragma interrupt INTTM50 ppgint rb2
unsigned char ppgdata[2];
/* Data area to be set to timer 5 */
void main(void)
{
int interval;
interval = intervalTM5;
PCC = 0x0;
/* Select high-speed operation mode */
ppgdata[0] = 0;
/* Clear CR50 data */
ppgdata[1] = 0;
/* Clear CR51 data */
/* Set port */
P13 = 0b11111110;
/* Clear P130 when using TO50 */
/* Set interrupt */
TMMK50 = 0;
/* Clear INTTM50 interrupt mask */
TMMK51 = 1;
/* Set INTTM51 interrupt mask */
/* Set timer 5 */
TCL50 = 0b00000101;
/* Count clock is fx/2^6 */
CR50 = interval & 0xff;
/* Set lower compare register to CR50 */
CR51 = interval >> 8;
/* Set higher compare register to CR51 */
TMC50 = 0b00000111;
/* Inverted on match, initial value L */
TMC51 = 0b00010000;
/* Cascade mode */
TCE51 = 1;
TCE50 = 1;
/* Timer starts */
EI();
while(1);
}
/* Timer 5 interrupt function */
void ppgint()
{
unsigned int work;
work = ppgdata[0]+ppgdata[1]*0x100;
if (work != 0)
{
TCE50 =0;
CR51 = work >> 8;
CR50 = work & 0xff;
ppgdata[0] = 0;
ppgdata[1] = 0;
if (work != 0xffff)
{
TCE50 = 1; /* Timer resumes */
}