watchdog做间隔定时器时延时问题

2019-03-24 09:34发布

程序如下:
#include<msp430x14x.h>
#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???还请各位赐教!!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
relax520
2019-03-24 22:25
< :TI_MSP430_内容页_SA7 -->
鬼眼刀道 发表于 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,如果您不信我可以把原程序发给您试一下。

一周热门 更多>

相关问题

    相关文章