历史上的今天
今天是: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 ; 将入口参数保存到堆栈中
上一篇:STM8S学习笔记-时钟控制2
史海拾趣
|
摘要:随着电力电子技术的发展,将电力电子技术与自动测量技术相结合,便可以使程控电源的设计变得简单可行。介绍了一种用于自动测量的低压程控电源,实现了对电源的实时控制。 关键词:程控电源;单片机 0 引言 ...… 查看全部问答> |
|
本人初学驱动开发 照着例子写了个简单的GPIO驱动 控制开发板上的LED 可是动态加载驱动后显示错误 过程如下: 硬件:s3c2440开发板 GPB5-8接4个LED 软件:linux-2.6.29内核 arm-linux-gcc- ...… 查看全部问答> |
|
分到一个任务,要用PCI芯片开发PCI接口板及相关驱动, 我会点c/C++,VC++,硬件会的比较少,只会点 数模电及一些基本电路。 有点没有头绪,不知道您不能根据我的情况给我点指点,能给一个能由浅入深,循序渐进的学习过程。 谢谢,祝一切顺利! … 查看全部问答> |
|
nand flash驱动unable to mount partition 我的nand flash驱动加载时可以创建分区,也可以找到对应的文件系统驱动,但却无法mount这个分区,所以也出现不了盘符,请大家帮帮忙啊~~… 查看全部问答> |
|
我的电脑前些天还好好的现在开机显示器黑屏只显示Brilho=0 我拿去别的机子试了不是主机的问题,各位大哥大姐教教小第 我该怎么处理啊 显示器调节按钮 按了都没反应。… 查看全部问答> |
|
VS2005调试目标机上应用程序时,用TCP/IP方式连接总是“设备未就绪”?? 使用VS2005开发win ce的应用程序,在调试的时间用TCP/IP方式连接到开发板,老说“设备未就绪”,该怎么解决啊?… 查看全部问答> |




