/***********************************************
**** AVR 定时器使用范例 ***
**** ***
**** 作者: HJJourAVR ***
**** 编译器:WINAVR20050214 ***
***********************************************/
/*
本程序简单的示范了如何使用ATMEGA16的定时器
AVR定时器的要点介绍
T0工作于CTC模式,输出1KHz/2KHz 50%占空比的方波
T1工作于快速PWM模式兼输入捕捉
T2工作于相位修正PWM模式,输出490Hz的8bit PWM波
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器
对于定时器,AVRstudio的软件仿真是不准确的。
*/
#include
#include
#include
//时钟定为8MHz,F_CPU=8000000
//管脚定义
#define ICPKEY 6 //ICP1 PD6 按键模拟ICP输入
#define PWM0 3 //OC0 PB3
#define PWM1A 5 //OC1A PD5
#define PWM1B 4 //OC1B PD4
#define PWM2 7 //OC2 PD7
//宏定义 //全局变量 //仿真时在watch窗口,监控这些变量。 void timer0_init(void) //CTC模式输出1KHz/2KHz方波
#define PWM1A_ON() PORTD|= (1<
volatile unsigned int ICP_Time; //记录ICP输入捕捉事件的发生时刻
volatile unsigned char T2PWM; //设置T2的PWM值
volatile unsigned char T0OCR; //设置T0的时间值
{
OCR0 = T0OCR; //设定TOP值
//TOP=8000000/(2*64*1000)-1=61.5 选61 1.008KHz(0.992mS)
//TOP=8000000/(2*64*2000)-1=30.25 选30 2.016KHz(0.496ms)
TCCR0 = (1<
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !