上次写的是用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
上一篇:STM8与汇编语言(6)--8位定时器应用之一
下一篇:STM8与汇编语言(8)--16位定时器应用
推荐阅读
史海拾趣
Abilis Systems公司是一家专注于数字视频和数字广播领域的半导体公司,以下是该公司发展的五个相关故事:
公司成立和初期发展: Abilis Systems公司成立于2004年,总部位于法国索恩-卢瓦尔省的克勒拉克。公司成立之初,致力于研发数字视频和数字广播领域的创新技术,旨在提供先进的芯片解决方案。
技术创新和产品推出: 在成立后的几年里,Abilis Systems公司不断进行技术创新,并推出了一系列创新的数字视频和数字广播芯片产品。这些产品包括数字电视接收器和解调器、数字广播接收器等,为客户提供了高性能和高度集成的解决方案。
市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,Abilis Systems积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于数字电视、数字广播、卫星电视等领域,赢得了客户的信赖和认可。
并购和战略合作: 为了进一步加强技术实力和扩大市场份额,Abilis Systems公司进行了一系列并购和战略合作。通过收购具有相关技术和市场资源的企业,公司拓展了产品线,并加强了在数字视频和数字广播领域的领先地位。
未来展望和发展方向: Abilis Systems将继续致力于技术创新和产品升级,加强在数字视频和数字广播领域的研发投入。公司将不断推出符合市场需求的新产品和解决方案,为客户提供更优质的服务和支持。同时,公司还将积极参与行业标准制定和国际合作,推动数字视频和数字广播技术的发展和应用。
Dolphin Interconnect Solutions ASA自创立之初,便以技术革新为核心驱动力。公司不断投入研发资源,开发出了基于PCI Express的I/O和clustering产品,这些产品在市场上取得了显著的成功。随着技术的不断进步,Dolphin又成功地将产品扩展到更广泛的领域,如云计算、大数据处理等,进一步巩固了其在电子行业的地位。
随着电子行业的竞争加剧,Comair Rotron意识到单打独斗已难以满足市场需求。因此,公司开始积极寻求与行业内其他企业的合作机会。通过与多家知名电子企业建立战略合作关系,Comair Rotron不仅获得了更多的业务机会,还通过与合作伙伴的技术交流和资源共享,不断提升自身的技术水平和产品质量。
近年来,辉芒微积极筹备上市工作,旨在通过资本市场进一步拓展融资渠道和品牌影响力。尽管在上市过程中经历了两次撤回申请资料的波折,但公司始终保持着对资本市场的热情和信心。通过不断优化内部管理、提升产品竞争力和加强市场拓展,辉芒微最终赢得了市场的广泛认可。其产品被广泛应用于智能家居、生活电器、智能穿戴等领域,并与小米、飞科、中兴等众多知名品牌建立了长期稳定的合作关系。
在成功进入军用市场后,Discera公司开始将目光投向更广阔的商用市场。他们积极与各大电子厂商合作,推广自己的CMOS MEMS谐振器产品。随着技术的不断普及和成本的降低,越来越多的商用电子产品开始采用Discera的谐振器产品,公司的市场份额也逐步扩大。
安路科技始终将技术创新作为公司发展的核心驱动力。公司不断加大研发投入,引进高端人才,建立了一支具有强大研发实力的团队。通过持续的技术创新,安路科技在FPGA领域取得了多项重要突破,推出了多款具有领先水平的产品,进一步巩固了公司在市场中的地位。
一、综述 宽带网络应用的日趋普及以及数字技术在安防产品中的应用,为整个安防产业带来革命性的改变。在图像监控产品领域,数字网络技术的导入大大拓宽了产品的应用范围,使得以往费用代价高昂或难以实现的远程监控应用变得轻而易举,远程医疗会诊 ...… 查看全部问答∨ |
|
// // Bootloader configuration parameters. // typedef struct _BOOTCFG { ULONG ImageIndex; ULONG ConfigFlags;   ...… 查看全部问答∨ |
|
mini6410上移植好的QtE-4.7.0源代码包下载地址 本帖转自:http://www.arm9home.net/read.php?tid=8110&page=1&toread=1#tpc Nokia公司于当地时间2010-9-21日正式发布了Qt 4.7.0( 见链接:http://labs.qt.nokia.com/2010/09/21/qt-4-7-0-now-available/)以下是来自 LinuxToy的新闻 ...… 查看全部问答∨ |
唯一的耗电器件就是7位半的液晶,以及XTR115两线制供电,片子是MSP430F425 整体功耗要求0.7mA以下。现在差一点,从软件上可以怎样改进?我觉得从运行频率上可以做文章。哪位控制功耗的高手指导一下?… 查看全部问答∨ |
基于Hercules的踏板控制器DIY(五):关于Hercules定时器的使用 设计中需要用一个计数器作为软件计时器的标准,要求每隔10mS计数器增加一次,提供给软件计时器做基准。 我看规格书文档号:spn517里12.2.1节关于RTI计数器的说明, 是不是可以这样: RTIUCx 赋一个合适的值,使经过10mS能够增加到这个值,从而RT ...… 查看全部问答∨ |
2013年第二期MSP430 技术日全资料 2013年第二期MSP430 技术日全部资料,MSP430的价值,MSP产品系列一览,,,低功耗的未来,430的未来,高的模拟和数字集成度,所有的 MSP430 器件从一开始就都是针对超低功耗 (ULP) 而精心设计的。这意味着 ...… 查看全部问答∨ |