历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-10-11 来源:eefocus

上次写的是用STM8单片机中的8位定时器作为软件延时,采用的是查询方式。在实际系统中,定时器的应用,更多的是采用中断方式,下面的代码就给出8位定时器在中断方式下的应用。


实验程序首先初始化驱动LED的端口,然后初始化8位的定时器4,最后启动中断允许,要记住,一定要将中断服务程序的入口地址填写到中断向量表中,并且要根据中断向量号在正确的位置上填写。


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


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


stm8/


      #include "mapping.inc"

     

;     #include "STM8S207S8.INC"


; 涉及到的硬件资源

; LED1定义在PD3



; 下面定义端口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,#$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    ; 设定计数器的初值

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

                                                                                                            

        LD     A,#$01         ; b0 = 1,允许计数器工作

                                   ; b1 = 0,允许更新



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

         LD     A,#$01        ; 允许更新中断

    LD     TIM4_IER,A     ;

         RIM                 ; 允许CPU全局中断

                            

MAIN_LOOP.L

         JRA    MAIN_LOOP      ; 进入无限循环



; 下面是定时器4的中断服务程序

TIMER4_ISR.L                          

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

         LD     TIM4_SR,A                             

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

         XOR    A,#$08

         LD     PD_ODR,A       ; LED闪烁频率=2MHZ/128/256/2=30.5

         IRET                 ; 中断返回





  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

             dc.l {$82000000+NonHandledInterrupt}   ; irq9

             dc.l {$82000000+NonHandledInterrupt}   ; irq10

             dc.l {$82000000+NonHandledInterrupt}   ; irq11

             dc.l {$82000000+NonHandledInterrupt}   ; irq12

推荐阅读

史海拾趣

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

Frequency Management International公司的发展小趣事

作为一家有社会责任感的企业,FMI深知可持续发展和环保的重要性。公司积极响应国家环保政策,采用环保材料和生产工艺,减少对环境的影响。同时,FMI还致力于节能减排和资源循环利用等方面的研究和实践工作。这些努力不仅体现了FMI对环境保护的承诺和责任感,也为公司的长期发展奠定了坚实的基础。

综上所述,Frequency Management International公司凭借其创立与早期发展、技术创新与产品线拓展、市场拓展与国际化战略、质量管理与客户服务以及可持续发展与环保责任等方面的努力和发展历程,在电子行业中取得了显著的成就和地位。

Hitano Enterprise Corp公司的发展小趣事

Frequency Management International公司成立于1971年,自创立之初,FMI便专注于为通信市场提供快速交货和严格公差的石英晶体和晶体振荡器。在成立初期,公司凭借其高质量的产品和可靠的服务,逐渐在通信市场中站稳了脚跟。随着技术的不断进步和市场需求的日益增长,FMI不断扩大生产规模,提升产品质量,为公司的后续发展奠定了坚实的基础。

Hartmann Codier GmbH公司的发展小趣事

作为一家有社会责任感的企业,FMI深知可持续发展和环保的重要性。公司积极响应国家环保政策,采用环保材料和生产工艺,减少对环境的影响。同时,FMI还致力于节能减排和资源循环利用等方面的研究和实践工作。这些努力不仅体现了FMI对环境保护的承诺和责任感,也为公司的长期发展奠定了坚实的基础。

综上所述,Frequency Management International公司凭借其创立与早期发展、技术创新与产品线拓展、市场拓展与国际化战略、质量管理与客户服务以及可持续发展与环保责任等方面的努力和发展历程,在电子行业中取得了显著的成就和地位。

创世(CS)公司的发展小趣事

创世公司在SD NAND存储产品的研发过程中,不断突破技术壁垒,实现了产品的创新。例如,2018年,为满足轨道交通、航空航天、工业控制等行业类客户对存储产品的特殊需求,创世公司首家推出了第二代SD NAND产品。这一产品不仅具有更快的读写速度和更宽泛的使用环境,还能承受高低温冷热冲击、随机掉电等苛刻的操作环境。同时,创世公司还为客户提供个性化的固件定制服务,进一步满足了客户的个性化需求。

GPD Optoelectronics Corp公司的发展小趣事

作为一家有社会责任感的企业,创世公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,创世公司还积极参与社会公益活动,为社会和环境贡献自己的力量。这种对社会责任的关注和担当使得创世公司在电子行业中树立了良好的形象。

问答坊 | AI 解惑

有谁认识熟”红外框”(触摸屏)的电子工程师

招聘熟”红外框”(触摸屏)的电子工程师 我公司想招一个电子工程师,要求:对”红外手写” (也叫触摸屏)非常熟悉的,专职和兼职都可以.工作地点:杭州.(也可在深圳),薪金优 ,有意者可联系我,或把简历发至公司邮箱:bearbear-bear@163.com电话:0755-82132 ...…

查看全部问答>

光照传感器po188在手机上可以实现的功能

利用深圳欧恩光电技术研究所的光照传感器po188,在手机上可以实现以下功能: 1.节能(键盘感应) 在正常使用手机的情况下,白天可以自动关闭键盘背光灯,晚上则可自动开启,起到节能作用; 2.智能感光(LCD感应) 感应环境光线强弱,自动调节LCD屏亮度等级 ...…

查看全部问答>

ARM初学者

我是一名ARM初学者 不知从何入手 有些51单片机的基础  请大家给我推荐ARM学习方面 好的书籍~~ 谢谢!!…

查看全部问答>

如何在wince5.0拔GPRS,打电话,发送接收短信

最近一家公司要求我把我原来在MOBILE的程序移植到他们的设备上,现主要是这三个方面不大清楚怎么移植,没做过wince5.0,不知是否要向他们要除了设备之外的材料?怎么实现…

查看全部问答>

Wince 托盘图标不显示提示信息

用evc编的托盘程序,当鼠标移动到图标上时,无法显示提示信息,请高手帮忙...... static NOTIFYICONDATA nid; nid.uFlags=0; nid.cbSize=sizeof(NOTIFYICONDATA); nid.hWnd=hwnd; nid.uID=IDI_APPICON; nid.hIcon=LoadIcon(hInstance,MA ...…

查看全部问答>

Protel99SE使用请教。

                                 如何才能使Protel99 SE不产生哪些令人生厌的附加和backup of ...文件啊?烦死了,每打开一次就产生一套,非常讨厌 ...…

查看全部问答>

TMS320F240用哪个软件烧写?

知道的说下,找了好长时间了,有的说是CC4.1,有的又说不是,到底哪个软件可以呢 先谢…

查看全部问答>

【MSP430共享】基于蓝牙的高压线电流自动化检测系统设计

在高压危险场所,为提高操作人员的人身安全,使用隔空测量数据是非常需要的,因此采用蓝牙通信系统实现了对远离危险场所进行测量和记录所需数据。本系统使用超低功耗性能优秀的MSP430系列单片机作为核心控制器件,由蓝牙PDA接收信号并对其进行相应 ...…

查看全部问答>

陶瓷贴片电容知识

通常大家所说的贴片电容是指片式多层陶瓷电容 (Multilayer Ceramic Capacitors),简称MLCC。它是在若干片陶瓷薄膜坯上被覆以电极桨材料,叠合后一次烧结成一块不可分割的整体,外面再用树脂包封而成的。具有 小体积、大容量、Q值高、高可靠和耐高温 ...…

查看全部问答>

蓝牙无线传输UUID

怎么通过UUID获取蓝牙传输相应的数据包…

查看全部问答>