
听题目确实很简单,实际上是这样的状况: 自制的开发板,尽量多用,因此开启了如下功能: 4个板载RGB的LED轮显、4路ADC采样[LCD显示]、2路PWM大小变脉宽[LCD显示]、2路脉冲输出[LCD不显示]、5路检测脉冲输入都为中断方式[LCD显示]、1路UART串口输出、开启了系统时钟sysTick和timer、1路程序计数器[LCD显示]; 实际上是这样设计的:1路脉冲输出由sysTick控制,10mS一个10uS的正脉冲;1路脉冲输出宽度由主程序控制,触发超声测距模块开始,结果显示在LCD上;所有检测数据都输出到LCD和串口上;由主程序的程序计数器计数来顺序显示和触发超声波测距模块。 结果出现问题了:在超出超声模块测距范围时,显示是一种状况;当测距不断变化时测距,显示又是另外一种情况;并且超声测距也不稳定了。于是想到了采用状态机的方案,基本原理: 利用sysTick的10mS脉冲计数,由主程序判断,每10个脉冲为一个触发周期控制超声传感器测距一次和显示一次;其余时间是程序计数器累加和串口输出打印。结果再也没有任何不正常的问题出现了。 此实验只是解决了显示和多外部中断控制之间的冲突造成的检测不准与显示变化的矛盾问题。实际上,许多RTC系统都采用状态机的工作机制。 具体思路已经描述的较为清楚了。在各自设计的系统中如何设计系统统一时钟,状态机的状态标志的改变从而引发程序的跳转,以及各种中断防止互相影响是很有意思的,也很值得一玩。以前也讨论过状态机的问题,在那个网站,采用的什么芯片早就忘了。 此实验的代码就不给了,因为是基于ARMMbed的,太简单了。 |