4172|0

1560

帖子

24

TA的资源

五彩晶圆(初级)

楼主
 

【R7F0C809】中断摸索之定时器使用 [复制链接]

本帖最后由 lonerzf 于 2015-8-26 07:17 编辑

这几天空闲的时候看了看中断这块。首先就是了解有哪些中断源。



可能这里要注意的就是定时器T0-T3中,T1、T3定时器是能单独配置高8位定时及中断的。

定时器的相关寄存器如下图所示


DEMO板上的实例已经用了T0、T1,那就拿T2来做定时器,定时中断,然后切换LED灯亮灭吧。
从用户手册P108开始,逐个配置即可。


1 外围允许寄存器 0 ( PER0)TAU0EN 位打开,为定时器模块提供时钟输入。


2  定时器模式寄存器 TMR02H   TMR02L 进行配置,我使用的是 运行时钟 CK00 (需配置PRS000 - PRS003为定时器配置时钟频率), CKS0n1 位指定运行时钟,软件触发开始有效,所以直接配置为00H即可。










3  定时器时钟选择寄存器 0 ( TPS0)的配置这里就跟别人一样,选16分频好了,那就是1.25MHz。





4  中断屏蔽标志寄存器 ( MK0L、 MK0H、 MK1L)关闭定时器2的中断屏蔽TMMK02 = 0;





5  配置定时器通道开始寄存器 0 ( TS0、 TSH0 ( 8 位模式))启动定时器T2  TS0 |= 0x04;





6  TDR02H和TDR02L写入初值。我这里定时10ms,100次处理一次,达到1S的效果,所示初值就是TDR02H = 0x30; TDR02L = 0xD4;


7  写定时器中断服务程序


具体格式呢,源码文件中最上面一行(开始)加中断宏定义


#pragma interrupt INTTM02  INTTM02_IRS



中断服务函数就随便找个地方补充



__interrupt void  INTTM02_IRS(void)


{


        TMIF02 = 0;                     /*清中断*/


        TDR02H = 0x30;           /*更新初值*/


        TDR02L = 0xD4;


        if(CNT++ == 100)


        {


                CNT = 0;


                flag = (flag == 0) ? 2 : 0;


                P0 &= 0xFD;


                P0 |= flag;        


        }


}


就这么7步。定时器2配置完成。

DEMO工程


LED_T2.rar (805.26 KB, 下载次数: 22)




点赞 关注(1)
个人签名这孩子,成熟的象征,理智的典范。

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表