AVR技术william hill官网
直播中

zhangtaotao71

12年用户 393经验值
擅长:嵌入式技术
私信 关注
[AVR问答]

ATMage16 proteus 6定时器0普通模式

相关寄存器:TCCR0:第六位和第三位:00普通模式01相位修正PWM 10CTC模式11快速PWM模式。第5和第4位:端口操作位,对于不同的模式对应端口操作也不同。本节只说普通模式。00正常的IO口不与OC0引脚相连。(同51的定时器只起定时作用)。0,1,2位用来设置分频系数000无分频不工作。依次分频4,8.。。。256.分频系数越大定时器周期越大。
TCNT0:定时器0是一个八位的定时器,TCNT0是计数器同51的(TH0TL0,一个是八位的一个是十六位的。
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;
}
  • 1.PNG
  • 2.PNG

回帖(1)

hua2002

2013-10-31 09:30:52
{:20:}{:20:}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分