#include <iom16v.h>
#include <AVRdef.h>
#define unit unsigned int
/*
void delay_ns(unit ns)
{
SREG|=0x80; //开总中断
TIMSK |= 0x01; //T/C0溢出中断允许
TCCR0 |= 0x01; // T/C0工作于普通模式,不分频,
//定时器频率 = 1M
TCNT0 = 256-ns; //定时初值设置,定时时间 = (256-12)/976.5625=249.856ms
while(1)
{
if(0x01&TIFR) //查询溢出中断标志位
break;
}
TIFR&=0XFE; //清标志位
SREG&=0X7F;
}
*/
void delay_1ms(void) //一毫秒定时初始化
{
SREG|=0x80;
TIMSK |= 0x01;
TCCR0 |= 0X02; //8分频
TCNT0 = 131; //初值131 计数125为1ms
}
void delay_ms(unit ms) //毫秒定时
{
for(;ms>0;ms--)
{
delay_1ms();
while(!(0x01&TIFR))
{
break;
}
TIFR&=0XFE;
}
SREG&=0X7F;
}
void main(void)
{
unit i;
DDRB=0XFF;
PORTB=0XFF;
for(i=8;i>0;i--)
{
PORTB=~PORTB;
delay_ms(500);
}
}
没用进入中断函数的方式,用的查询标志位,不知道小灯为什么不亮,求帮忙找一下原因,谢谢啦 |