首先先说一下AVR8位的通用定时器寄存器T/C0:
有一句不太理解的话:所有中断都可以通过 (定时器中断屏蔽寄存器)TIMSK单独进行屏蔽。
解释:TIMSK寄存器是一个定时器/计数器中断屏蔽寄存器,就是说TIMSK可以去单独屏蔽一些中断。
适用于内部的定义: BOTTOM 计数器达到0x00时即达到BOTTOM MAX:计数器计数达到最大值时达到MAX
时钟源的配置:可以选择内部时钟配置或者外部时钟配置。
计数器的操作:对于计数器来说,计数器计数始终增加,当计数器值超过0xff时,从ox00开始重新计数。当TCNT0计数器置为0时,溢出标志位TOV0置位。
TOV0可以通国定时器溢出中断清零。
/*下面正式进入定时器的探究学习*/
定时器的操作:首先肯定是需要设定初值,然后给定时器设置的一般步骤是(1)配置TIMSK寄存器-溢出中断使能哪一个定时器;(2)配置TCCRX寄存器,设定时钟源信号分频率;(3)配置TCNTX寄存器,设定初值。
那么在中断函数中的使用最主要的一点是将中断向量地址映射到正确的地方上,一般来说定时器的中断向量地址必须在TIFR寄存器中配置0位-TVOX溢出标志位来判断是否进入定时器中断,但是在AVR中,直接在中断函数名中映射中断溢出向量也可以达到这个目的:
interrupt [TIM2_OVF] void timer2_ovf_isr(void) //其中的TIM2_OVF便是定时器2的溢出标志位
定时器中断进入后,一般需要重置定时的初值 TCNTX,然后编写代码函数。
所以总结一下。定时器的操作:
定时器的初始化:
(1)配置TIMSK 中断溢出使能
(2)配置TCCRX 定时器使能
(3)配置TCNTX 定时器初始化的配置
定时器中断的设置:
(1)函数名的配置--必须和定时器的中断变量映射一致
(2)进入函数后最好先初始化定时器TCNTX的初值
关键字:AVR 定时器
引用地址:
AVR定时器的探索
推荐阅读最新更新时间:2024-03-16 16:08
基于AVR单片机的有害气体红外检测及语音警示系统的设计
利用红外感应系统感应附近有无有害气体,当红外感应系统感受到有有害气体接近时,送出持续一段时间的高电平;单片机通过开启中断,启动语音芯片,单片机通过串口通信,从上位机提取的有害气体参数提示给附近人体,并经过与安全值的比较判定当前环境是否安全。对语音芯片的使用,先将必要的文字、数字信息录制进去,放音时,通过单片机自动寻址,把实时参数读取出来。为便于以后系统改进或移植到其他系统,可设计录音、放音电路,通过切换录制不同内容。系统设计友好、方便,给人的信息也更加直接。 1系统总体设计方案 在气体浓度是现有可利用的数据的基础上,考虑了系统的衔接性和可移植性。系统总体方案见图1。 本系统分为四大模块:核心控制模块、语音电路模块、红外感应模块以
[单片机]
mini2440裸机试炼之——PWM定时器按键更改频率
资料:《s3c2440中文数据手册(完整版)》 第九章:输入输出端口 ; 第十章:PWM蜂鸣器 //按按键k1蜂鸣器频率降低, //按按键k2蜂鸣器频率升高, //按按键k3退出蜂鸣器测试 //按按键k4开启蜂鸣器测试 #define GPBCON (*(volatile unsigned long*)0x56000010) //rGPBCON是指向0x56000010这个地址空间的一个宏 #define GPBDAT (*(volatile unsigned long*)0x56000014) //led GPIO #define GPGCON (*(volatile unsigned long*)0x
[单片机]
VxWorks下基于看门狗的通用定时器设计
引言 VxWorks是目前应用最多的嵌入式实时操作系统之一,广泛应用于工业控制、医疗器械、通信、航空航天以及武器装备等领域。VxWorks是32位实时嵌入式操作系统,自20世纪80年代由风河公司推出以来,其良好的实时性、对多任务的支持、体积精简、可剪裁等优点得到众多公司、开发者及用户的喜爱。 在实时性要求高的应用系统中,定时器是经常被用到的重要器件。而对于VxWorks操作系统本身来说,并未提供一个通用、高效的定时器组件。文章所提出的共享看门狗定时机制就是针对这种情况实现的一种通用型定时器组件。 1 VxWorks定时的方法 1.1 使用taskDely函数 函数原型为:STATUS taskDela
[工业控制]
AVR单片机电压表程序
AVR电压表程序: #include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define setb(val,bitn) (val|=(1 (bitn)))//设置某IO口某位为1 #define clr(val,bitn) (val&=~(1 (bitn)))//设置某IO口某位为0 #define get(val,bitn) (val&(1 (bitn)))//读取某位状态如 uchar shi=20,fen=39,miao,a=0xff,num; #pragma data:code//定义程序存在RO
[单片机]
MSP430定时器A 输出1KHz的PWM方波
简介:输出模式0 输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。最终位OUTx直通。 定时器A输出方波 1、定时器的PWM输出8种模式 输出模式0输出模式:输出信号OUTx由每个捕获/比较模块的控制寄存器CCTLx中的OUTx位定义,并在写入该寄存器后立即更新。最终位OUTx直通。 输出模式1置位模式:输出信号在TAR等于CCRx时置位,并保持置位到定时器复位或选择另一种输出模式为止。 输出模式2PWM翻转/复位模式:输出在TAR的值等于CCRx时翻转,当TAR的值等于CCR0时复位。 输出模式3PWM置位/复位模式:输出在TAR的值等于
[单片机]
51单片机定时器定时模式
写点专业的知识吧,也是初学,大家共同学习。好,废话少说,进入主题 初学51单片机的人都接触到定时器这个东西,关于定时器也有很多资料,包括内部结构,如何执行。但是说到模式,我想刚学的时候听他们讲的那堆乱七八糟的模式都很费解,什么模式0,模式1,十六位,八位。我到现在也没有明白。但是我在编程时,对这东西有一个初步的理解。 首先是定时器为啥要先装初值,这东西打个比方,古代定时用的是沙漏,沙漏是先在桶中装上沙子,在钻一个眼,沙子都溜走时,为一个周期。如果要定时,装的就是最后的那个时间,加入我定10毫秒,则是10、9、8、7、6 ,直到0,启动中断。而还有一种方法就在木桶中滴水,木桶的容积是一定的,水滴满以后就是一个周期。加入那个木桶可以装
[单片机]
STM32定时器输出带有死区时间的PWM波形
要求得到下列波形,死区时间为1us,CH1,CH2,CH3之间的相位差为3us,频率为50KHz main.c /********************************************* 标题:定时器输出带有死区时间的PWM波形 软件平台:MDK-ARM Standard Version4.70 硬件平台:stm32f4-discovery 主频:168M Periph_Driver_version: V1.0.0 描述:用一个定时器(TIM1),输出带有死区时间的PWM波形,要求:死区时间为1us,CH1,CH2,CH3之间的相位差为3us,频率为50KHz 代码参考
[单片机]
基础定时器实验
7.1 STM32定时器概述 STM32内部共有8个定时器,其中Timer1和Timer8属于高级定时器,Timer2~Timer5属于通用定时器,8个定时器的资源独立,互不影响。 STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。 通用定时器的内部结构如下图所示。 7.2 相关 寄存器 要使用通用定时器
[单片机]