专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

MEGA16单片机定时器(16位)源代码

作者:肖邦   来源:本站原创   点击数:  更新时间:2014年03月10日   【字体:
/*
         程序名:  mega16a 芯片16位定时计数器;
 
 概括:  学会了控制8位定时器,16位定时器和它如出一辙,It's a piece of cake!
    在芯片开发板上实现精确一秒闪烁...
 
                    心得 :   电子技术和音乐一样 ,都是一门艺术,令人回味...
 
              finish time:  2014年3月8日19:33:10;
       作者 :  肖邦;
 
*/
 
#include <avr/io.h>                       //头文件;
typedef unsigned char uint8 ;    //在程序中用 uint8  相当于写 unsigned char ;
typedef unsigned int  uint16;    //用法同上;
 
 
 
void reset_io(void)     //初始化所有io口;
{
  DDRA=0XFF;
  PORTA=0X00;
  
  DDRB=0XFF;
  PORTB=0X00;
  
  DDRC=0XFF;
  PORTC=0X00;
  PORTC|=1<<5;  //12864液晶屏复位引脚置1;
  PORTC&=~(1<<5);   //12864 清零 (复位) ;
  PORTC|=1<<5;  //12864液晶屏复位引脚置1;
 
  DDRD=0XFF;
  PORTD=0X00;
 
}
 
 
 
int main(void)         //主函数!!!!!
{
 
  uint16 num=0;
   reset_io(); //初始化io口;
 
   TCNT1=0xff44; //设置定时器初始值,1毫秒溢出一次  0xff45==65536-(12兆/64分频*0.001秒);
   TCCR1B=0x03; //( 64分频 )设置定时器分频并开启定时器;
   PORTB=1<<2;
   while(1)
    {
  if(TIFR&0X04)       //一旦溢出标志位置一,就进入;  
   {
 // PORTA^=0XFF;  //物理引脚PA口跳变,此语句没用;   
           num++;
 
  if(num==1000) {PORTA^=0XFF;num=0;}   每一毫秒num变量加一,加1000次是你秒;
  TCNT1=0XFF44;  //回复初始值;
  TIFR|=0X04;   //此语句很重要!!!!!!溢出标志位只有置一才会自动清零;
 
}
 
 
}
关闭窗口

相关文章