- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机与嵌入式系统(111x)—10典型单片机系统avr-定时器
相位修正PWM模式 相频修正PWM模式 相位与相频修正PWM模式 均以ICR1或者OCR1A作为TOP值 通过OCR1A或者ICR1作为比较值 可以产生高精度PWM波形 最大的不同是比较计数值(OCR1A)和TOP值(ICR1)的设置时间不同 相位修正:在达到TOP值之后修正 相频修正:是在达到BOTTOM后修正更新 16位寄存器的操作 计数器的数据一旦写入将进行操作,16位寄存器应当如何操作? 读取和写入时,可能读取的数值已经变化 读写操作时数据要一次性读出或写入!——同步读写16位 特殊设置:1个8位临时辅助寄存器TR 读16位寄存器的过程: 读取低字节,同时将高字节数值打入TR中 读取高字节,此时实际读取的将是TR数据 高低字节的读取必须相连进行,读完低位必须立即读取高位 写数据过程: 先写高字节,计时器将会把数据暂存在TR中 写低字节,此时同时将TR中的数据和低字节数据一起写入 高低字节的写数据过程必须相连进行,写完高字节必须立即写低字节 16位计数器/定时器的主要用途 获取更高的定时精度和更长的定时时间 获得更精确、更多种类的、更加完善的PWM波形 可以同时产生两个频率相同、占空比不同的PWM波形 事件捕获功能,可以用于外部时间的周期和频率的精确测量 10.3 定时器的应用 对外部脉冲信号进行计数 对外部信号进行计数,一旦达到某个值(MAX、BOTTOM或者OCR寄存器给定的值)通知处理器进行处理 对外部事件进行监控 进行精确的定时 利用系统时钟、或者外部时钟进行一段固定时间长度的定时,达到某个时间长度后通知处理器进行相应的处理 软件同步、周期性操作等 获得某种形式的脉冲波形 定时器使用的注意事项 选择合适的定时器 选择定时器合适的工作模式 选择/设计合适的脉冲信号 选择合适的触发方式 选择合适的输出模式 设计合适的比较数值 进行正确的中断服务程序设计 定时器相关寄存器 TC0控制寄存器 T/C 寄存器- TCNT0 输出比较寄存器- OCR0 T/C 中断屏蔽寄存器- TIMSK T/C 中断标志寄存器- TIFR 问题1:系统时钟为4MHz,利用最简单的方法实现一个占空比1:1的12K脉冲信号 问题分析: 3个定时器应当都能使用,选择定时器0 占空比要求1:1,因此一般使用CTC模式 时钟脉冲使用4MHz系统时钟 设计频率要求12K,根据公式(1)OCR0设定值为:166因此不需要分频 系统要求波形输出,需要选择输出模式为取反方式输出 系统没有其他要求,因此不需要中断服务程序 问题2:系统时钟为4MHz,利用最简单的方法实现占空比1:1的、每10个12K与10个24K脉冲信号相间的混合信号 问题分析: 与问题1不同,此处要求两个频率信号交替出现,因此需要修改OCR0的设定值 12K信号OCR0=166;24K信号OCR0=82 修改方式:采用在OC0中断出现并计数够10次时,修改OCR0 中断服务程序: 需要交替更新OCR0的值 更新时机中断计数达到10次,进行OCR0的修改,每次修改后中断计数清零 中断服务程序: Unsigned char Int_Count=0; //全局变量 OCR0=166; //需要在主程序中首先设定 #pragma interrupt_handler Time0_OC0_isr:20void Time0_OC0_isr (void) { Int_Count++; if(Int_Count=10) { Int_Count = 0 if (OCR0==166) OCR0=82 else OCR0=166; } } 问题3:利用定时器进行程序调度。假定一个AVR单片机系统(1M主频)中有3个子程序:fun1、 fun2、 fun3,需要定时调度;三个子程序执行时间分别为:0.1ms、0.5ms、0.3ms;调度周期分别为: 1ms、2.5ms、3.3ms ;程序优先级fun1最大、 fun3最小,试进行定时器设计。 分析: 内部需要进行定时,使用时钟1MHz 不需要输出物理波形,输出方式可以设为00,与引脚脱离 工作模式:使用CTC模式 三个定时器均可以使用,选用定时器0 3个程序处理时间最小公约数是0.1ms,因此定义定时周期的单位为0.1ms 系统时钟采用1Mhz,0.1ms需要100个时钟周期,OCR0设定99 利用中断计数来实现各个时间的定时调度 中断服务程序: Unsigned long Int_Count=0; OCR0=99; //需要在主程序中首先设定,即此时OC0中断位ms中断 #pragma interrupt_handler Time0_OC0_isr:20
文档评论(0)