大佬们,问个困惑很久的问题了,STC15说的T0定时器可以配置为NMI中断的tick时钟。但是我的测试代码只跑了一次中断就再也没有了。研究了几天了,有大老可以解释下不。我用的SDCC4.0+STC14w204s,测试代码如下。
/* 中断向量表声明 */
extern void soft_timer_in_isr(void) __interrupt (1) __using (1);
int main(void)
{
printf("start up \r\n");
soft_timer_init(10000);
while(1);
}
void soft_timer_init(unsigned int us)
{
TMOD = (TMOD & ~0x0f) | 0x03;//不可屏蔽中断无法工作
AUXR |= 0x80; //1T
TL0 = (0xffff - (FOSC*us/1000000));//设置定时初值
TH0 = (0xffff - (FOSC*us/1000000))>>8;//设置定时初值
TF0 = 0;//清除TF0标志
TR0 = 1;//定时器0开始计时
ET0 = 1;//定时器T0中断允许
}
void soft_timer_in_isr(void)
{
printf("enter\r\n");
}
运行调试输出:
start up
enter //这个后面就再也见不到了
离线
中断里面不用重新置初值吗?还有中断标志不用管了吗?
离线
按照他手册的说法是自动填装的,我也测试了下确实是自动填装。
离线
好吧,我找到问题了,还是阅读能力不行,SDCC的意思是得实现中断在main()文件内,而不是只是声明为外部就行,太坑了。。。
离线