外部异步时钟的操作
2016-09-14 来源:eefocus
#define uchar unsigned char
#define uint unsigned int
#define OUT PORTA
uchar Da
uchar CNT;//定义中断次数
void DelayMs(uint i) //0.25ms
{uchar j;
for(;i!=0;i--)
{for(j=250;j!=0;j--) {;}}
}
/************以下为显示*************************/
void Display(uchar *p) //适当地调节延时,可以改变其亮度
{
OUT=0x70+p[0]; DelayMs(15);
OUT=0xb0+p[1]; DelayMs(15);
OUT=0xd0+p[2];
DelayMs(15);
OUT=0xe0+p[3]; DelayMs(15);
}
/****************************************/
/**************以下为端口初使化*******************/
void intio()
{
DDRA=0XFF;
OUT=0XFF;
}
/*****************以下为溢出处理*******************/
void dealwith(uchar *p)
{
p[3]++;
if(p[3]==10){p[3]=0;p[2]++;}
if(p[2]==6) {p[2]=0;p[1]++;}
if(p[1]==10){p[1]=0;p[0]++;}
if(p[0]==6) {p[0]=0;}
}
/***********************************************/
void main()
{uchar i;
intio();
DelayMs(2000);
ASSR=0X08;//异步时钟使能
TCCR2=0X07;//1024分频
TIMSK=0X40;//T/C2中断使能
SREG=SREG|0X80;//全局中断使能
while(1)
{
Display(Da
if(TCNT2==32)
{TCNT2=0;
dealwith(Da
}
}
}
/*********************
//1.由于ATMEGA8中没有A口,故采用一宏定义,只能在ATMEGA8中采用D口,也因此在设计中,采用宏定义;
//2.经测试:采用内部2M及以下运行不稳定,故推荐采用场4M—8M;
//3.关于外部采用外部异步晶振不必采用外接电容,内部有36PF电容;当然接上也无防;
//4.注意32.768K晶振的使用,以及1024分频;
上一篇:万能PWM子程序
下一篇:ATMEGA8计数器