DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 268|回复: 0
打印 上一主题 下一主题

单片机工作频率切换的实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:46:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    随着单片机技术的发展,单片机各方面的性能都有了很大的提高,运行速度也越来越快,这使得单片机的应用也越来越广泛。

    有时候由于外围设备的速度或者其他个些要求,单片机的运行速度并不能很高,有时还要求比较低,比如当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口,而且不需要很多控制命令,只要用一个控制命令进入等待工作方式以后,他就会自动产生改变频率的信号和唤醒单片机的中断信号。只需要再加上一个简单的中断处理程序,就可以在两种工作频率之间随意地切换,该快的时候就快,该慢的时候就慢,真正是随心所欲了。
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-28 04:43 , 耗时 0.084939 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表