📄 buzzer_timer1_interrupt.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 + -