已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AVR定时计数器 0,1,2的相位可调 PWM模式彻底应用/*AVR定时计数器 0,1,2的相位可调 PWM模式彻底应用* FileName : adjustablePWM.c Author : 沧海麒麟 Date : 2011.05.28 Version : 1.0 Clock Frequency :8 MHZ Description : 适用于 ATmega16(L)AVR的 3个定时计数器相位频率 PWM模式 查询与中断的基本应用 */ #include /常用头文件,如有需要可以查库文件 include #include #include #include #include /#include “delay.c“ /#include “LCM1602.c“ #define uint unsigned int #define uchar unsigned char /*T/C0*/ void Timer0PCPWM_Init(uchar temp); void Timer0PCPWM_NquiryMode(uchar temp);/T/C0查询方式函数 void Timer0PCPWM_InterruptMode(uchar temp);/T/C0中断方式函数 /*T/C2*/ void Timer2PCPWM_Init(uchar temp); void Timer2PCPWM_NquiryMode(uchar temp);/T/C2查询方式函数 void Timer2PCPWM_InterruptMode(uchar temp);/T/C2中断方式函数 /*T/C1*/ void Timer1PCPWM_10_Init(uint top,uint temp);/T/C1波形产生模式:CTC4 void Timer1PCPWM_11_Init(uint top,uint temp);/T/C1波形产生模式:CTC12 void Timer1PCPWM_A_NquiryMode(uint temp);/T/C1比较匹配 A查询方式函数 void Timer1PCPWM_B_NquiryMode(uint temp);/T/C1比较匹配 B查询方式函数 void Timer1PCPWM_InterruptMode(uint temp);/T/C1中断方式函数 void main(void) /占空比为 1/5 Timer0PCPWM_Init(51);/245Hz Timer2PCPWM_Init(51); Timer1PCPWM_10_Init(1249,250);/50HZ /Timer1PWM_14_Init(1249,250); while (1); /*定时计数器的函数*/ /*与 8位 T/C0相关的寄存器 1:T/C0计数寄存器 TCNT0,输出比较寄存器 OCR0,定时计数器中断屏蔽寄存器TIMSK 定时计数器中断标志寄存器 TIFR,T/C0控制寄存器 TCCR0 2:每计数一次需要的时间是(1/Xtal)*N us 在此程序中 Xtal=8,N定义为与分频系数 N:1,8,64,256,1024 1 : TCCR0|=0x01;/0:无时钟,系统不工作 8 : TCCR0|=0x02; 64 : TCCR0|=0x03; 256 : TCCR0|=0x04; 1024: TCCR0|=0x05; /0x06:时钟由 T0引脚输入,下降沿触发 0x07:时钟由 T0引脚输入,上升沿触发 */ /*/ void Timer0PCPWM_Init(uchar temp) /Foc0pwm = Fclk/(510N) DDRB |= 0X08; TCNT0 = 0x00; TCCR0 = 0x40|0x20|0x03; /PWM设置|OC0 触发方式的设置|预分频设置 OCR0 = temp; /在此程序中 Xtal=8,N定义为与分频系数 N:1,8,64,256,1024 /1 : TCCR0|=0x01;/0:无时钟,系统不工作 /8 : TCCR0|=0x02; /64 : TCCR0|=0x03; /256 : TCCR0|=0x04; /1024: TCCR0|=0x05; /*/ void Timer0PCPWM_NquiryMode(uchar temp)/T/C0查询方式函数 while(!(TIFR TIFR=0x02; OCR0 = temp;/Focnpwm = Fclk/N(1+TOP) /*/ void Timer0PCPWM_InterruptMode(uchar temp)/T/C0中断方式函数 CLI(); /disable all interrupts TCCR0 = 0x00; /stop TCNT0 = 0x00; TCCR0 = 0x40|0x20|0x03; /PWM设置|OC0 触发方式的设置|预分频设置 OCR0 = temp; MCUCR = 0x00; GICR = 0x00; TIMSK = 0x02; /timer interrupt sources SEI(); /re-enable interrupts /SREG|=BIT(7);/开启总中断 /*/ #pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP /20 void timer0_comp_isr(void) /compare occured TCNT0=OCR0 /*/ /*与 8位 T/C2相关的寄存器 1:T/C2计数寄存器 TCNT0,输出比较寄存器 OCR2,定时计数器中断屏蔽寄存器TIMSK 定时计数器中断标志寄存器 TIFR,T/C2控制寄存器 TCCR2 2:每计数一次需要的时间是(1/Xtal)*N us 在此程序中 Xtal=8,N定义为与分频系数 N:1,8,64,256,1024 1 : TCCR2|=0x01;/0:无时钟,系统不工作 8 : TCCR2|=0x02; 32 : TCCR2|=0x03; 64 : TCCR2|=0x04; 128 : TCCR2|=0x05; 256 : TCCR2|=0x06; 1024: TCCR2|=0x07; */ /*/ void Timer2PCPWM_Init(uchar temp) /Foc0pwm = Fclk/(510N) DDRD |= 0X80; TCNT2 = 0x00; TCCR2 = 0x40|0x20|0x04; /PWM设置|OC2 触发方式的设置|预分频设置 OCR2 = temp; /Focnpwm = Fclk/N(1+TOP) /*/ void Timer2PCPWM_NquiryMode(uchar temp)/T/C2查询方式函数 while(!(TIFR TIFR=0x80; OCR2 = temp; /*/ void Timer2PCPWM_InterruptMode(uchar temp)/T/C2中断方式函数 CLI(); /disable all interrupts TCCR2 = 0x00; /stop TCNT2 = 0x00; /set count/temp=6,N=64:2000us;计数 250次 TCCR2 = 0x40|0x20|0x04; /PWM设置|OC2 触发方式的设置|预分频设置 OCR2 = temp; MCUCR = 0x00; GICR = 0x00; TIMSK = 0x80; /timer interrupt sources SEI(); /re-enable interrupts /SREG|=BIT(7);/开启总中断 #pragma interrupt_handler timer2_comp_isr:iv_TIM2_COMP /4 void timer2_comp_isr(void) /compare occured TCNT2=OCR2 /*/ /*与 16位 T/C1相关的寄存器 1:T/C1计数寄存器 TCNT1H和 TCNT1L,输出比较寄存器 OCR1A(H/L)和OCR1B(H/L), 定时计数器中断屏蔽寄存器 TIMSK,定时计数器中断标志寄存器 TIFR, T/C1控制寄存器 TCCR1A和 TCCR1B 2:每计数一次需要的时间是(1/Xtal)*N us 在此程序中 Xtal=8,N定义为与分频系数 N:1,8,64,256,1024 /1 : TCCR1B=0x01;/0:无时钟,系统不工作 /8 : TCCR1B=0x02; /64 : TCCR1B=0x03; /256 : TCCR1B=0x04; /1024: TCCR1B=0x05; /0x06:时钟由 T1引脚输入,下降沿驱动 0x07:时钟由 T1引脚输入,上升沿驱动 */ /*/ void Timer1PCPWM_10_Init(uint top,uint temp) DDRD |= 0x30; TCNT1H = 0x00; TCNT1L = 0x00; TCCR1A = 0x80|0x20|(1 WGM11)|(0 WGM10); /OC1A/PWM设置|预分频设置 ICR1 = top; /Focnpwm = Fclk/(2N*TOP) OCR1A = temp; OCR1B = temp; /*/ void Timer1PCPWM_11_Init(uint top,uint temp) DDRD |= 0x30; TCNT1H = 0x00; TCNT1L = 0x00; TCCR1A = 0x80|0x20|(1 WGM11)|(1 WGM10); /OC1A/PWM 设置|预分频设置 OCR1A = top; /Focnpwm = Fclk/(2N*TOP) OCR1B = temp; /说明还有 8 9 10位相位修正 PWM可用 /*/ void Timer1PCPWM_A_NquiryMode(uint temp)/T/C1比较匹配 A查询方式函数 while(!(TIFR TIFR = 0x10; OCR1A = temp; /Focnpwm = Fclk/(2N*TOP) /*/ void Timer1P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2034年中国木地板行业发展潜力预测及投资战略规划报告
- 2024-2034年中国电器接播件行业市场现状分析及竞争格局与投资发展研究报告
- 高考生物一轮复习 第四单元 重点强化练33 理解细胞的分化、衰老、凋亡与癌变(含解析)-人教版高三生物试题
- 高考生物三轮冲刺 题型突破练3 信息给予类(含解析)-人教版高三生物试题
- 2023年铅及铅合金材项目安全评价报告
- 2023年乐器、乐器辅助用品及零件项目安全评价报告
- 房地产标杆企业-项目管理
- 2023年GPS同步钟项目风险分析及评价报告
- 2023年汽车香水项目安全评价报告
- 2023年HS系列松香乳香施胶剂项目安全风险评价报告
- 2024年日历表(空白)(一月一张-可编辑做工作日历)
- 稿件:药店营业员的销售技巧
- 超市创业计划书范文word版
- 2021年初二年级生地会考考前动员讲话稿
- 生命教育理念
- 柳南换流站工程三通一平监理实施细则
- (完整版)建筑工程草拟退场申请
- (完整版)脊神经后根切断术操作规范
- 硫酸渣的综合利用
- 烽火GPON开通指导手册(个人总结版)
- 作文课题申报表.doc
评论
0/150
提交评论