历史上的今天
返回首页

历史上的今天

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

正在发生

2021年10月11日 | STM8与汇编语言(6)--8位定时器应用之一

2021-10-11 来源:eefocus

STM8单片机中的外设资源是比较丰富的,定时器有8位的也有16位的,下面的实验程序,就是利用8位定时器4来进行延时,然后驱动LED闪烁。


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


编译通过后,下载到开发板,运行程序,可以看到LED在闪烁,或者用示波器可以在LED引脚上看到方波。


在这里要特别提醒的是,从ST给的手册上看,这个定时器中的计数器是一个加1计数器,但本人在实验过程中感觉不太对,经过反复的实验,我认为应该是一个减1计数器(也许是我拿的手册不对,或许是理解上有误)。例如,当给定时器中的自动装载寄存器装入255时,产生的方波频率最小,就象下面代码中计算的那样,产生的方波频率为30HZ左右。若初始化时给自动装载寄存器装入1,则产生的方波频率最大,大约为3.9K左右。也就是说实际的分频数为ARR寄存器的值+1。


stm8/


      #include "mapping.inc"

     

;     #include "STM8S207S8.INC"



; 涉及到的硬件资源

; 下面定义端口D的寄存器地址

PD_ODR   EQU   $500f              

PD_IDR   EQU   $5010

PD_DDR   EQU   $5011

PD_CR1   EQU   $5012

PD_CR2   EQU   $5013



; 定时器4的寄存器定义

TIM4_CR1  EQU   $5340

TIM4_IER  EQU   $5341

TIM4_SR   EQU    $5342

TIM4_EGR  EQU   $5343

TIM4_CNTR  EQU   $5344

TIM4_PSCR  EQU   $5345

TIM4_ARR  EQU   $5346



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

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



; 下面初始化IO端口

; PD3设置成推挽输出

; PD7设置成悬浮输入

         LD     A,#08

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

         LD     A,#08

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

         LD     A,#00

              LD     PD_CR2,A            ;

;

; 下面初始化定时器4                       

         LD     A,#$00

         LD     TIM4_IER,A      ; 禁止中断

         LD     A,#$01    

         LD     TIM4_EGR,A      ; 允许产生更新事件

              LD     A,#$07

              LD     TIM4_PSCR,A      ; 计数器时钟=主时钟/128=2MHZ/128

                                             ; 相当于计数器周期为64uS

              LD     A,#255

              LD     TIM4_ARR,A       ; 设定重装载时的寄存器值,255是最大值

              LD     A,#255

              LD     TIM4_CNTR,A      ; 设定计数器的初值

                                              ; 定时周期=(ARR+1)*64=16384uS

                                 ; 产生方波频率=30.5HZ

                                                                                                                     ;

LD     A,#$01

                                     ; b0 = 1,允许计数器工作

; b1 = 0,允许更新

LD     TIM4_CR1,A      ; 设置控制器,启动定时器

MAIN_LOOP.L

            LD     A,TIM4_SR         ; 读入定时器4的状态

            AND    A,#01             ; 判断是否产生更新标志

            JREQ   MAIN_LOOP        ; 若没有,则等待

       LD     A,#0               ; 清除更新标志

       LD     TIM4_SR,A                          

                            

      LD     A,PD_ODR            ; 将LED驱动信号取反

      XOR    A,#$08

      LD     PD_ODR,A            ; LED闪烁频率=2MHZ/128/255/2=30.63

    JRA    MAIN_LOOP           ; 无限循环





  interrupt NonHandledInterrupt

NonHandledInterrupt.l

      iret



; 下面定义中断向量表    

             segment 'vectit'

             dc.l {$82000000+main}                                                     ; reset

             dc.l {$82000000+NonHandledInterrupt}   ; trap

             dc.l {$82000000+NonHandledInterrupt}   ; irq0

             dc.l {$82000000+NonHandledInterrupt}   ; irq1

             dc.l {$82000000+NonHandledInterrupt}   ; irq2

             dc.l {$82000000+NonHandledInterrupt}   ; irq3

             dc.l {$82000000+NonHandledInterrupt}   ; irq4

                  dc.l {$82000000+NonHandledInterrupt}   ; irq5

             dc.l {$82000000+NonHandledInterrupt}   ; irq6

             dc.l {$82000000+NonHandledInterrupt}   ; irq7

             dc.l {$82000000+NonHandledInterrupt}   ; irq8

推荐阅读

史海拾趣

E-Mark Inc公司的发展小趣事

在电子汽车行业初期,XYZ公司主要生产简单的车载电子设备。为了进入欧洲市场,公司决定对其产品进行E-Mark认证。经过严格的测试和审核,XYZ公司的产品质量和安全性能得到了欧洲市场的认可。随着欧洲市场的开拓,XYZ公司逐渐扩大了生产规模,提升了技术水平,最终成为了汽车电子行业的领导者。

Apx-Crystal公司的发展小趣事

面对日益激烈的市场竞争,Apx-Crystal公司意识到单凭自身的力量难以保持长期的竞争优势。于是,公司积极寻求与行业内外的合作伙伴进行技术交流和合作研发。通过与知名高校、科研机构以及同行的紧密合作,Apx-Crystal成功开发出了一系列具有创新性和领先性的电子产品,进一步巩固了其在行业内的领先地位。同时,公司还加大了对产业链的整合力度,推动了产业升级和可持续发展。

