6. avr定时器/计数器1 --TC1 --输入捕捉模式 (捕获外部事件模式)

发布者:Zhenai5201314最新更新时间:2017-11-27 来源: eefocus关键字:avr  定时器  计数器  输入捕捉模式 手机看文章 扫描二维码
随时随地手机看文章

T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。外部事件发生的触发信号由引脚ICP1 (PD6)输入,也可通过模拟比较器单元来实现。时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:16 位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1 置位。如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑"1” 清零。读取ICR1 时要先读低字节ICR1L,然后再读高字节ICR1H。读低字节时,高字节被复制到高字节临时寄存器TEMP。CPU 读取ICR1H 时将访问TEMP 寄存器。

操作步骤:

一、捕获输入端口初始化:捕获输入端ICP1(PD6)设为输入,DDRD&=(0<

并使能PD6口的内部上拉电阻,PORTD|=(1<

二、设置定时器的工作模式:TCCR1A=0X00 //普通模式,计数最大值为65535

三、设置分频系数: 1024分频,TCCR1B|=(1<

四、开启捕捉噪声抑制器:TCCR1B|=(1<

五、 设置捕捉触发方式: TCCR1B|=(0<

六、输入捕捉使能: TIMSK|=(1<

七、计数器初始化: TCNT1=0;

八、中断总使能: SREG=0x80;

//函数功能:检测ICP1(PD6)脚上的电平变化,(代码来自轻松玩转avr单片机c语言cd)

#include
#include 
#define uchar unsigned char
#define uint unsigned int
#define beep_0 (PORTD=PORTD&0x7f) //PD7上的蜂鸣器发声
#define beep_1 (PORTD=PORTD|0x80) //PD7上的蜂鸣器不发声
uint count;
/********以下是延时函数********/
void Delay_ms(uint xms)
{
int i,j;
for(i=0;i{ for(j=0;j<1140;j++) ; }
}
/********以下是端口初始化函数********/
void port_init() 
{
DDRA = 0Xff; //PA口设为输出
PORTA = 0Xff; //PA口输出高电平
DDRD &=(0<PORTD |=(1<DDRD |=(1<PORTD |=(1<}
/********以下是定时器1初始化函数********/
void timer1_init()
{
TCCR1A=0X00; //设置为普通模式
TCCR1B |= (1<TIMSK |= (1 << TICIE1); //输入捕捉使能
TIMSK |= (1 << TOIE1); //溢出中断使能
TCNT1=0; //计数初值
SREG=0x80; //使能全局中断 
}
/*********以下是主函数*********/
int main(void) 
{
port_init();
timer1_init(); 
while(1);
}
/********定时/计数器1的输入捕捉中断服务程序********/
#pragma interrupt_handler timer1_CAPT:6
void timer1_CAPT(void) //输入捕捉端口有下降沿电平,则触发中断 
{
TCNT1 = 0; // 清零计数寄存器,下一次仍从0开始计数 
if(ICR1>23438) //判断两次按键之间的间隔是否大于3s 

ICR1 = 0; //清零输入捕捉寄存器 
PORTA =~PORTA; //LED状态翻转
}
}
/********定时/计数器1的溢出中断服务程序********/
#pragma interrupt_handler timer1_OVR:10
void timer1_OVR(void) 
{
beep_0;
Delay_ms(100);
beep_1;
Delay_ms(100);
}


关键字:avr  定时器  计数器  输入捕捉模式 引用地址:6. avr定时器/计数器1 --TC1 --输入捕捉模式 (捕获外部事件模式)

上一篇:标准AVR单片机模拟I2C总线的主机程序
下一篇:5. avr定时器/计数器1 快速PWM输出 (比较输出--快速PWM模式)

推荐阅读最新更新时间:2024-03-16 15:47

AVR EEPROM读写
void Write_byte_eeprom(unsigned short address,unsigned char data) { while (EECR&(1 EEWE)); //等待EEWE变为0 EEAR = address; EEDR = data; EECR |= (1 EEMWE); EECR |= (1 EEWE); } unsigned char Read_byte_eeprom(unsigned short address) { while (EECR&(1 EEWE)); EEAR = address; EECR |= (1 EERE); return EEDR; } voi
[单片机]
Atmel推出具有高速通信功能的AVR32微控制器
  爱特梅尔公司 (Atmel Corporation) 日前宣布推出具有高速通信功能的全新AVR32微控制器AT32UC3A3,其核心是爱特梅尔的91 DMIPS AVR32 CPU,包含带On-The-Go 功能的高速USB接口、双高速SD/MMC卡接口,以及支持单层单元 (SLC) 和多层单元 (MLC)、纠错码 (ECC) 的SDRAM 和 NAND闪存接口。AT32UC3A3 瞄准快速增长的数字媒体解决方案和音频播放器基座 (docking station) 市场,爱特梅尔自2007年推出AT32UC3A系列以来在这些市场已取得了很大的成功。AT32UC3A3还适用于需要快速传输大量数据的广泛的嵌入式应用。   分布
[单片机]
labview的软件计数器和FIFO BUFFER
PLC编程中有大量的定时器和计数器可用,做工业自动化控制的朋友在LABVIEW编程时经常因为找不到类似熟悉的功能而烦恼,其实LABVIEW本身提供的逻辑功能非常强大,远远超过PLC. 看看加计数器的说明: 它有两个控制端 initialize--是计数器复位端,相当于PLC计数器的reset activate----计数控制端,当ACTIVATE=TRUE时,每调用一次,计数器内部计数加1. 两个输出端: Counter---输出计数器当前计数,U32数据类型,最大计数范围0XFFFFFFFF Overflow---溢出,当超过计数器最大计数,为真,计数器自动复位,重新从1开始计数. 应用举例:
[测试测量]
labview的软件<font color='red'>计数器</font>和FIFO BUFFER
【话说定时器系列】之二:STM32常规定时器时基与时钟源
上节提到常规定时器包括:基本定时器、通用定时器和高级定时器。 基本定时器 基本定时器 :没有任何对外输入/输出,主要用作时基计数、定时。 通用定时器 通用定时器 :除了基本定时器的时基功能外,还可对外做输入捕捉、输出比较以及连接其它传感器接口【编码器和霍尔传感器】。 高级定时器 高级定时器: 此类定时器的功能最为强大,除了具备通用定时器的功能外,还包含一些与电机控制和数字电源应用相关的功能,比方带死区控制的互补信号输出、紧急刹车关断输入。 了解STM32定时器 从功能模块整体了解STM32定时器 从寄存器特色了解STM32定时器 定时器中的PS
[单片机]
定时器的使用方法总结
首先理解看门狗定时器方式的使用,简单说,就是有个控制器,选择时钟源,计数方式,等等的控制参数,再配合一个一个累加计数器来确定时间,通过固定的时间间隔来执行中断函数,来得到自己想要的实验结果。 理解之后我们就对最简单的定时器有了一个简单的感念了,了解了基本的定时功能,现在了解下单片机中的TA和TB两个定时器: 首先看TA: 和学习之前的功能一样,先了解寄存器,以及寄存器功能: 定时器A的控制寄存器: 定时器A的计数器: 重点来了: 定时器A的捕获/比较功能寄存器以及中断向量寄存器: 前面的控制寄存器和计数器还好理解一点,主要是选择定时器A的功能和一些基本参数的,这里简单讲下设置步骤: ①选择TA的时钟源和分
[单片机]
<font color='red'>定时器</font>的使用方法总结
SysTick_系统定时器实现流水灯
参考资料《 ARM Cortex™-M4F 技术参考手册》-4.5 章节 SysTick Timer(STK) SysTick(系统滴答定时器),本质上就是一个内嵌在NVIC中的一个定时器,属于内核中的一个外设,是一个24位的向下递减的计数器,计数器每1/SYSCLK就减1,当寄存器的值减到0的时就会产生一次(硬件上的)中断,也有叫做滴答中断。主要的目的1、用来产生精确的延时。2、一般用于操作系统,用于产生时基,维持操作系统的心跳给操作系统提供一个单独的心跳(时钟)节拍。关于对于SyeTick的介绍我推荐看一下这位大神博客 https://blog.csdn.net/yx_l128125/article/details/788
[单片机]
SysTick_系统<font color='red'>定时器</font>实现流水灯
工程师笔记|高精度定时器与高级控制定时器 PWM 封波后再恢复的区别
引言 在高精度定时器中,可以使用外部事件来对 PWM 输出进行封锁,并可自动恢复;在高级控制定时器中,可以使用 Break 或是 Clr_input 来对 PWM 输出进行封锁, 然后也可以自动恢复,其中 Break 必须结合 AOE 置位来实现自动恢复。 虽然都可以实现封波后的自动恢复,但是在二者之间还是存在一些区别。 PWM 封波-自动恢复原理分析 在高精度定时器中,通过配置 PWM 的 Set 与 Reset 事件,当 Set/Reset 事件发生时,PWM 输出做出对应的响应。要实现封波-自动恢复,只需配置合适的 Reset 事件,Reset 发 生时,触发 PWM 输出 inactive 电平,当 Reset 事件
[单片机]
定时计数器T0作定时的电路原理图
  用AT89S51 单片机的定时/计数器T0 产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60 时,自动从0 开始。硬件电路如下图1所示:   1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7 端口用8 芯排线连接到“四路静态数码显示模块”区域中的任一个a-h 端口上;要求:P0.0/AD0对应着a,P0.1/AD1 对应着b,……,P0.7/AD7 对应着h。   2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15 端口用8 芯排线连接到“四路静态数码显示模块”区域中的任一个a-h 端口上;要求:P2.0/A8 对应着a,P2.1/A9 对应着b,……,P2.7/A15
[单片机]
定时<font color='red'>计数器</font>T0作定时的电路原理图
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved