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条回答
鬼眼刀道
2019-03-24 19:25
    有时间发帖不如多看两遍参考手册,以下文字摘抄自官方:
    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的定义。

一周热门 更多>

相关问题

    相关文章