单片机工作频率切换的实现
扫描二维码
随时随地手机看文章
随着单片机技术的发展,单片机各方面的性能都有了很大的提高,运行速度也越来越快,这使得单片机的应用也越来越广泛。
有时候由于外围设备的速度或者其他个些要求,单片机的运行速度并不能很高,有时还要求比较低,比如当8位单片机用于PC/XT总线接口时,工作频率是最高4.77MHz,那么单片机的工作频率就只能是4.77MHz,这样就会导致运行速度下降,当又有其它硬件要求工作频率较高时,怎样才能调和这两方面的矛盾呢?可不可以让单片机在与PC/XT接口时工作在4.77MHz,而在运行其他程序时工作在比较高的频率呢?
首先我们做了这样的实验,如图1,用外部振荡电路,通过分频得到两个高低不同震荡源(4:1),通过两个可控门后连接到单片机的外部振荡输入端。用 P1.0来选择输入的振荡频率,即在程序执行过程中,直接用语名来改变输入频率(当然在改变频率时,串口、计时器不能用)。试验后发现,单片机虽然还可以正常工作,但在频率改变过程中产生的干扰,使单片机内的个些寄存器和RAM中的数据发生了变化,改变以后的工作状态就显得不是很稳定。
由以上实验可看出,在正常工作方式下,直接改变单片机的工作频率是不可取的。其实单片机还有另外的两种工作方式:等待工作方式和掉电工作方式(CHMOS 工艺制成的单片机个般都有)。单片机进入掉电工作方式以后,必须用硬伯复位,显然这种方式也是不可取的。在等待工作方式下,送往CPU的时钟信号被封锁, CPU进入等待状态。CPU内部的状态,如堆栈指针(SP)、程序计数器(PC)、程序状态字(PSW)、累加器及其他寄存器的状态被完整地保留下来,而且等待工作方式可以通过个个中断来唤醒,这些正是我们所需要的。于是我们在原来的电路图中加上个个延时电路(可以用计数器来做),接在频率切换控制线上,就可以让可控门在进入到等待工作方式以后再动作。另外还要用P1.1来产生个个控制信号,通过延时电路作为中断源,用来唤醒单片机。实验表明,这种方式确实可以很稳定地实现单片机工作频率的切换,外加的电路实现起来也很方便。
在实际应用中又发现,单片机的I/O口线经常会不够用,如果在这里用掉两个I/O口其实是很浪费的,用一个实现起来又比较麻烦。其实,单片机在进入等待工作方式经后,ALE和 PSEN均为高电平,ALE在单片机正常工作状态下,不断向外输出频率为fosc/6的脉冲,只有在CPU访问片外数据存储器时,才会丢失一个脉冲,正好可以通过ALE信号的变化来产生频率控制信号和中断信号。如图过计数器对输入脉冲进行计数来产生的,而用ALE信号作为计数器1的选通信号,使正常工作时因不断的刷新来停止控制信号和中断信号的产生,进入等待工作方式以后,记数器1因长期选道而开始正式计数,先产生一个控制信号切换频率,经计数器2延时用中断唤醒单片机进入正常工作状态,继续等距离的执行。
实验表明,这种方式确实能可靠地运行,不需要I/O口,而且不需要很多控制命令,只要用一个控制命令进入等待工作方式以后,他就会自动产生改变频率的信号和唤醒单片机的中断信号。只需要再加上一个简单的中断处理程序,就可以在两种工作频率之间随意地切换,该快的时候就快,该慢的时候就慢,真正是随心所欲了。