用中断方式和查询方式如下: 在中断方式出现了问题:程序返回main的开头从新执行,可能和“T0MR0=Fpclk/2;//1uS”和“VICIntEnable=(1<<0x04);//使能定时器0”这两
句有关,可是百思不得其解
中断方式:
/*********定时器中断函数***************************************************/ void __irq interrupt_timer0(void) { time++; T0IR=0x01; //清除中断标志 VICVectAddr=0x00; //通知VIC中断处理结束 }
void initialize_t0(void) { T0TC=0; T0PR=0; T0MCR=0x0003; T0MR0=Fpclk/2;//1uS T0TCR=0x00; //IRQEnable(); //IRQ中断使能 // /*设定定时器0中断*/ VICIntSelect=0x00;//所有中断通道设置为IRQ中断 VICVectCntl0=0x20|0x40;//设置定时器0中断通道分配最高优先级 VICVectAddr0=(uint32)interrupt_timer0;//设置中断服务程序地址 VICIntEnable=(1<<0x04);//使能定时器0 }
int main(void) { BEER (); initialize_t0(); while(2) { T0TCR=0x01; if(time>1000) { time=0; } } return(0); }
×××××××××××××××××××××××××××××××××××××××××××××××××××8 查询方式: int main(void) {
IO0CLR=BEEP; PINSEL0=0x00000000; IO0DIR=BEEP; T0TC=0; T0PR=0; T0MCR=0x03; T0MR0=3333;//1uS T0TCR=0x01; while(1) { while((T0IR&0x01)==0); T0IR=0x01;i++; if((i%2)==0) {IO1SET=BEEP;} else IO1CLR=BEEP; }
return(0);
} |