Advance Tapes公司的发展小趣事

随着电子行业的快速发展,对胶带产品的性能要求也越来越高。Advance Tapes公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并与多家高校和研究机构建立了合作关系。经过不懈努力,Advance Tapes成功开发出了一系列具有高性能、高可靠性的胶带产品,得到了广大客户的认可。

Feller US公司的发展小趣事

随着全球汽车产业的不断发展,国际合作已成为企业拓展市场、提升竞争力的重要途径。菲斯克也深刻认识到了这一点,积极寻求与全球各地的汽车制造商和供应商建立合作关系。通过与国际巨头的合作,菲斯克不仅获得了先进的技术和管理经验,还成功进入了多个国际市场,实现了全球布局的目标。这一系列的国际合作不仅提升了公司的知名度和影响力,还为公司的长期发展提供了有力的支持。

E-tec Interconnect Ltd公司的发展小趣事

为了满足全球客户的需求,E-tec开始在全球范围内进行布局。他们在亚洲、欧洲和北美等地设立了生产基地和研发中心,实现了全球范围内的生产和销售。同时,E-tec还注重供应链的整合和优化,与多家原材料供应商建立了长期稳定的合作关系,确保原材料的稳定供应和成本控制。

Force Technologies Ltd公司的发展小趣事

背景:在电子行业的早期,Force Technologies Ltd便以其对新材料和先进制造工艺的深入研究而闻名。公司创始人敏锐地洞察到半导体材料对于电子行业的重要性,于是投入大量资源进行研发。

发展:经过数年的努力,Force Technologies Ltd成功开发出一种新型半导体材料,该材料在提高芯片性能的同时显著降低了能耗。这一创新成果迅速吸引了全球电子巨头的关注,并促成了一系列重要的技术合作和订单。随着产品广泛应用于智能手机、平板电脑等消费电子产品中,Force Technologies Ltd迅速崛起为行业内的技术领军者。

问答坊 | AI 解惑

DSP处理器与通用处理器的异同

考虑一个数字信号处理的实例,比如有限冲击响应滤波器(FIR)。用数 学语言来说,FIR 滤波器是做一系列的点积。取一个输入量和一个序数向量, 在系数和输入样本的滑动窗口间作乘法,然后将所有的乘积加起来,形成一 个输出样本。类似的运算在数 ...…

查看全部问答>

关于sources.cmn和sources的问题,请大家帮忙指点,谢谢!

大家好请问:         1.sources.cmn和sources有什么区别?       2.sources.cmn里面的这些环境变量代表的是什么???       希望大家能给个注释!!!!!    &nbs ...…

查看全部问答>

如何安装XP与Wince双系统呢?

   现在想安装XP与Wince双系统,要求在开机后能出现选项选择是进入XP系统还是Wince系统,不知道该怎么办?      请问有没有人安装过?或者有什么好的建议,请指点指点,呵呵!     谢谢大家!…

查看全部问答>

编译QTE中间件错误

从QWSKEYBOARDHANDLE继承下来的自己的类,在加入到QTE45后,总是报我写得几个函数重复定义,我可是按照QTE下面的那个41XX_QWS.H(CPP)两个文件写的,是不是那个宏定义的原因. 就是if !defined(xxxxx),下面要不要定义一下#define xxxx,可是我看别的驱动 ...…

查看全部问答>

根据定时器的值求延时

已知TH2,TL2中是工件转一圈的计时值,我要在工件上等距的采样128个点,那么采样两个点之间的间隔是不是就是由(TH2…

查看全部问答>

请问:arm7 IO口的访问?

   目前用的LPC2220,菲利普的一款。 GPIO的访问,有4个口,P0~P3,想问P3口的怎么访问?    如  引脚 P3.27  怎么给设置0或1 ?…

查看全部问答>

驱动加载程序中,在StartService()后,通过GetLastError()返回3错误(〖3〗-系统找不到指定的路径。)

    驱动加载程序中,在StartService()后,通过GetLastError()返回3(〖3〗-系统找不到指定的路径。)    在虚拟机运行的,一开始是好的,暂停第二次打开 ,无论如何加载时运行到StartService()后的GetLastError()返回都是 ...…

查看全部问答>

EVC的安装问题

想重装EVC4.0,书上说EVC的卸载很不干净,很多注册信息仍留在注册表中,最好的解决办法是重装系统之后再装EVC,请问除此之外还有没有好的解决办法?…

查看全部问答>

寻:windows ce驱动及底层开发人员

现有一国外项目需要有windows ce驱动或底层开发经验的人, 有意者请msn或邮件联系:jackin_lau@hotmail.com…

查看全部问答>

也来秀一下DIY,160*80带触摸液晶模块做的多功能时钟~~~~~~

哈哈,其实这个屏是去年电赛的时候买的,正好也用上了,不过用得比较简单,感觉有点可惜了就干脆做了一个完整的模块,估计有的朋友还记得之前小弟发的第一次做PCB的帖子吧,就是给这个做的,这个是当时的链接 https://bbs.eeworld.com.cn/thre ...…

查看全部问答>