完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
T/C0,定时器,计时器0普通模式。TCNT0从 0x00到0xFF 数256个数,然后在回到0X00,要是允许溢出中断清零后就去执行中断服务(计数不停)
在使用时只需要操作三个寄存器 1.SREG Status Register 状态寄存器 蓝色标记I 就是全局中断使能位(Global Interrupt Enable) 使用普通模式溢出中断,所以此位置 置1打开全局中断。 SREG |=0X80; 2.TCCR0 T/C Control Register 0 T/C0的控制寄存器 在这个寄存器中选择T/C0的工作模式,和相应模式下的配置细节,比如在T/C0的CTC模式的时候就通过这个寄存器选择CTC,同时配置比较匹配输出模式,说白就是OC口这时候干什么,怎么干。 这里操作 bit6:WGM00 bit4:WGM01 WGM——>Wareform Generation Mode 波形生成模式;个人觉得弄懂寄存器的英文是有好处的,方便记忆。 bit2:CS02 - bit1:CS01 -|—> CS Clock Selects 用来进行时钟选择 用内部时钟还是外部时钟 对内部时钟进行怎样分频 bit0:CS00 -/ 怎么配置直接去找Datasheet 觉得现在得锻炼找数据手册的能力,以后拿到陌生的芯片不会慌。 *COM0包括COM00:COM01,所以WGM01是bit 4 3TIMSK( TC interrupt mask 中断屏蔽寄存器//看了这个才知道mask还有动词 掩饰掩盖的的意思) 还是Datasheet方便哈 普通模式只能使用溢出中断使能 bit0:TOIE0 =1 ——TC Overflow interrupt Enable 0 介绍完操作三个寄存器,下面通过我自己写的代码看看怎么实战 我把普通模式写成了名为“TC0putong.h”的库 #ifndef TC0putong_h #define TC0putong_h class TC0putong{ public: void init(int NUM);//T/C0初始化函数 NUM表示分频因子的选择 }; #endif; #include "TC0putong.h" void TC0putong::init(int NUM) { SREG |= 0X80;//打开全局中断 if(NUM==0)TCCR0 &=0Xf8;//如果分频系数选择是0 就把TCCR0的第三位改为 0 0 0 else if (NUM==8) TCCR0 |=0x02;//如果分频系数选择是8 就把TCCR0的第三位改为 0 1 0 else if (NUM==64) TCCR0 |=0x03;//如果分频系数选择是 64就把TCCR0的第三位改为 0 1 1 else if (NUM==256) TCCR0 |=0x04;//如果分频系数选择是256 就把TCCR0的第三位改为 1 0 0 else if (NUM==1024) TCCR0|=0x05;//如果分频系数选择是1024 就把TCCR0的第三位改为 1 0 1 else TCCR0 |=0x01;//都不是 使用1分频 TCCR0的第三位改为 0 0 1 TIMSK = 0X01;//打开溢出中断 } #include #include #include #include #include "TC0putong.h" #include "TC0putong.cpp" TC0putong TC0;//TC0使用 TC0putong类 int main(void) { TC0.init(8);//TC0 初始化 8分频 DDRB=0XFF; while (1) { PORTB=0x00; } } ISR (TIMER0_OVF_vect) { PORTB=0x01; _delay_us(200); } 使用PROTUES 进行仿真 电路设计如下 为直观体现实验效果,在B口添加一个方波作为参照,参数如下 输出周期=系统时钟周期*N*256 系统时钟周期计算结果如下 然后开始使用protues进行仿真在图像上是能看到周期是上面计算出来的那些。 protues又这个问题了....必须重启电脑,重启软件还不行。 8分频结果(下图) 256分频结果(下图) OK,至此,我的T/C0普通模式学习完毕!最近一直在听一个程序员的电台节目,叫软件那些事,那程序猿说那些节目都是他录给以后的自己听,自我感动一下。想了想,自己也可以用某种方式,留住现在的自己,供以后去回味。 书至此,望指正!我是Vulcan。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5172 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7791 浏览 0 评论
3070 浏览 2 评论
3124 浏览 1 评论
10102 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 18:31 , Processed in 0.407775 second(s), Total 44, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号