当前位置:首页 > 单片机 > 单片机
[导读]四、ATMEGA16的定时/计数器四—(02)、T/C1定时器A/B比较匹配中断和溢出中断实现LED亮度自动调节啊~~~~~图~~~~~这里没有什么要注意的,只要理解并会控制T/C1的两个比较匹配中断A/B和溢出中断,That's all ~~然后

四、ATMEGA16的定时/计数器

四—(02)、T/C1定时器A/B比较匹配中断和溢出中断实现LED亮度自动调节

啊~~~~~

图~~~~~

这里没有什么要注意的,只要理解并会控制T/C1的两个比较匹配中断A/B和溢出中断,That's all ~~

然后就是仿真图片~





好了,就代码吧~~

哈(有几点我也不是很清楚~~哎~~~不过不重要,它出来了~~哈

//------------------------------------------------------------------------------
//通过比较匹配中断和定时器溢出中断(T1)来控制LED亮度的自动变化
//定时器T1的定时长度设置为32.768ms,定时器T1的比较匹配寄存器设置为10位快速PWM模式
//在定时器T1发生溢出中断之前,首先比较中断触发,点亮LED灯;定时器T1继续运行直到溢出,
//将LED关闭。主程序不断改变着比较匹配值(从接近最小值0到接近最大值1023),因此输出的脉宽
//(既LED的亮度)会自动变化。
//由于定时器T1具有2个比较匹配寄存器(OCR1A、OCR1B),既可实现2个LED灯的自动变化
#include"ioavr.h"
#include"intrinsics.h"
#include"Delay.h"
typedef unsigned char uchar;
typedef unsigned intuint;
#define CPL_BIT(x,y)(x^=(1<#define CLR_BIT(x,y)(x&=~(1<#define SET_BIT(x,y)(x|=(1<#define GET_BIT(x,y)(x&(1<ucharflag_a=1,flag_b=0;
//------------------------------------------------------------------------------
//端口定时函数
voidport_init()
{
DDRB=0XFF;
PORTB=0XFF;
}
//------------------------------------------------------------------------------
//T1的初始化函数
voidtimer1_init()
{
OCR1B=0X00;//stop
TCNT1H=0X00;//定时器初值为0
TCNT1L=0X00;
OCR1AH=0X03;//由于工作在10位快速PWM模式计数上线值TOP为0X3FF(这个我不知道到底需不需要设置,是不是体统自己就设置好了~~~)还有就是它如果溢出呢?大于0X03FF?会怎么样?
OCR1AL=0XFF;
OCR1BH=0X03;
OCR1BL=0XFF;
TCCR1A=0X03;//设置A/B端口为普通端口操作,10位快速PWM模式,T/C1的时钟源为来自预分频器的256分频
TCCR1B=0X0C;
}
//------------------------------------------------------------------------------
//芯片初始化函数
voiddevice_init()
{
__disable_interrupt();//disable all interrupts
port_init();
timer1_init();
TIMSK=0X1C;//T/C1输出比较A/B匹配中断使能以及溢出中断使能
__enable_interrupt();
}
//------------------------------------------------------------------------------
//main
voidmain()
{
device_init();
while(1)
{
delay_s(1);//延时,有益处~~~!最大延时我还不知道~~~
//--------------------------------------------------------------------------
//flag_a=1的时候OCR1A+=20,如果OCR1A>1000,清零flag_a
if(GET_BIT(flag_a,0)==1)
OCR1A+=20;
if(OCR1A>1000)
CLR_BIT(flag_a,0);
//--------------------------------------------------------------------------
//flag_a=0的情况
if(GET_BIT(flag_a,0)==0)
OCR1A-=20;
if(OCR1A<20)
SET_BIT(flag_a,0);
//--------------------------------------------------------------------------
//flag_b=1的情况
if(GET_BIT(flag_b,0)==1)
OCR1B+=10;
if(OCR1A>1000)
CLR_BIT(flag_b,0);
//--------------------------------------------------------------------------
//flag_b=1的情况
if(GET_BIT(flag_b,0)==0)
OCR1B-=10;
if(OCR1B<10)
SET_BIT(flag_b,0);
}
}
//------------------------------------------------------------------------------
//TIMER1_COMPA
#pragma vector=TIMER1_COMPA_vect
__interrupt voidtimer1_compa()
{
CLR_BIT(PORTB,0);
}
//------------------------------------------------------------------------------
//TIMER1_COMPB
#pragma vector=TIMER1_COMPB_vect
__interrupt voidtimer1_compb()
{
CLR_BIT(PORTB,7);
}
//------------------------------------------------------------------------------
//TIMER1_OVF
#pragma vector=TIMER1_OVF_vect
__interrupt voidtimer1_ovf()
{
SET_BIT(PORTB,0);
SET_BIT(PORTB,7);
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Holtek推出新一代无刷直流电机 (BLDC) 控制专用单片机 HT32F65233。采用 Arm® Cortex®-M0+ 低功耗内核, 具备 2.5 V~5.5 V 宽电压操作。系统电压为 5 V 时,可获得更高的...

关键字: BLDC单片机 电机驱动 计数器

你可能会想象他们使用先进的人工智能相机来计算访客人数,但实际上,一个简单的基于传感器的系统就能有效地完成这项工作!通过在入口和出口点放置红外传感器,这些系统检测移动方向并保持准确计数。不需要花哨的技术。

关键字: Arduino IR传感器 计数器

该项目利用OLED显示器和两个输入开关,允许用户增加屏幕上显示的两个数字(10和单位)。代码由设置和循环函数组成,用于管理显示和开关输入。

关键字: OLED 显示器 计数器

在数字电路设计中,计数器是一种基础的数字电路组件,用于记录并显示脉冲信号的数量或频率。4进制计数器,即模4计数器,是一种特殊的计数器,其计数范围从0到3,共4个状态。本文将深入探讨如何结合D触发器与寄存器来实现一个4进制...

关键字: D触发器 寄存器 计数器

在现代电子工程中,计数器作为数字系统中的基本构件,扮演着举足轻重的角色。它们能够精确地记录并显示脉冲的数量,广泛应用于时钟信号生成、频率测量、状态机实现以及定时控制等场景。本文旨在探讨如何利用Verilog这一硬件描述语...

关键字: Verilog 计数器

74LS192是一款广泛应用在数字电子系统中的同步十进制可逆计数器集成电路,属于美国德州仪器(TI)早期推出的7400系列TTL逻辑家族的一员。该芯片设计为四位二进制计数器,并因其特殊的十进制计数特性以及双向计数能力而广...

关键字: 74ls192 计数器

2023年11月28日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 宣布与全球工业自动化领域知名供应商Siemens签订代理协议。Sieme...

关键字: 工业自动化 人机接口 计数器

外部输入、输出继电器、内部继电器、定时器、计数器等器件的接点可多次重复使用,无需用复杂的程序结构来减少接点的使用次数。

关键字: plc编程 定时器 计数器

单片机可以通过“定时/计数模式选择位C/T”令定时/计数器工作于定时或计数模式下,也可通过“工作方式选择位M1M0”设定其工作方式。C/T和M1M0等与定时/计数器有关的位在寄存器TCON或TMOD中,见表4-8和表4-...

关键字: 寄存器 计数器 定时器

在家电产品和工业应用系统中,定时和计数是两种常用的功能,如:微波炉加热计时和流水线上产品数目统计等。MCS-51单片机内部集成的两个可编程定时/计数器T0和T1使用灵活、方便,在仪器仪表等工业产品中应用广泛。

关键字: 计数器 定时器 单片机
关闭