历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2021年10月11日 | STM8与汇编语言(13)--修改CPU的时钟

发布者:NanoScribe 来源: eefocus关键字:STM8  汇编语言  CPU  时钟 手机看文章 扫描二维码
随时随地手机看文章

在有些单片机的应用系统中,并不需要CPU运行在多高的频率。在低频率下运行,芯片的功耗会大大下降。因此希望单片机能提供这个功能,STM8单片机确实有这个功能,并且修改也非常方便。


下面的实验程序首先将CPU的运行时钟设置在8MHZ,然后快速闪烁LED指示灯。接着,通过修改主时钟的分频系数和CPU时钟的分频系数,将CPU时钟频率设置在500KHZ,然后再慢速闪烁LED指示灯。通过观察LED指示灯的闪烁频率,可以看到,同样的循环代码,由于CPU时钟频率的改变,闪烁频率和时间长短都发生了变化。


同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。


stm8/



      #include "mapping.inc"

      #include "STM8S207C_S.INC"



; 定义堆栈空间的起始位置和结束位置

stack_start.w  EQU   $stack_segment_start

stack_end.w   EQU    $stack_segment_end



             segment 'rom'           ; 下面开始定义一个段,该段位于ROM中

main.l                        ; 定义复位后的第一条指令的标号(即入口地址)

;

; 首先要初始化堆栈指针

       LDW    X,#stack_end        

       LDW    SP,X

                                                            

       LD     A,#08

       LD     PD_DDR,A         ; 将PD3设置成输出

       LD     A,#08

       LD     PD_CR1,A         ; 将PD3设置成推挽输出

       LD     A,#00

       LD     PD_CR2,A        

                            

       LD     A,#$E1

       LD     CLK_SWR,A       ;选择芯片内部的16MHZ的RC振荡器

                                                                                                ;为主时钟

                                                                                                                    

                            

MAIN_LOOP.L

;下面设置CPU时钟分频器,使得CPU时钟=主时钟

;通过发光二极管,可以看出,程序运行的速度确实明显提高了

       LD     A,#$08         

       LD     CLK_CKDIVR,A     ; 主时钟 = 16MHZ / 2

                                    ; CPU时钟 = 主时钟 = 8MHZ



       LD     A,#10           ; LED高速闪10次

HIGH_SPEED.L                        

       PUSH   A               ; 保存寄存器

       LD     A,#08        

       LD     PD_ODR,A         ; 将PD3的输出设置成1

       LD     A,#100

       CALL   DELAY_MS         ; 延时100MS

                            

       LD     A,#00           ;

       LD     PD_ODR,A         ; 将PD3的输出设置成0

       LD     A,#100

       CALL   DELAY_MS         ; 延时100MS

                            

       POP    A              ; 恢复寄存器

       DEC    A

       JRNE   HIGH_SPEED

                            

;下面设置CPU时钟分频器,使得CPU时钟=主时钟/4

;通过发光二极管,可以看出,程序运行的速度确实明显下降了

       LD     A,#$1A          ;

       LD     CLK_CKDIVR,A     ; 主时钟 = 16MHZ / 8

                                                      ; CPU时钟 = 主时钟 / 4 = 500KHZ



       LD     A,#10           ; LED低速闪10次

LOW_SPEED.L                          

       PUSH   A               ; 保存寄存器

                            

       LD     A,#08         

       LD     PD_ODR,A         ; 将PD3的输出设置成1

       LD     A,#100

       CALL   DELAY_MS         ; 延时100MS



       LD     A,#00           

       LD     PD_ODR,A         ; 将PD3的输出设置成0

       LD     A,#100

       CALL   DELAY_MS         ; 延时100MS

                            

       POP    A              ; 恢复寄存器

       DEC    A

       JRNE   LOW_SPEED



       JRA    MAIN_LOOP      



; 函数功能:延时

; 输入参数:寄存器A -- 要延时的毫秒数,这里假设CPU的主频为2MHZ

; 输出参数:无

; 返 回 值:无

; 备    注:无

DELAY_MS.L

       PUSH   A              ; 将入口参数保存到堆栈中

[1] [2]
关键字:STM8  汇编语言  CPU  时钟 引用地址:STM8与汇编语言(13)--修改CPU的时钟

上一篇:STM8S学习笔记-时钟控制2
下一篇:STM8与汇编语言(1)(2)(3)

推荐阅读

