历史上的今天
返回首页

历史上的今天

今天是: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         

推荐阅读

史海拾趣

DB Unlimited公司的发展小趣事

在音频市场日益竞争激烈的环境下,DB Unlimited意识到定制化服务的重要性。因此,公司开始提供定制设计服务,以满足客户对特定音频需求的个性化要求。通过与客户的紧密合作和深入沟通,DB Unlimited成功为客户解决了许多复杂的声学设计问题,赢得了客户的信任和赞誉。

磁联达(CND-tek)公司的发展小趣事

为了进一步扩大市场份额,磁联达(CND-tek)公司决定拓展海外市场。公司组建了一支专业的国际销售团队,积极参加国际电子展会和交流活动,与全球各地的客户建立了紧密的合作关系。同时,公司还加大了对海外市场的投入,设立了多个海外办事处和仓库,为客户提供更加便捷的服务。这些举措使得磁联达(CND-tek)的产品迅速走向全球,赢得了广泛的赞誉。

APC (APC by Schneider Electric)公司的发展小趣事

APC的产品和服务在全球范围内赢得了广泛认可。其InfraStruXure产品线因其集成式的电力、制冷、机架、管理和服务实现了一种开放、具有适应性且集成化的解决方案,赢得了近20个奖项。此外,APC还因其卓越的产品和业务表现,在多个年份赢得了全球100多个奖项。这些奖项不仅证明了APC在电子行业中的领先地位,也反映了其对于创新和质量的不懈追求。

ADI Electronics Inc公司的发展小趣事

ADI在发展过程中始终坚持创新,不断推出新产品和新技术。例如,在数字化转型的浪潮中,ADI积极拥抱变革,推出了一系列针对物联网、人工智能等新兴领域的解决方案。这些创新举措不仅满足了客户的需求,也进一步巩固了ADI在电子行业的领先地位。

Chemi-Con公司的发展小趣事

品质是Chemi-Con公司的生命线。公司始终坚持严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都经过严格的把控。这种对品质的执着追求,使得Chemi-Con的产品在市场上获得了良好的口碑。同时,公司还积极拓展市场,与全球多家知名企业建立了稳定的合作关系,产品远销海外市场。

AMICC [AMIC TECHNOLOGY]公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,AMICC开始积极拓展国内外市场。公司通过与大型电子企业建立战略合作关系,成功打入国际市场。同时,AMICC还积极参加各类行业展会和交流活动,提升品牌知名度和影响力。在市场拓展的过程中,AMICC始终坚持客户至上的原则,为客户提供优质的产品和服务,赢得了客户的信任和好评。

问答坊 | AI 解惑

学习应从哪里入手

所要学习的面很广,但学习应该从元器件入手。 元器件是组成电子电路的最小单位,是分析电路工作原理的基础,也是修理中最终检测、更换的对象,从了解、掌握元器件的外形特征、结构、工作原理、主要特性、检测方法入门,再进入电路工作原理的学 ...…

查看全部问答>

基于DSP的液晶模块的显示原理及实现

1 硬件电路接口的设计 图1给出了液晶显示模块的硬件电路接口设计框图,该系统采用TI公司的TMS320F206芯片(以下简称F206),其内部带有4KB的FLASH存储器,可以根据系统需要外挂EEPROM作为外部程序存储区。 SED1335控制器是日本EPSON公司生产 ...…

查看全部问答>

2010年1月16日,基于ARM的嵌入式系统软硬件开发讲座(北京)

作为全球性RISC标准的缔造者,ARM在嵌入式处理器领域中的霸主地位早已为大家所公认,目前行业中90%以上的嵌入式产品中都采用的是ARM系列的处理器。由于ARM公司本身是向芯片制造商提供知识产权,优异的体系结构和开放的平台,这就使得ARM处理器的应 ...…

查看全部问答>

用万用表测串口信号用哪个档

既然串口信号是脉冲信号,即属于交流电,为什么用直流档来测呢?用直流档测得的值是有效值吗?哪可不可以用交流档来测呢?这两个值相等吗?…

查看全部问答>

CETK下编译camera时kato.lib的问题

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 ...…

查看全部问答>

版主,求救STM32RTC老声长谈的问题?

版主,以前的RTC都正常使用可是最近的一批板子RTC出现问题? 描述如下: 1.如果用JLINK调试则程序一切正常 2.如果断电上电运行则RTC初始化有时通过,有时通不过,不稳定,    即使初始化完成后,则也无秒中断产生。(注程序初始化 ...…

查看全部问答>

msp430开发板原理图 pdf的

自己买的开发板 里面的原理图 发上来分享啦…

查看全部问答>

msp430f149用DS12C887显示时间的问题

昨天拿了块DS12C887的片子,想用149做一块时钟,用的是1602的屏,现在时间日期都能显示,可问题是就这么一直卡着不动了,而且时间和日期在软件里明明改了,可1602上显示的一直是2000年0月0日0分0秒……不知道怎么回事啊。程序是我自己按照DataSheet ...…

查看全部问答>

接收的地址怎样用12864显示出来?

例如接收的一帧数据,存放在数组rx[]={0x87,0x81,0x82,0x83,0x84,0x85} ,现在我该怎样用12864液晶显示出来。显示效果如:87 81 82 83等。 以前都是显示字符串的或者十进制数1000,就直接用分离的方法。 可是显示地址,还不知道用什么方法, 各位 ...…

查看全部问答>

【视频分享】WEBENCH Visualizer 设计工具导览

各位好呀!! 又到周末放松的时候了,但是别忘了保持一颗学习的心哟~~ 继续和大家推荐WEBENCH这款强大的设计工具。数秒间向您展示数十亿个完整的电源供应器设计选择,这个视频将指导您如何迅速地修改设计参数,并实时审视该DC-DC电源供应器设计的 ...…

查看全部问答>