CTC:比较匹配时清零计数器模式,。当计数器TCNT0的数值等于比较寄存器OCR0时计数器TCNT0自动清零。OCR0定义了计数器的最大(TOP)值,这个模式使得用户可以很容易地控制比较匹配输出的频率。T/C0的比较输出脚为OC0(PB3),PB口的第三脚,在此模式下可以在OC0上输出PWM控制外部设备。
例如:在OC0脚上输出20HZ的方波信号,方波的周期时间为T=1/20HZ=0.05秒=50ms,半个周期为25ms,系统采用8MHZ晶振,1024分频,时钟计数频率为8000000/1024=7812.5HZ,每个时钟脉冲时间为1/7812.5=0.128ms, 定时25ms的计数值为25ms/0.128ms=195,将195赋值为T/C0的比较寄存器OCR0,启动定时器后,TCNT0从0开始计数,当计数到195时,产生比较中断,在OC0脚上输出20HZ的占空比为50%的方波信号。
操作过程如下:
一、I/O管脚初始化:PB3(OC0)脚设为输出,DDRB|=(1<二、使能全局中断:SREG=0X80;
三、T/C0比较中断允许:TIMSK|=(1<四、TCCR0配置:分频系数为1024, TCCR0|=(1<CTC模式设置, TCCR0|=(1<比较匹配时OC0取反 TCCR0|=(1<五、计数器付初值: TCNT0=0;
OCR0=195; //付初值后定时器开始工作
//函数功能:在PB3上输出20HZ的方波,并在PD7上产生周期2秒的周期信号。(代码来自轻松玩转avr单片机c语言cd)
#include
char Counter = 0; // 计数变量清零
void port_init()
{
DDRB|=(1<PORTB&=(0<DDRD|=(1<PORTD&=(0<}
void timer0_init()
{
SREG = 0x80; //使能全局中断
TIMSK= (1<< OCIE0); //T/C0比较匹配中断允许
TCCR0=(1<// T/C0工作于CTC模式,1024分频,比较匹配时,触发OC0取反
TCNT0 = 0; //定时初值设置,
OCR0 = 195; //比较匹配寄存器初值
}
void main()
{
port_init();
timer0_init();
while(1);
}
#pragma interrupt_handler timer0_COMP:20
void timer0_COMP(void)
{
TCNT0 = 0; //定时初值设置,
OCR0 = 195; //比较匹配寄存器初值
if(++Counter >= 40) //定时时间到1S吗?定时中断溢出40次为1S
{
PORTD^=(1<Counter = 0; //1S计时变量清零
}
}
关键字:AVR 中断
引用地址:
AVR 比较匹配中断
推荐阅读最新更新时间:2024-03-16 15:46
S3C2440外部中断响应寄存器设置方法
如果不按照如下设置,中断将无法执行或者无法使下一个中断进入。 /*中断挂起设置,此过程加入到主函数中启动时加载*/ void Eint_wait() { rSRCPND=rSRCPND; //中断挂起寄存器清除 rINTPND=rINTPND; //中断源挂起寄存器清除 rEINTPEND|=0x1 13; //外部中断挂起寄存器,Eint挂起等待中断 rSRCPND=BIT_EINT8_23; //中断源挂起寄存器相应位置1等待中断 rINTPND=BIT_EINT8_23; //中断挂起寄存器相应位置1等待中断 } /*中断挂起设置结束*/ /*以下为响应中断时的处理过程,为pISR指针中的函数*/
[单片机]
STM32_TIM定时-中断
今天讲解STM32F103定时器定时-中断功能,在昨天定时器延时的软件工程上添加TIM3定时的功能,自己也可以试着将昨天的工程添加修改得到。 今天的软件工程下载地址(360云盘): https://yunpan.cn/cPnJ9KYcXbPsP 访问密码 acd8 工程现象:间隔(定时器定时)500ms LED变化一次, 并且串口打印 STM32F103ZE有8个定时器(TIM1 – TIM8), 改工程以TIM3定时为例。 STM32F10x的资料可以在我360云盘下载: https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90 关于TIM延时,我把重要的几点在下面分别讲述,工程中
[单片机]
单片机中断定时程序的应用
学习进度真的有点慢,我觉得也许我不应该顾这顾那了,学习东西不能太 贪 ,既学这方面的又学那方面的,学知识更要靠自己,自己为主,别人为辅。不能既学中断,定时,计数,又想着学数码管,按键的控制,我想这样只能让我鱼和熊掌兼失也。所以,李俊轩。好好的给自己定一个目标,然后努力吧,不要再捡了芝麻又丢了瓜了。 这是最近一直没有写日志的原因吧,最近学习的进度感觉特别慢。哎。又是浪费了一些天了,罪过罪过。 昨天杨老师给我布置的作业我想了好久都没有做出来,哎,失败,特别是那句更何况你是一个大学生,也许吧,我都没有做到一个学生的样,接下来的日子要好好努力了。至于13至27的显示,我想我会完成的,再给自己点时间,在51hei看N次这课中断 http:/
[单片机]
STM32 中断使用
STM32中断有时候用多了容易乱,特此记录一下,因为之前一直是M3 M0交叉用,固件库有些区别容易弄混,这里说一下M3外部中断的配置 步骤: 1.将对应的IO配置为输入 2.将IO对应的中断的优先等级用NVIC配置好 3.设置好对应IO的中断模式和触发方式 4.将IO所属的中断线设为中断输入源 1---------以PB5为例子 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(G
[单片机]
N76E003 低功耗(掉电模式&管脚中断唤醒)
N76E003每个管脚都提供管脚输入中断功能,用于检测管脚电平状态,如按键或键盘是否按下。最多配置8个I/O管脚用于管脚中断。任何按键按下时通过边沿或电平触发产生一个管脚中断事件。管脚中断能 使MCU从空闲模式或掉电模式唤醒可以通过外部中断使N76E003从掉电模式唤醒。触发外部中断管脚会重启系统时钟,在振荡器稳定后,设备执行外部中断对应的中断服务程序( ISR)。 从ISR返回后,设备立即执行使系统进入掉电 模式的指令接下来的指令。 可以将芯片从掉电模式唤醒的中断有:外部中断、引脚中断、WDT中断、 WTK中断和欠压中断。 #include N76E003.h #include Common.h #include Del
[单片机]
stm32中断学习总结
经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的。但对于要做简单开发的我来说这些已经够了。 我学习喜欢从一个例程来看,下面的程序是我粘贴但是改编的,大部分都做了注释。 主要是感谢这位博主的文章:http://www.cnblogs.com/chineseboy/archive/2013/03/14/2956782.html 其实主要步骤就是: 1、将GPIO口配置成中断输入模式。 void Init_LED(void) { GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO结构体变量 RCC_APB2PeriphCl
[单片机]
STM32外部中断
68个可屏蔽中断通道,包括EXTI,TIM,ADC,USART,SPI,I²C,RTC等多个外设(F1系列最多的数量,以型号为主); 使用NVIC统一管理中断,每个中断通道都拥有16个可编程优先等级,可以对优先级进行分组,进一步设置抢占优先级和响应优先级。 AFIO内部图 EXTI内部图 中断和事件的区别 NVIC的中断优先级由优先级寄存器的4位(0-15)决定,这四位可以进行切分,分为高N位的抢占优先级, 和4-n位的响应优先级; 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的话, 按照中断号排队。 操作的是NVIC- IPRx寄存器 中断示例 mai
[单片机]
Windows9x/NT及2000下中断驱动程序的统一化处理
摘要: 针对Windows9x/NT及Windows2000操作系统,利用Windriver工具包,实现了在多种操作系统下对硬件中断驱动程序进行统一化处理,保证了程序在不同的操作系统下良好的移植性矣兼容性,并给出了用C语言编写的程序实例。 关键词: Windows9x/NT/2000 虚拟设备驱动程序(VxD) Windriver工具包 中断驱动程序的统一化处理 Windows以其友好的图形用户界面,使得它不仅成为办公管理首选的操作系统,也日益受到工程技术人员的关注,逐渐取代DOS而成为主流的工程应用控制平台。但是,Windows系统为了保证平台的安全与完
[嵌入式]