我的这个系统包括:LCD12864显示,4*4键盘,双串口数据通讯
其中LCD12864要随时更新显示串口0传来(软件滤波后)的数据;
键盘要随时响应用户的按键操作;
串口1随时响应上位机;
我现在的做法是:
键盘 :采用轮寻;
LCD12864:数据采集并软件滤波后直接送LCD显示;
双串口 :中断接收,主动发送;
我想修改程序结构为:
键盘 :改为I/O口中断
LCD12864:在串口0中断接收数据完毕后进行滤波,在串口0中断中刷新LCD;
串口1 :才串口1中断接收完毕后,在串口1中断程序中进行相应操作;
我这样修改能行吗,我主要是担心 I/0口中断的可靠性,还有就是在中断程序里有太多的操作,我系统内部还有定时器,我对中断的优先级没有研究过;
是否可行,请高手指教!
我要求定时器1秒中断,按我的想象 时间上应该是够了,但是实际效果是,我在定时器中断程序中如果要刷LCD显示,LCD会显示不正常(在中断中不能对LCD进行清屏操作已经确定);
还有如果程序正执行到定时器中断内部,又来了串口中断或者I/0口中断(键盘),这样会不会出乱子?
MSP430内部资源的中断优先级是怎么安排的?
没有经验,谢谢回复.
引用:
我要求定时器1秒中断,按我的想象 时间上应该是够了,但是实际效果是,我在定时器中断程序中如果要刷LCD显示,LCD会显示不正常(在中断中不能对LCD进行清屏操作已经确定);
还有如果程序正执行到定时器中断内部,又来了串口中断或者I/0口中断(键盘),这样会不会出乱子?
MSP430内部资源的中断优先级是怎么安排的?
没有经验,谢谢回复.
|
|
在中断中处理LCD是有点不现实了!因为LCD的确很耗时间,建议键盘采用中断,这样主程序没事时就可以低功耗了,串口来中断时,把数据接受到后就给一个全局变量置一标志,然后唤醒底工耗,在主程序中判断这个标志来刷新LCD,430的个中断优先级固定,同时出现中断优先级别高的先执行,在中断程序中默认是关中断的。
还有就是你担心键盘IO口中断的问题!因为键盘中断时要执行去抖操作!一般80MS吧,这个时间如果在中断中做的确可能会影响别的中断的进行,我是这么做的!在键盘中断程序中先把键盘数据读近来保存到一个变量里,再开定时器中断,定时80MS,定时到时再接收键盘数据,与原来保存的变量比较一下,得出键值。但会耗费一个定时器。