我的串口接收程序负责接收数据和判断是否接收完成,如果完成就置个标志flag1. t1定时器模式,50ms定时检查flag1,若置位,就进行一些标志的清除和copy出数据,并通知主程序帧接收完整,可以处理了.
外部设备(主设备)发数很快,一个循环就会发一次数据,并20ms内等待我的设备(从设备)做出响应,否则就走了.
现在的问题是:要求在现有程序构架不变的情况下,能每次都响应主设备的询问,t1 50ms的扫描速度肯定是不够的,t0工作与10ms中断定时器模式,做系统时钟,我也不想将这个串口扫描的程序放到t0里,所以我现在想平时关t1运行(TR1 = 0)或者关t1中断(ET1 = 0),只有串口接收检测到已经收到完整数据帧时启动t1(TR1 = 1)或开t1中断(ET1 = 1),并置位t1中断标志(TF1 = 1),这样t1中断只在需要的时候才进入. 但我这样做了之后发现,若程序中一直开TR1或开ET1,只是接收到完整数据后置TF1=1程序是可以运行的,但若在串口中断中控制t1开启或t1中断允许是行不通的,好像t1并没有工作起来,不知道是为什么.
希望给点意见,另对现在的处理架构有什么好的建议也指点一下. |