欢迎来到天天文库
浏览记录
ID:1606471
大小:751.00 KB
页数:7页
时间:2017-11-12
《avr定时计数器0,1,2的ctc模式彻底应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、/***********定时计数器0,1,2的CTC模式彻底应用***********************FileName:CTC.cAuthor:沧海麒麟Date:2011.05.28Version:1.0ClockFrequency:8MHZDescription:适用于ATmega16(L)AVR的3个定时计数器CTC模式查询与中断的基本应用*/#include//常用头文件,如有需要可以查库文件include#include#include#include2、g.h>#include//#include"delay.c"//#include"LCM1602.c"#defineuintunsignedint#defineucharunsignedchar/*****************T/C0*********************************/voidTimer0CTC_Init(uchartemp);voidTimer0CTC_NquiryMode(uchartemp);//T/C0查询方式函数voidTimer0CTC_InterruptMode(void3、);//T/C0中断方式函数/*****************T/C2*********************************/voidTimer2CTC_Init(uchartemp);voidTimer2CTC_NquiryMode(uchartemp);//T/C2查询方式函数voidTimer2CTC_InterruptMode(void);//T/C2中断方式函数/****************T/C1**********************************/voidTimer1CTC_4_Init(u4、chartempH,uchartempL);//T/C1波形产生模式:CTC4voidTimer1CTC_12_Init(uchartempH,uchartempL);//T/C1波形产生模式:CTC12voidTimer1CTC_A_NquiryMode(uchartempH,uchartempL);//T/C1比较匹配A查询方式函数voidTimer1CTC_B_NquiryMode(uchartempH,uchartempL);//T/C1比较匹配B查询方式函数voidTimer1CTC_InterruptMode(uchartem5、pH,uchartempL);//T/C1中断方式函数voidmain(void){//CTC产生1000HZ的频率//Timer0CTC_Init(124);//Timer2CTC_Init(124);//Timer1CTC_4_Init(0,124);Timer1CTC_12_Init(0,124);while(1);}/*******定时计数器的函数*******************//*与8位T/C0相关的寄存器1:T/C0计数寄存器TCNT0,输出比较寄存器OCR0,定时计数器中断屏蔽寄存器TIMSK定时计数器中断标志寄存器6、TIFR,T/C0控制寄存器TCCR02:每计数一次需要的时间是(1/Xtal)*Nus在此程序中Xtal=8,N定义为与分频系数N:1,8,64,256,10241:TCCR07、=0x01;//0:无时钟,系统不工作8:TCCR08、=0x02;64:TCCR09、=0x03;256:TCCR010、=0x04;1024:TCCR011、=0x05;//0x06:时钟由T0引脚输入,下降沿触发0x07:时钟由T0引脚输入,上升沿触发*//********************************************************12、***/voidTimer0CTC_Init(uchartemp){DDRB13、=0X08;TCNT0=0x00;TCCR0=0x0814、0x1015、0x03;//CTC设置16、OC0触发方式的设置17、预分频设置OCR0=temp;//Foc0=Fclk/(2N(1+OCR0))}/***********************************************************/voidTimer0CTC_NquiryMode(uchartemp)//T/C0查询方式函数{while(!(TIFR&0x02));TIFR=0x18、02;OCR0=temp;}/***********************************************************/voidTimer0CTC_Interru
2、g.h>#include//#include"delay.c"//#include"LCM1602.c"#defineuintunsignedint#defineucharunsignedchar/*****************T/C0*********************************/voidTimer0CTC_Init(uchartemp);voidTimer0CTC_NquiryMode(uchartemp);//T/C0查询方式函数voidTimer0CTC_InterruptMode(void
3、);//T/C0中断方式函数/*****************T/C2*********************************/voidTimer2CTC_Init(uchartemp);voidTimer2CTC_NquiryMode(uchartemp);//T/C2查询方式函数voidTimer2CTC_InterruptMode(void);//T/C2中断方式函数/****************T/C1**********************************/voidTimer1CTC_4_Init(u
4、chartempH,uchartempL);//T/C1波形产生模式:CTC4voidTimer1CTC_12_Init(uchartempH,uchartempL);//T/C1波形产生模式:CTC12voidTimer1CTC_A_NquiryMode(uchartempH,uchartempL);//T/C1比较匹配A查询方式函数voidTimer1CTC_B_NquiryMode(uchartempH,uchartempL);//T/C1比较匹配B查询方式函数voidTimer1CTC_InterruptMode(uchartem
5、pH,uchartempL);//T/C1中断方式函数voidmain(void){//CTC产生1000HZ的频率//Timer0CTC_Init(124);//Timer2CTC_Init(124);//Timer1CTC_4_Init(0,124);Timer1CTC_12_Init(0,124);while(1);}/*******定时计数器的函数*******************//*与8位T/C0相关的寄存器1:T/C0计数寄存器TCNT0,输出比较寄存器OCR0,定时计数器中断屏蔽寄存器TIMSK定时计数器中断标志寄存器
6、TIFR,T/C0控制寄存器TCCR02:每计数一次需要的时间是(1/Xtal)*Nus在此程序中Xtal=8,N定义为与分频系数N:1,8,64,256,10241:TCCR0
7、=0x01;//0:无时钟,系统不工作8:TCCR0
8、=0x02;64:TCCR0
9、=0x03;256:TCCR0
10、=0x04;1024:TCCR0
11、=0x05;//0x06:时钟由T0引脚输入,下降沿触发0x07:时钟由T0引脚输入,上升沿触发*//********************************************************
12、***/voidTimer0CTC_Init(uchartemp){DDRB
13、=0X08;TCNT0=0x00;TCCR0=0x08
14、0x10
15、0x03;//CTC设置
16、OC0触发方式的设置
17、预分频设置OCR0=temp;//Foc0=Fclk/(2N(1+OCR0))}/***********************************************************/voidTimer0CTC_NquiryMode(uchartemp)//T/C0查询方式函数{while(!(TIFR&0x02));TIFR=0x
18、02;OCR0=temp;}/***********************************************************/voidTimer0CTC_Interru
此文档下载收益归作者所有