相关寄存器:TCCR0:第六位和第三位:00普通模式01相位修正PWM 10CTC模式11快速PWM模式。第5和第4位:端口操作位,对于不同的模式对应端口操作也不同。本节只说普通模式。00正常的IO口不与OC0引脚相连。(同51的定时器只起定时作用)。0,1,2位用来设置分频系数000无分频不工作。依次分频4,8.。。。256.分频系数越大定时器周期越大。
TCNT0:定时器0是一个八位的定时器,TCNT0是计数器同51的(TH0,TL0),一个是八位的一个是十六位的。
tiMSK:中断屏蔽寄存器。可使能相应的定时器溢出中断。对于定时器0只用到第0位和第1位。0位使能溢出中断。1位使能比较匹配中断(对于普通模式用不到先不管)。 TIFR:定时器中断标志位。第0溢出中断标志位。第1位比较匹配中断标志位。
OCR0:输出比较寄存器(用于PWM模式)。
说明:定时器0的普通模式。计数器初值可设置,最大值0xff时溢出,使能中断将会产生中断。
#include
typedef unsigned int uint;
void time_init(void)
{
TCCR0&=~(1<<3);
TCCR0&=~(1<<6);//3,6位清0设置为定时器普通模式
TCCR0&=~(1<<4);
TCCR0&=~(1<<5);//无端口操作,
TCCR0|=(1<<2);
TCCR0&=~(1<<1);
TCCR0&=~(1<<0);//设置预分频为256(0,1,2位)
TIMSK|=(1<<0);//溢出中断使能
SREG|=(1<<7);//全局中断使能
}
void main(void)
{
DDRA=0xff;//设置为输入
PORTA=0xff;//初始化端口为高
time_init();//定时器初始化
while(1);
}
#pragma interrupt_handler time_isr:10
//中断函数
void time_isr(void)
{
PORTA=~PORTA;
}