2059|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

CC2541计时器模式 [复制链接]

计时器模式


将WDCTL.MODE[1:0]设置为11,WDT处于计时器模式。一旦设定WDCTL.MODE[1:0]为11,计数器就开始从0计数,当计数值达到设定的的计数值(32768、8192、512或者64),便会产生看门狗中断请求,IEN2.WDTIE看门狗中断使能的情况下,IRCON2.WDTIF看门狗中断标志位变为1。注意中断使能信号放在WDCTL.MODE[1:0]配置前面,不然计数器开始计时了,还没有开中断。


在计数器模式下,WDCTL.CLR[0]为1则清除计数器,然后从0开始计数,并不会停止计数器,WDCTL.MODE[1:0]设置为00,计数器停止工作并且计数值清0。在计数器工作的时候,写入


WDCTL.INT[1:0] 无效,定时时间间隔无法改变,当计数器达到设定值时,并不会产生系统复位信号。如果定时器不够用的时候可以用该定时器,但是定时的时间只有4种选择。
计时器模式


示例:WDT处于计时器模式,中断方式,LED灯闪烁,0.25s状态改变一次


复制代码
1 /******************************************************************************
2 *文 件 名:WDT.c
3 *作    者:陈照
4 *时    间:2015-06-01
5 *版    本:1.0
6 *描    述:WDT计时器模式
7 ******************************************************************************/
8 #include
9
10 typedef unsigned char uchar;
11 typedef unsigned int  uint;
12
13 #define LED1 P1_0
14
15 /******************************************************************************
16 *函 数 名:Delay1ms
17 *功    能:延时1ms
18 *入口参数:uiDelay,延时参数,值越大,延时越长
19 *出口参数:无
20 ******************************************************************************/
21 void Delay1ms(unsigned int uiDelay)
22 {
23   unsigned int i,j;
24   for(i = 0; i < uiDelay; i++)
25   {
26     for(j = 0;j < 1322; j++);
27   }
28 }
29
30 /****************************************************************
31 *函 数 名:InitClock
32 *功    能:系统时钟初始化
33 *入口参数:无
34 *出口参数:无
35 *****************************************************************/
36 void InitClock(void)
37 {
38   CLKCONCMD &= ~(1 << 6);       //选择32MHz晶振
39   while(CLKCONSTA & (1 << 6));  //等待时钟稳定
40   CLKCONCMD &= ~0x47;           //系统时钟和定时器时钟都是32M
41 }
42
43 /******************************************************************************
44 *函 数 名:InitLED
45 *功    能:LED灯初始化
46 *入口参数:mode,mode为1则点亮所有LED,mode为0则熄灭所有LED
47 *出口参数:无
48 ******************************************************************************/
49 void InitLED(uchar mode)
50 {
51   P1SEL &= ~0x01;      //P1.0设置为通用I/O口
52   P1DIR |=  0x01;      //P1.0设置为输出
53   LED1 = mode;         //LED灯亮熄控制
54 }
55
56 /******************************************************************************
57 *函 数 名:Init_Watchdog
58 *功    能:看门狗初始化
59 *入口参数:无
60 *出口参数:无
61 ******************************************************************************/
62 void Init_Watchdog(void)
63 {
64   WDCTL = 0x00;  //打开IDLE 才能设置计时器间隔时间
65   WDCTL |= 0x0d; //设定为计时器模式,定时器间隔为0.25秒
66 }
67
68 /******************************************************************************
69 *函 数 名:WDT_ISR
70 *功    能:WDT计时器模式中断服务程序
71 *入口参数:无
72 *出口参数:无
73 ******************************************************************************/
74 #pragma vector = WDT_VECTOR
75 __interrupt void WDT_ISR(void)
76 {
77   WDTIF = 0;      //看门狗中断清除
78   LED1 = ~LED1;   //定时时间到,LED状态翻转
79 }
80
81 /******************************************************************************
82 *程序入口函数
83 ******************************************************************************/
84 int main(void)
85 {
86   InitClock();               //时钟初始化,32MHz
87   InitLED(0);                //LED初始化,熄灭LED1
88   IEN2 |= 0x20;              //看门狗中断使能
89   EA = 1;                    //开总中断
90   Init_Watchdog();           //看门狗初始化
91   
92   while(1)
93   {
94   };
95 }

此帖出自无线连接论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表