⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buzzer_timer1_interrupt.c

📁 avr单片机的定时器使用范例
💻 C
字号:
//#include <iom16.h>
#include <avr/io.h> 
#include <avr/interrupt.h>

//程序目地:使用定时器1,控制蜂鸣器
//模式:定时器1中断模式
//测试方法:把相应的io口接到蜂鸣器的控制端
//演示效果:蜂鸣器产生声音 按下PD2或者PD3的时候频率变化
//模板:20080704_timer1_interrupt (timer.c)
//编号:20080705_timer1_pwm_buzzer_
unsigned char uc_Led;
#define F_CPU 1000000
//#define time1 10000  //定时器1定时时间  \\1000000us=1秒
#define fenpin 1024
//#define tcnt1 (65535-time1/(fenpin)*(F_CPU/1000000)) //定时器初始值的计算
void External_Inter();

 unsigned long time1=1000000;
unsigned int tcnt1=0xfc2e;

void timer1_init(void)  //定时器1中断函数
{
 TCCR1B=0X00;//先停止定时器1
 TCNT1H=0Xfc;//设定计数器初值65535-1000000/1024= 64559 = 0xfc2e //定时一秒 内 部震荡 1 M 赫兹
 TCNT1L=0X2f;
 TCCR1A=0X00;//启动定时器1,使用1024分频
 TCCR1B=0X05;
}
SIGNAL(SIG_OVERFLOW1)     //interrupt[TIM1_OVF]
{
tcnt1=(65535-time1/(fenpin)*(F_CPU/1000000));
TCNT1= tcnt1; //加载初始值
 //TCNT1H=0Xfc; //重设初始值
 //TCNT1L=0X2e; //完成一次工作

PORTA=uc_Led;//输出
 TCCR1B=0X05;
 uc_Led++; 

}

int main(void)
{
  DDRA=0Xff;
  SREG|=0X80;// 全局中断使能即  sei();
  TIMSK|=0X04;
  timer1_init();
  External_Inter();
    
  while(1)
   {
    //代码
   };
   
}
//总结:1.外部中断的使用方式
//      2.#define的定义,计算的先后顺序
//#define tcnt1 (65535-time1/(fenpin)*(F_CPU/1000000)) //定时器初始值的计算

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -