|
楼主 |
发表于 2010-2-10 09:09:26
|
显示全部楼层
【21楼】 Gorgon Meducer 傻孩子:
那就在发送中断里面开全局中断响应看看 :我试过不行.
(1).我不想中断嵌套
因为通讯是次要任务,中断服务程序中的代码(和时间密切相关)才是主要任务,必须保证中断服务程序执行的连续性
(2).如果采用马潮老师所说的在中断服务程序中置一个标志,然后在主程序中计算.
实际运行过程中,计算的频率值会不停的波动,即采用下面的方法
#pragma interrupt_handler TIMER2_COMP_ISR:iv_TIMER2_COMP
void TIMER2_COMP_ISR(void)
{
T1_New = TCNT1;
T3_New = TCNT3;
time_ok_mark = TRUE;
SEI();
PID();
}
void main(void)
{
while(1)
{
if (time_ok_mark)
{
time_ok_mark = FALSE;
计算频率
}
}
}
(3).既然通讯质量不好,只能说明两个原因:
(a).定时中断服务程序执行时间太长,导致数据接收时:正在接收时,定时中断来了,长时间打断了接收中断,导致通讯线路上后面的数据挤走了前面的数据
(b).定时中断服务程序执行时间太长,导致数据发送时:正在发送时,定时中断来了,长时间打断了发送中断. |
|