高级会员

- 积分
- 637
- 金钱
- 637
- 注册时间
- 2014-3-14
- 在线时间
- 95 小时
|
5金钱
使用原子哥的中断程序,感觉串口中断接收数据,不能打断delay_ms()函数。。delay使用的while循环延时方式,以前一直使用这个,延时是比较准确的。
在主函数中没加入delay_ms(2)延时2毫秒时,电话响一声自动挂断。。加入delay_ms(2)后,电话要响很多声才自动挂断,有时根本就不能自动挂断。。如果串口中断能打断delay_ms(),那么只要有电话呼入,就应该能抓取完整的RING信号,就可以马上挂机。
void main()
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;
if(USART_RX_BUF[0]=='R' && USART_RX_BUF[1]=='I' && USART_RX_BUF[2]=='N' && USART_RX_BUF[3]=='G')
{
printf("ATH\r"); //串口接收到RING电话信号,就马上挂断电话;
}
USART_RX_STA=0;
}
delay_ms(2);//加入延时2ms,电话就很难自动挂断了。。应该是串口中断,不能打断delay,很难接受到完整的RING电话信号。
}
搞不明白了,为什么加入delay就不行了,如果串口中断不起作用,那么应该接受不到数据,函数都不能实现自动挂电话。。如果中断起作用,那应该可以打断delay循环延时,接受到完整的RING电话信号,然后delay走完之后,马上可以挂机。。。应该是delay影响了数据中断接收。。 |
最佳答案
查看完整内容[请看2#楼]
1、 首先 任何delay都不能影响中断,除非更高优先级的中断
2、 楼主的挂断电话最好直接丢中断里处理,否则正好在delay之前串口接收完毕,则,必须在下一循环,才会执行挂断
|