




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*AVR定时计数器0,1,2的相位可调PWM模式彻底应用*FileName : adjustablePWM.cAuthor : 沧海麒麟Date : 2011.05.28Version : 1.0Clock Frequency :8 MHZDescription : 适用于ATmega16(L)AVR的3个定时计数器相位频率PWM模式 查询与中断的基本应用*/#include <iom16v.h> /常用头文件,如有需要可以查库文件include#include <avrdef.h>#include <macros.h>#include <strin
2、g.h>#include <math.h>/#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*/voi
3、d 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波形产生模式:CTC4void Timer1PCPWM_11_Init(uint top,uint temp);/T/C1波形产生模式:CTC12void Timer1PCPWM_A_NquiryMode(uin
4、t 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
5、位T/C0相关的寄存器1:T/C0计数寄存器TCNT0,输出比较寄存器OCR0,定时计数器中断屏蔽寄存器TIMSK 定时计数器中断标志寄存器TIFR,T/C0控制寄存器TCCR02:每计数一次需要的时间是(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引脚输入,上升沿触发
6、*/*/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 Time
7、r0PCPWM_NquiryMode(uchar temp)/T/C0查询方式函数while(!(TIFR&0x02); 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
8、= 0x00; GICR = 0x00; TIMSK = 0x02; /timer interrupt sources SEI(); /re-enable interrupts /SREG|=BIT(7);/开启总中断/*/#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP /20void timer0_comp_isr(void) /compare occured TCNT0=OCR0/*/*与8位T/C2相关的寄存器1:T/C2计数寄存器TCNT0,输出比较寄存器OCR2,定时计数器中断屏蔽寄存器TIMSK 定时计数器中断标志寄存器
9、TIFR,T/C2控制寄存器TCCR22:每计数一次需要的时间是(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
10、 = 0x00; TCCR2 = 0x40|0x20|0x04; /PWM设置|OC2触发方式的设置|预分频设置OCR2 = temp; /Focnpwm = Fclk/N(1+TOP)/*/void Timer2PCPWM_NquiryMode(uchar temp)/T/C2查询方式函数while(!(TIFR&0x80); TIFR=0x80;OCR2 = temp;/*/void Timer2PCPWM_InterruptMode(uchar temp)/T/C2中断方式函数 CLI(); /disable all interrupts TCCR2 = 0x00; /stop
11、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 /4void timer2_comp
12、_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和TCCR1B2:每计数一次需要的时间是(1/Xtal)*N us 在此程序中Xtal=8,N定义为与分频系数N:1,8,64,256,1024 /1 : TCCR1B=0x01;/0:无时钟,系统不工作 /8 : TCCR1B=0x02; /64 : TCCR1B=0x03
13、; /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&OC1B的触发方式设置|PWM设置 TCCR1B = (1 << WGM13)|(0 <<
14、WGM12)|0x03;/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&OC1B的触发方式设置 TCCR1B = (1 << WGM13)|(0 << WGM12)
15、|0x03;/PWM设置|预分频设置OCR1A = top; /Focnpwm = Fclk/(2N*TOP)OCR1B = temp;/说明还有8 9 10位相位修正PWM可用/*/void Timer1PCPWM_A_NquiryMode(uint temp)/T/C1比较匹配A查询方式函数while(!(TIFR&0x10); TIFR = 0x10;OCR1A = temp; /Focnpwm = Fclk/(2N*TOP)/*/void Timer1PCPWM_B_NquiryMode(uint temp)/T/C1比较匹配B查询方式函数while(!(TIFR&0x
16、08); TIFR = 0x08;OCR1B = temp; /Focnpwm = Fclk/(2N*TOP)/*中断方式函数视具体情况而定*/void Timer1PCPWM_InterruptMode(uint temp)/T/C1中断方式函数 CLI(); /disable all interrupts DDRD |= 0x30; TCNT1H = 0x00; TCNT1L = 0x00; TCCR1A = 0xA0|(1 << WGM11)|(1 << WGM10); /OC1A&OC1B的触发方式设置|PWM设置 TCCR1B = (1 << WGM13)|(1 << WGM12)|0x03;/PWM设置|预分频设置 OCR1A = temp; OCR1B = temp; /Focnpwm = Fclk/(2N*TOP) MCUCR = 0x00; GICR = 0x00; TIMSK = 0x18; /timer interrupt sources SEI(); /re-enable in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园中班科学《影子游戏》课件
- 生物基材料产业化项目可行性研究报告(范文模板)
- 排水管网错接混接及排水防涝设施改造工程规划设计方案
- 紧急情况处理培训
- 中班艺术活动:漂亮的手帕
- 护理不良事件培训
- 金融科技创新行业深度调研及发展项目商业计划书
- 高空喷涂机器人行业深度调研及发展项目商业计划书
- 哈尔滨市第六十九中学2025年八年级数学第二学期期末经典模拟试题含解析
- 环保型聚丙烯生产企业制定与实施新质生产力项目商业计划书
- 《匹配理论》课件
- 《威尼斯商人》课本剧剧本:一场人性与金钱的较量(6篇)
- 建筑安全管理人员应知应会
- 医疗毒麻药品培训
- GB/T 21477-2024船舶与海上技术非金属软管组件和非金属补偿器的耐火性能试验方法
- 医疗器械经营监督管理办法培训2024
- 2024年公路水运工程试验检测师《道路工程》考试题库大全(含真题等)-中(多选题)
- 中医医术确有专长人员医师资格考核申报资料表
- DB41T 2213-2021 水文自动监测设备维护规程
- 幕墙专业培训资料
- 2024年全国职业院校技能大赛中职(电子产品设计与应用赛项)考试题库(含答案)
评论
0/150
提交评论