在马潮老师的书上看到有讲解,MEAG16的T0工作模式部分讲解为有四种模式,对应有四种计数方式,例子题目是“N分
频系统的设计”,程序如下:
/*********************************************
File name : demo_8_3.c
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include
// Timer 0 溢出中断服务
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xFB; // 重新设置TCNT0的初值
PORTA = ~PORTA; // PA0取反输出
}
// Timer 0 比较匹配中断服务
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
PORTA = ~PORTA; // PA0取反输出
}
void main(void)
{
PORTA=0x00;
DDRA=0x01;
PORTB=0x01;
DDRB=0x00;
// T/C0 初始化
TCCR0=0x07; // T/C0工作于普通模式,T0上升沿触发
TCNT0=0xFB;
OCR0=0xFD; // 设置OCR0的比较值,>TCNT0的初始值,<0xFF
TIMSK=0x03; // 允许T/C0的溢出和比较匹配中断
#asm("sei") // 开放全局中断
while (1)
{
// Place your code here
}
}
T0工作于普通模式,同时使能溢出中断和比较匹配中断,不知在这种情况下,计数的过程是怎样的??
[ 本帖最后由 springvirus 于 2009-5-27 08:04 编辑 ]