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