ATMEGA8定时器计数器1可以定时一秒。
ATMEGA8有T/C0、T/C1、T/C2,其中T/C0、T/C2是8位定时器;T/C1是16位定时器
一般我们在设计程序时,都是要求定时多少时间,可见,时间(妙S)是个已知条件,而单片机的的时钟频率一般在设计的最初也是已经确定下来的,所以,频率(HZ)也是一个已经条件,现在我们要求的就是比较值的大小了
公式如下:
比较值(次)=频率(次/S)* S
上式中的频率是T/C频率,并不是单片机时钟频率,如单片机时钟是8000000Hz,T/C的时钟是系统时钟的1024分频,那么
T/C时钟频率=8000000/1024=7812.5Hz,约=7812
假设我们要定时1秒钟,那么
比较值=7812(次/S) * 1S=7812次
可见,8位(255)的T/C0,T/C2是不能满足要求的,只有16位(65535)才能满足要求
程序如下
#include <mega8.h>
interrupt [8] void timer1_ovf_isr(void) //为什么是9?请看M8中文数据手册的43页
{
//请在这里添加你的中断代码
PORTB=255;//测试代码
PORTB=0;
TCNT1H=0; //先写H 计数器重新开始计数
TCNT1L=0; //后写L
}void main(void)
{
TCCR1A=4; //启用通道B强制比较功能
TCCR1B=5; //1024分频,一旦时钟设置成功,计数器就开始计数
TIMSK =4; //定时器1通道B比较匹配中断使能
OCR1BH=30; //设定通道B的比较值,写16位寄存器要先写H,再写L
OCR1BL=162; //OCR1AH+OCR1AL=7812
TIMSK=8; //通道B比较中断使能
SREG=128; //打开全局中断
while (1)
{
//请在这里添加你的程序代码
}
}
引用自:
http://hi.baidu.com/sy451/blog/item/dfd471d9cb44b4ed39012f15.html
0 Comments.