您的位置:首页单片机AVR单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

AVR单片机的T/C2与精确时钟C程序

[日期:2008-07-31 ] [来源:东哥单片机学习网 www.picavr.com 整理 作者:佚名] [字体: (投递新闻)

AVR单片机的T/C2与精确时钟C程序   
CodeWizardAVR V1.25.6 Professional  
Chip type           : ATmega48  
Clock frequency     : 7.372800 MHz  
Memory model        : Small  
External SRAM size  : 0  
Data Stack size     : 128   
计算: 1秒 = 时钟 / ( 分频 * 计数 )  
假设时钟 = 7372800 Hz 那么: 1秒 = 7372800 / ( 分频 * 计数 )  
得: 计数 =7372800/分频  
由于分频只有 1/8/32/64/128/256/1024 供我们选择,而计数最高只有8位(255)  
为了不占用资源,中断次数尽量少一点比较好,并且中断时间越短越好  
所以我们可以选择 计数 = 时钟7372800 / 分频1024 / 30次中断 = 240  
这个240就是T/C2的计数上限TOP  
*****************************************************/  

#include <mega48.h>  
unsigned char TC2A=0;    
interrupt [TIM2_COMPA] void timer2_compa_isr(void)  
{   
  TC2A++;  
  if(TC2A>=30) TC2A=0;  
  if(TC2A>25) PORTD.3=1; else PORTD.3=0;  
}  

void main(void)  
{                                                
  TCCR2A|=2;               //工作于CTC模式(比较匹配时计算器清零)   
  OCR2A=240;               //设置TOP的值(计算器的上限值)  
  TCCR2B|=7;               //取系统时钟1024分频作为T/C2时钟  
  TIMSK2=2;                //使能计数器的值达到TOP时产生中断   
  DDRD.3=1;                //使用PD3每秒驱动蜂鸣器"嘀"一次   
  #asm("sei")              //插入汇编语句,打开全局中断  
  while (1)  
  {  
    #asm("nop")            //空操作的汇编代码,等待中断发生  
  };  
}   

/****************************************************  
假设程序还有一个3位数码管动态扫描任务,这时我们就可以这样计算  
1:数码管的扫描频率在75-85Hz比较合适,太低会闪烁,太高占用资源  
2:每扫描一次就必须分3次显示,分别是个位/十位/百位  
3:这时我们可以计数出显示频率是225-255Hz(中断频率),在这里假设=240Hz  
4:这时我们就可以顺便使用这个T/C2定数中断来保证扫描的可靠运行了  
5:计算: 计数 = 时钟7372800 / 分频128 / 240次中断 = 240 ***/  

阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