|
我的第一个DSP程序很简单,就是XF输出一个方波,并驱动LED。但是碰到了很多基本的问题。现写一个主要问题给秀一下。
语句 if (Flag>10) asm(" SSBX XF"); else asm(" RSBX XF");放在不同的位置,从C/C++程序语言来说应该没什么大的问题。但是得到不同的结果。后来通过查看编译后的汇编,才知道问题所在。
XF是ST1的一个bit,但是在中断中,首先把ST1压入堆栈,出中断前才弹出堆栈,所以在中断中改变XF没有实际的意义。所以在C/C++加如汇编要谨慎。
说明:定时器的周期太短,无法肉眼看见LED的亮灭,所以加了一个记数变量。
|
第一次写程序,有问题
void main() { init_5402(); init_timer(); while(1) { asm(" NOP"); } }
interrupt void int_timer0() { Flag=Flag+1; if (Flag>10) asm(" SSBX XF"); else asm(" RSBX XF"); if (Flag>20) Flag=0; }
|
|
修改后的程序,正确
void main() { init_5402(); init_timer(); while(1) { asm(" NOP"); if (Flag>10) asm(" SSBX XF"); else asm(" RSBX XF"); } }
interrupt void int_timer0() { Flag=Flag+1; if (Flag>20) Flag=0; }
| |