MEGA16單片機(jī)定時(shí)器(16位)源代碼
程序名: mega16a 芯片16位定時(shí)計(jì)數(shù)器;
概括: 學(xué)會(huì)了控制8位定時(shí)器,16位定時(shí)器和它如出一轍,Its a piece of cake!
在芯片開發(fā)板上實(shí)現(xiàn)精確一秒閃爍...
心得 : 電子技術(shù)和音樂一樣 ,都是一門藝術(shù),令人回味...
finish time: 2014年3月8日19:33:10;
作者 : 肖邦;
*/
#include <avr/io.h> //頭文件;
typedef unsigned char uint8 ; //在程序中用 uint8 相當(dāng)于寫 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液晶屏復(fù)位引腳置1;
PORTC&=~(1<<5); //12864 清零 (復(fù)位) ;
PORTC|=1<<5; //12864液晶屏復(fù)位引腳置1;
DDRD=0XFF;
PORTD=0X00;
}
int main(void) //主函數(shù)!!!!!
{
uint16 num=0;
reset_io(); //初始化io口;
TCNT1=0xff44; //設(shè)置定時(shí)器初始值,1毫秒溢出一次 0xff45==65536-(12兆/64分頻*0.001秒);
TCCR1B=0x03; //( 64分頻 )設(shè)置定時(shí)器分頻并開啟定時(shí)器;
PORTB=1<<2;
while(1)
{
if(TIFR&0X04) //一旦溢出標(biāo)志位置一,就進(jìn)入;
{
// PORTA^=0XFF; //物理引腳PA口跳變,此語(yǔ)句沒用;
num++;
if(num==1000) {PORTA^=0XFF;num=0;} 每一毫秒num變量加一,加1000次是你秒;
TCNT1=0XFF44; //回復(fù)初始值;
TIFR|=0X04; //此語(yǔ)句很重要!!!!!!溢出標(biāo)志位只有置一才會(huì)自動(dòng)清零;
}
}
}
評(píng)論