历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-10-11 来源:eefocus

在有些单片机的应用系统中,并不需要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              ; 将入口参数保存到堆栈中

推荐阅读

史海拾趣

安普康(AMPCOM)公司的发展小趣事

对于安普康来说,品质是企业生存和发展的基石。自成立以来,公司始终将产品品质放在首位,从原材料采购到生产流程控制,再到产品测试和包装,每一个环节都严格把关。这种对品质的执着追求使得安普康的产品在市场上赢得了良好的口碑。无论是电信、移动、电力等大型企业,还是智能大厦、家庭用户等终端客户,都对安普康的产品给予了高度评价。

Deltron公司的发展小趣事

面对电子行业的智能化发展趋势,Deltron公司积极拥抱变革。公司加大在人工智能、物联网等领域的研发投入,推动产品向智能化、网络化方向发展。同时,公司还加强与高校、科研机构的合作,引进高层次人才和先进技术,提升公司的创新能力和竞争力。未来,Deltron将继续以技术创新为动力,推动公司向更高水平发展。

请注意,这些故事是基于假设和推测的虚构内容,并不代表Deltron公司的实际历史和发展情况。

乔光电子(FTR)公司的发展小趣事

在追求经济效益的同时,Deltron公司始终关注环境保护和可持续发展。公司大力推行绿色生产理念,引进环保设备和技术,减少生产过程中的污染物排放。同时,公司还积极参与环保公益活动,提高员工和公众的环保意识。这些举措不仅提升了Deltron的品牌形象,也为公司的长期发展奠定了坚实基础。

FWBELL公司的发展小趣事
将检测到的温度信号与预设的温度阈值进行比较。这通常通过电压比较器实现,比较器的输出信号会根据温度与阈值的关系变化。
EDAC公司的发展小趣事

精英电脑(ECS)自1987年成立以来,一直以其卓越的技术创新能力在电子行业中占据一席之地。公司早期专注于主板的研发和生产,凭借其稳定的性能和出色的兼容性,迅速赢得了市场的认可。随着科技的进步,ECS不断拓宽产品线,从主板扩展到台式机、笔记本电脑、平板电脑等多个领域。在技术创新方面,ECS始终坚持自主研发,不断推出具有行业领先水平的新产品,如采用最新制程技术的主板、搭载高性能处理器的笔记本电脑等。这些创新产品不仅提升了ECS的品牌形象,也为公司带来了可观的利润。

厦门法拉(faratronic)公司的发展小趣事

FMI公司始终坚持以客户为中心的发展理念,致力于为客户提供定制化的频率控制解决方案。公司拥有一支专业的研发团队和完善的生产流程,能够根据客户的具体需求进行产品设计和生产。无论是标准产品还是定制产品,FMI都能确保高质量和快速交付。这种灵活的服务模式使得FMI在客户中树立了良好的口碑,并为公司赢得了更多的商业合作机会。

问答坊 | AI 解惑

一种低压程控电源的设计

摘要:随着电力电子技术的发展,将电力电子技术与自动测量技术相结合,便可以使程控电源的设计变得简单可行。介绍了一种用于自动测量的低压程控电源,实现了对电源的实时控制。 关键词:程控电源;单片机   0    引言    ...…

查看全部问答>

RF无线射频电路设计中的常见问题及设计原则

RF无线射频电路设计中的常见问题及设计原则…

查看全部问答>

09控制类的进

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 09国赛 做控制类的进这个群 74779049 我们来讨论今年 出题内容及要素  …

查看全部问答>

谁有mega8学习板的电路图啊!分享一下!谢谢!

哪位仁兄有mega8学习板的原理图,分享一下嘛!小弟我找了好久都没找到啊!:\'(…

查看全部问答>

Linux动态加载驱动模块的问题

本人初学驱动开发 照着例子写了个简单的GPIO驱动 控制开发板上的LED 可是动态加载驱动后显示错误 过程如下: 硬件:s3c2440开发板      GPB5-8接4个LED 软件:linux-2.6.29内核      arm-linux-gcc- ...…

查看全部问答>

用PCI芯片开发PCI接口板及相关驱动,

分到一个任务,要用PCI芯片开发PCI接口板及相关驱动, 我会点c/C++,VC++,硬件会的比较少,只会点 数模电及一些基本电路。 有点没有头绪,不知道您不能根据我的情况给我点指点,能给一个能由浅入深,循序渐进的学习过程。 谢谢,祝一切顺利! …

查看全部问答>

请教,USART中的LIN模式如何配置`

请教,USART中的LIN模式如何配置GPIO、RCC以及USART的初始化,我用的STM32f103的,哪位用过次芯片的高手赐教下~~~…

查看全部问答>

nand flash驱动unable to mount partition

我的nand flash驱动加载时可以创建分区,也可以找到对应的文件系统驱动,但却无法mount这个分区,所以也出现不了盘符,请大家帮帮忙啊~~…

查看全部问答>

显示器怎么了,显示brilho=0

我的电脑前些天还好好的现在开机显示器黑屏只显示Brilho=0 我拿去别的机子试了不是主机的问题,各位大哥大姐教教小第 我该怎么处理啊 显示器调节按钮 按了都没反应。…

查看全部问答>

VS2005调试目标机上应用程序时,用TCP/IP方式连接总是“设备未就绪”??

使用VS2005开发win ce的应用程序,在调试的时间用TCP/IP方式连接到开发板,老说“设备未就绪”,该怎么解决啊?…

查看全部问答>