本帖最后由 故奇 于 2018-10-15 09:08 编辑
使用内部晶振,如何写1S的定时程序,各位大神请教教我,我第一次接触AVR单片机。下面是我写的程序。
/******************端口初始化*********************************************/
void port_init() //端口初始化子函数
{
DDRB = 0xFF; //PB口配置为输出
PORTB = 0xFF; //PB口初始值为“1“
}
/*************************定时器0初始化***********************************/
void timer0_init() //因为定时时间太短,看不到灯的变化
{
SREG=0x80; //使能全局中断
TIMSK|=(1<<TOIE0); //定时器中断溢出标志位
TCCR0|=(1<<CS02)|(0<<CS01)|(1<<CS00); //T/C0工作于普通模式,1024分频,
//定时器频率=8M/1024=7812.5Hz
TCNT0=61; //定时初值设置,定时时间=(256-61)/7812.5=25ms
}
/***********************主函数*******************************************/
int main()
{
DDRD |=(1<<4)|(1<<3)|(1<<2)|(1<<1); //PD第1-4口配置为输出
PORTD |=(0<<4)|(0<<3)|(1<<2)|(1<<1);
port_init();
timer0_init();
SREG=0x80; //使全局中断
while(1)
{
}
}
/******************************定时器0中断服务函数***********************/
#pragma interrupt_handler timer0_ovf:10
unsigned int con;
void timer0_ovf(void)
{
TCNT0=61; //重新计数初值
con++; //中断次数累加
} |