3240|4

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

watchdog做间隔定时器时延时问题 [复制链接]

程序如下:
#include
#include "cry1602.h"
#include "cry1602.c"


unsigned char big[]="abcdefghijklmnopqrstuvwxyz";
unsigned char small[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";


void main(void)
{
  
  P1DIR=0xff;P1OUT=0xff;
  P2DIR=0xff;P2OUT=0xff;
  P3DIR=0xff;P3OUT=0xff;
  P4DIR=0xff;P4OUT=0xff;
  P5DIR=0xff;P5OUT=0xff;
  P6DIR=0xff;P6OUT=0xff;

  unsigned char i;
  P6DIR |= BIT2;P6OUT |= BIT2;          //关闭电平转换
  WDTCTL=WDT_ADLY_1000;    //间隔定时器,定时1000ms
  
  LcdReset();
  
  DispStr(0,0,big);
for(i = 0; i < 3; i++)  //延时2s
    {


        IFG1 &= ~WDTIFG;
        while(!(IFG1 & WDTIFG));                              
        IFG1 &= ~WDTIFG;
    }
  LcdWriteCommand(0x01,1);
  
  DispNChar(0,0,26,small);  
  
}

黑体部分的延时是如何做到的???,IFG1宏定义的值是多少,为何我在msp430x14x.h的的头文件里看的好像不对的,是0x0002u???还请各位赐教!!

IFG1.jpg (60.46 KB, 下载次数: 0)

IFG1.jpg

最新回复

楼上那么多空白,是格式问题,没法删除,可能是直接复制的原因吧  详情 回复 发表于 2016-1-25 13:20
 
点赞 关注

回复
举报

99

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
    有时间发帖不如多看两遍参考手册,以下文字摘抄自官方:
    The WDT+ interrupt flag, WDTIFG, located in IFG1.0。说明了看门狗的中断标志位叫做WDTIFG位于IFG1寄存器的第0位。
    When using the WDT+ in interval timer mode, the WDTIFG flag is set after the selected time interval and requests a WDT+ interval timer interrupt if the WDTIE and the GIE bits are set。说明这个标志位在在周期定时模式且看门狗中断与全局中断开的时候,只要定时时间到就会将标志位置一。
     再说程序的事,上面WDTCTL=WDT_ADLY_1000完成设置,定时器间隔为1s。延时程序首先清标志位,然后等到标志位置一,就过去了1s并把标志位清0(有点重复?)。循环两次就是2s,你那个应该是3秒。
    IFG1是寄存器,0X0002U是IFG1_。下面IFG1又通过宏U0IFG进行了重定义,所以你应该看宏U0IFG的定义。
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
鬼眼刀道 发表于 2016-1-20 10:10
有时间发帖不如多看两遍参考手册,以下文字摘抄自官方:
    The WDT+ interrupt flag, WDTIFG, locate ...

首先很感谢您的回复,我想您在学习的时候肯定也会遇到就算是看书看N遍也不明白的地方。
接着您的回复我有几个疑问:
1.首先,先说IFG1吧,我截了个图在下面,您说IFG1通过宏U0IFG进行了重定义,这个我看到了,但后面并没有在另外定义值是多少,我截了个图在下面,上电后IFG1初始值第0位和4位都是0,其余位用作其他用途,但我想一开始IFG1肯定会有一个初始值的吧,我想的对吗???2.这是我对程序的理解,不知道这几步的注释对不对还请帮忙看下:
for(i = 0; i < 3; i++)
    {
        IFG1 &= ~WDTIFG;             //IFG1原本为0,但启用了看门狗定是间隔器第0位变1,所以WDTIFG为0x01,这一步将IFG1第0位置0,其余位不变
        while(!(IFG1 & WDTIFG));    //等待IFG1的第0位置0
        IFG1 &= ~WDTIFG;           //将IFG1第0位置1,也就是这一步IFG1为1时后会引起上面的1s的延时是吧
    }

3.上面这个延时函数应该是2s的,我在开发板实验了几次,分别将for语句中的i<3,分别试了1,2,3,为1的时候时间特别短估计0.5s吧,闪的特别快,为2的时侯差不多1s,3的时候差不多2s,按照您的说法3次应该延时3s,但这确实没有3s,如果您不信我可以把原程序发给您试一下。

ccccc.jpg (14.05 KB, 下载次数: 0)

ccccc.jpg
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

4
 
第一,那个时间应该是3秒吧

第二:
IFG1 &= ~WDTIFG;             //IFG1原本为0,但启用了看门狗定是间隔器第0位变1,所以WDTIFG为0x01,这一步将IFG1第0位置0,其余位不变
while(!(IFG1 & WDTIFG));    //等待IFG1的第0位置0
IFG1 &= ~WDTIFG;           //将IFG1第0位置1,也就是这一步IFG1为1时后会引起上面的1s的延时是吧  




















这是你的备注,你没理解程序流程,三条语句全部理解错误。反了




















 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

5
 
楼上那么多空白,是格式问题,没法删除,可能是直接复制的原因吧
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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