<br />学习DSP,当然是从一些简单的测试程序开始。使一个LED的闪亮是经常用的,但这其中有一个误区,现分析如下,以定时器控制LED灯为例:<br /><br />void main()<br /> {<br /> init_5509();<br /> init_timer();<br /> while(1) <br /> {<br /> asm(" NOP");<br /> }<br /> }<br /><br />interrupt void int_timer0()<br />{<br /> Flag=Flag+1;<br /> if (Flag>10) <br /><br /> asm(" SSBX XF"); <br /><br /> else <br /><br /> asm(" RSBX XF");<br /> if (Flag>20) <br /><br /> Flag=0;<br />}<br /><br /> 这个程序不能实现控制的。使用XF的时候要注意一下,XF是ST1的一个bit,但是在中断中,首先把ST1压入堆栈,出中断前才弹出堆栈,所以在中断中改变XF没有实际的意义。所以在C/C++加如汇编要谨慎。修改后的程序如下:<br /><br />void main()<br />{<br /> init_5509();<br /> init_timer();<br /> while(1) <br /> {<br /> asm(" NOP");<br /> if (Flag>10) <br /><br /> asm(" SSBX XF"); <br /><br /> else<br /><br /> asm(" RSBX XF");<br /> }<br />}<br /><br />interrupt void int_timer0()<br />{<br /> Flag=Flag+1; <br /> if (Flag>20) <br /><br /> Flag=0;<br />}<br /><br />这个程序就好使。<br />,本贴地址:http://www.hellodsp.com/bbs/viewthread.php?tid=9092<br /><br /><br /><br /> |
|