AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02

发布者:annye_cheng最新更新时间:2017-11-21 来源: eefocus关键字:AVR单片机  ATMEGA16  定时  计数器 手机看文章 扫描二维码
随时随地手机看文章

四、ATMEGA16的定时/计数器

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

啊~~~~~

图~~~~~

这里没有什么要注意的,只要理解并会控制T/C1的两个比较匹配中断A/B和溢出中断,That's all ~~AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02

然后就是仿真图片~

AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02

AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02

好了,就代码吧~~

AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02(有几点我也不是很清楚~~哎~~~不过不重要,它出来了~~哈

 

//------------------------------------------------------------------------------
//通过比较匹配中断和定时器溢出中断(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 int  uint;
#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<uchar   flag_a=1,flag_b=0;
//------------------------------------------------------------------------------
//端口定时函数
void  port_init()
{
  DDRB=0XFF;
  PORTB=0XFF;
}
//------------------------------------------------------------------------------
//T1的初始化函数
void  timer1_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;
}
//------------------------------------------------------------------------------
//芯片初始化函数
void  device_init()
{
  __disable_interrupt();      //disable all interrupts
  port_init();
  timer1_init();
  TIMSK=0X1C;                 //T/C1输出比较A/B匹配中断使能以及溢出中断使能
  __enable_interrupt();
}
//------------------------------------------------------------------------------
//main
void  main()
{
  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 void  timer1_compa()
{
  CLR_BIT(PORTB,0);
}
//------------------------------------------------------------------------------
//TIMER1_COMPB
#pragma vector=TIMER1_COMPB_vect
__interrupt void  timer1_compb()
{
  CLR_BIT(PORTB,7);
}
//------------------------------------------------------------------------------
//TIMER1_OVF
#pragma vector=TIMER1_OVF_vect
__interrupt void  timer1_ovf()
{
  SET_BIT(PORTB,0);
  SET_BIT(PORTB,7);
}


关键字:AVR单片机  ATMEGA16  定时  计数器 引用地址:AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—02

上一篇:AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—03
下一篇:AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—01

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

r8051xc2定时器2的用法
T2CON----定时器2控制寄存器 t2con.7---t2ps:时钟的选择 0:定时器2的clocked是1/12的振荡器频率 1:定时器2的clocked是1/24的振荡器频率 t2con.6---3fr :外部中断int3的活跃选择(也用来比较和获取信号) 0 :falling edge 1 :rising edge t2con.5---i2fr:外部中断int2的活跃选择(也用来比较和获取信号) 0 :falling edge 1 :rising edge t
[单片机]
51单片机实验——十六进制计数器
1.实验题目: 用P0.0- P0.03设计一个在0-15之间自动计数的十六进制计数器,每个数持0.2s。 代码采用SWITCH语句,利用for循环实现16进制的计数器设计。 四个IO口相连接的LED灯按照0000-1111的二进制变化顺序进行计数。 2.KEIL代码 #include reg51.h #include intrins.h sbit P00=P0^0; sbit P01=P0^1; sbit P02=P0^2; sbit P03=P0^3; void Delay200ms();//声明延时函数 void main() { int i=0; while(1) { for(i=0;i 1
[单片机]
51单片机实验——十六进制<font color='red'>计数器</font>
4. avr 定时器/计数器1 --TC1 --CTC模式输出PWM
T/C1是16位定时器/计数器,它的计数器由两个8位寄存器TCNT1H,TCNT1L构成,TCNT1H是高8位寄存器,TCNT1L是低8位寄存器。最大计算值为2的16次幂,十六进制是0xFFFF=65535. 例如:定时200ms ,晶振8MHZ,分频系数1024,计数时钟频率为8MHZ/1024=8000000HZ/1024=7812.5HZ,每个计数脉冲的周期时间为1/7812.5=0.128ms,计时200ms的计数器值为:65635-200ms/0.128ms=63972=0xF9E4 ,则TCNT1H付初值为0xF9,TCNT1L付初值为0xE4. //函数功能:实现PA口的led亮0.1S,灭0.9S #include
[单片机]
51单片机2路舵机驱动(定时器法)
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit PWM1=P3^6; sbit PWM2=P3^7; uint aa; void tuoji_init() { TMOD=0x01; TH0=(65536-38)/256;//定时50us TL0=(65536-38)%6; EA=1; ET0=1; TR0=1; PWM1=1; PWM2=1; } void chudong_pwm(uchar temp1,uchar temp2) { if(aa==temp1) // 取值13-28-45(右转90度
[单片机]
MSP430单片机定时器面面观
对于MSP430 X449而言: 默认情况如下: ACLK = LFXT1 = 32768Hz, 低频时钟源 MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz 高频时钟源 ACLK ,MCLK ,SMCLK的频率可以根据 FLL+相应的寄存器来调节 时钟源有: LFXT1CLK: 32768 HZ 即:32K XT2CLK: 4M DCOCLK: 选择AP18PF时 FN_2 1.04875M FN_3 1.08860M FN_4 1.710 FN_8 3.4M 以下引脚的复用功能如下: P1.5 : ACLK
[单片机]
MSP430单片机<font color='red'>定时</font>器面面观
xs128 双定时器PIT0和PIT1
/***************************************************************** ** 函数说明:xs128 双定时器PIT0和PIT1 ** 版 本:V1.00 ** 修 改:庞辉 芜湖联大飞思卡尔工作室 ** 修改日期:2011年09月19日 ** ** 说 明:PLL倍频到80Mhz,PB0口灯1s闪烁,PB1口灯2s闪烁 ** ** 版本更新:详见readme.txt **
[单片机]
51单片机定时器/计数器
一、80C51定时/计数器 定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。 (二) 定时/计数器的控制寄存器 ⒈ 定时/计数器控制寄存器TCON (1) TCON.7 TF1:定时器1溢出标志位。当定时器1计满数产生溢出时,由硬件自动置TF1=1。在中断允许时,向CPU发出定时器1的中断请求,进入中断服务程序后,由硬件自动清0。在中断屏蔽时,TF1可作查询测试用,此时只能由软件清0。 (2) TCON.6 TR1:定时器1运行控制位。由软件置1或清0来启动或关闭定时器1。
[单片机]
51单片机<font color='red'>定时</font>器/<font color='red'>计数器</font>
MSP430单片机中的WDT研究
引 言   软件的可靠性一直是一个关键问题。任何使用软件的人都可能会经历计算机死机或程序跑飞的问题,这种情况在嵌入式系统中也同样存在。由于单片机的抗干扰能力有限,在工业现场的仪器仪表中,常会由于电压不稳、电弧干扰等造成死机。在水表、电表等无人看守的情况下,也会因系统遭受干扰而无法重启。为了保证系统在干扰后能自动恢复正常,看门狗定时器(Watchdog Timer)的利用是很有价值的。 1 看门狗的作用   看门狗定时器是一个计数器,基本功能是在发生软件问题和程序跑飞后使系统重新启动。看门狗计数器正常工作时自动计数,程序流程定期将其复位清零,如果系统在某处卡死或跑飞,该定时器将溢出,并将进入中断。在定时器中断中执行一些复位操作,使
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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