历史上的今天
今天是:2024年10月12日(星期六)
2021年10月12日 | STM8与汇编语言(14)--切换时钟源
2021-10-12 来源:eefocus
STM8单片机的时钟源,即可以选内部的,也可以选外部的,在系统运行过程中,可以很方便地切换。
下面的实验程序首先将主时钟源切换到外部的晶体振荡器上,振荡频率为8MHZ,然后,然后快速闪烁LED指示灯。接着,将主时钟源又切换到内部的振荡器上,振荡频率为2MHZ,然后再慢速闪烁LED指示灯。通过观察LED指示灯的闪烁频率,可以看到,同样的循环代码,由于主时钟源的改变的改变,闪烁频率和时间长短都发生了变化。
同样还是利用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,#$01
LD CLK_ECKR,A ; 允许外部高速振荡器工作
WAIT_HSE_READY.L
LD A,CLK_ECKR
AND A,#$02
JREQ WAIT_HSE_READY ; 等待外部高速振荡器准备好
; 注意:经过上述切换后,主时钟从HSI/8(2MHZ)切换到HSE(8MHZ)
;
MAIN_LOOP.L
;下面设置CPU时钟分频器,使得CPU时钟=主时钟
;通过发光二极管,可以看出,程序运行的速度确实明显提高了
LD A,#$02
LD CLK_SWCR,A ; SWEN <- 1
LD A,#$B4
LD CLK_SWR,A ; 选择芯片外部的高速振荡器为主时钟
WAIT_CLK_SWITCH_1.L
LD A,CLK_SWCR
AND A,#$08
JREQ WAIT_CLK_SWITCH_1 ; 等待切换成功
LD A,#$00 ; 清除切换标志
LD CLK_SWCR,A
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的输出设置成1
LD A,#100
CALL DELAY_MS ; 延时100MS
POP A ; 恢复寄存器
DEC A
JRNE HIGH_SPEED
;下面设置CPU时钟分频器,使得CPU时钟=主时钟/4
;通过发光二极管,可以看出,程序运行的速度确实明显下降了
LD A,#$02
LD CLK_SWCR,A ; SWEN <- 1
LD A,#$E1 ; 选择HSI为主时钟源
LD CLK_SWR,A
WAIT_CLK_SWITCH_2.L
LD A,CLK_SWCR
AND A,#$08
JREQ WAIT_CLK_SWITCH_2 ; 等待切换成功
LD A,#$00 ; 清除切换标志
LD CLK_SWCR,A
; 注意:经过上述切换后,主时钟从HSE(8MHZ)切换到HSI/8(2MHZ)
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的输出设置成1
LD A,#100
CALL DELAY_MS ; 延时100MS
POP A ; 恢复寄存器
DEC A
JRNE LOW_SPEED
JRA MAIN_LOOP
史海拾趣
|
1 硬件电路接口的设计 图1给出了液晶显示模块的硬件电路接口设计框图,该系统采用TI公司的TMS320F206芯片(以下简称F206),其内部带有4KB的FLASH存储器,可以根据系统需要外挂EEPROM作为外部程序存储区。 SED1335控制器是日本EPSON公司生产 ...… 查看全部问答> |
|
2010年1月16日,基于ARM的嵌入式系统软硬件开发讲座(北京) 作为全球性RISC标准的缔造者,ARM在嵌入式处理器领域中的霸主地位早已为大家所公认,目前行业中90%以上的嵌入式产品中都采用的是ARM系列的处理器。由于ARM公司本身是向芯片制造商提供知识产权,优异的体系结构和开放的平台,这就使得ARM处理器的应 ...… 查看全部问答> |
|
BUILD: [01:0000000117:ERRORE] kato.lib(kato.obj) : error LNK2019: unresolved external symbol XMLGetCommentStringW referenced in function \"public: int __cdecl CKato::BeginLevelV(unsigned long,unsigned short const *,char *)\" (?Beg ...… 查看全部问答> |
|
版主,以前的RTC都正常使用可是最近的一批板子RTC出现问题? 描述如下: 1.如果用JLINK调试则程序一切正常 2.如果断电上电运行则RTC初始化有时通过,有时通不过,不稳定, 即使初始化完成后,则也无秒中断产生。(注程序初始化 ...… 查看全部问答> |
|
昨天拿了块DS12C887的片子,想用149做一块时钟,用的是1602的屏,现在时间日期都能显示,可问题是就这么一直卡着不动了,而且时间和日期在软件里明明改了,可1602上显示的一直是2000年0月0日0分0秒……不知道怎么回事啊。程序是我自己按照DataSheet ...… 查看全部问答> |
|
例如接收的一帧数据,存放在数组rx[]={0x87,0x81,0x82,0x83,0x84,0x85} ,现在我该怎样用12864液晶显示出来。显示效果如:87 81 82 83等。 以前都是显示字符串的或者十进制数1000,就直接用分离的方法。 可是显示地址,还不知道用什么方法, 各位 ...… 查看全部问答> |
|
【视频分享】WEBENCH Visualizer 设计工具导览 各位好呀!! 又到周末放松的时候了,但是别忘了保持一颗学习的心哟~~ 继续和大家推荐WEBENCH这款强大的设计工具。数秒间向您展示数十亿个完整的电源供应器设计选择,这个视频将指导您如何迅速地修改设计参数,并实时审视该DC-DC电源供应器设计的 ...… 查看全部问答> |