上海创客嘉年华期间,全球电子元器件分销商 Digi-Key Electronics 诚邀各位访客莅临 A1-A2 和 A5-A6 展位参观各种产品演示,同时参与微信幸运抽奖,参观娱乐两不误。上海创客嘉年华将会在上海市淞沪路234号创智天地广场举办。展示活动包括:● 展示基本工程技能教程以及 DFRobot 以及 Digi-Key 合作社视频● 最新 3D 打印技术实例● 产品游戏...
一辆普通汽车,其独立零部件数量在2万之多。大到车体框架、箱体结构,小到螺母、销钉,每个零部件的质量都直接影响着汽车的可靠性。 本期,让我们以转向器、皮带轮、转向节几个典型解决方案,解锁海克斯康贯穿设计工程、生产制造、计量检测完善的解决方案能力,了解汽车零部件从多体动力学仿真到复杂形状检测的智能制造之路。 一键式检测方案:复杂形状零...
外媒 WMPU 报道,微软 Surface Duo 最初是采用金属框架设计的,但在去年的某些时候,微软决定采用塑料边框,这似乎是近期不少问题的根源。  此前IT之家报道,微软 Surface Duo 出现了 USB-C 端口塑料边框破裂的问题,现在多个用户抱怨设备的塑料边框出现发黄问题。  这似乎是一个公认的问题,多名用户报告称,微软允许他们退回边框发黄的手...
很少有大公司出面断然否认整个报告,但任天堂今天就是这么做的。  据 The Verge 报道,任天堂今日发布了一份新闻稿,坚称彭博社爆料的 4K 版 Switch Pro 游戏机的信息完全不正确。  任天堂在新闻稿中指出彭博社“错误地宣称任天堂正在为支持 4K 的任天堂 Switch 提供游戏开发工具”,并坚称这是“假的”。另外,任天堂表示,除了...

史海拾趣

问答坊 | AI 解惑

谁会写WinCE5。0的4.3寸TFT液晶驱动程序

我有个广嵌的开发板液晶屏是3.5寸的TFT,现在我想把它改用4.3寸的液晶屏,改了几天也没成功. 原来的3.5寸TFT板电路图也没有,我把屏拆下分析了一天,发现它的PWR液晶屏电源使能没用,就是上电背光就亮.而我的电路是让PWR使能的. 谁写过4.3寸液晶屏驱动 ...…

查看全部问答∨

直流电机

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 一些关于直流电机的控制的资料 觉得蛮好的 和大家分享下  …

查看全部问答∨

基于单片机USB接口的PC主机驱动程序和应用程序设计

摘 要:介绍了与51单片机USB接口的Pc主机在Windows环境下软件设计过程。驱动程序由DriverStudio生成,动态链 接库和应用程序分别采用Visual C++和Visual Basic编写。实现了PC机与单片机之间通过PDIUSBD12芯片进行数据通讯 的功能。…

查看全部问答∨

eisp找不到芯片stm32f103

stm32f101系列的单片机,用EISP写一次后,不能再次写入了(eisp找不到芯片).用JTAG电线是可以写芯片的.…

查看全部问答∨

WinCE.net 中串口接收数据,再保存

我WinCE中 串口接收数据,是没40ms接收一次,一分钟往文件中存一次,用的是BinaryWrite.Write() 但是,过十分钟不到,就会少数据,接收的不全(我一次接收长度为23的数组,但会出现只有18长度的数组)! 于是,我将写文件的代码注释了以后!数据 ...…

查看全部问答∨

大侠急救~

电动机M1和M2,同时安装在一根轴上,M1让轴旋转,M2让轴前后60度转动…

查看全部问答∨

关于hive注册表?

boot.hv是放在HIVE BOOT SECTION ;END BOOT SECTION之间的,在系统启动的时候实现加载! 那么,在注册表中的其它部分是怎么确认分别归属于default.hv和user.hv的, 是不是有什么标签?  …

查看全部问答∨

向高手求wince5.0上的FTP客户端开源软件源代码

向高手求wince5.0上的FTP客户端开源软件源代码,最好有长期维护升级的那种~ 高手救急啊,谢谢~…

查看全部问答∨

抗干扰角度分析六层板的布线技巧

很好的抗干扰角度析六层板的布线技巧…

查看全部问答∨

经典测速方法在低速情况下的研究的评论

经典测速方法在低速情况下的研究的评论…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved