微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助,延时函数出错问题求解

求助,延时函数出错问题求解

时间:10-02 整理:3721RD 点击:

这个延时函数在其他程序中可以正常运行,但在我自己编的程序中出错了,
错误原因附在图片上,代码中红色部分时出错所在位置
函数代码如下,
求助懂得人给我解答一下,
/********************Delay_MS()*******************/
void Cpu_Delay100US(word us100)
{
  /* Total irremovable overhead: 16 cycles */
  /* ldhx: 5 cycles overhead (load parameter into register) */
  /* jsr:  5 cycles overhead (jump to subroutine) */
  /* rts:  6 cycles overhead (return from subroutine) */
  /* aproximate irremovable overhead for each 100us cycle (counted) : 8 cycles */
  /* aix:  2 cycles overhead  */
  /* cphx: 3 cycles overhead  */
  /* bne:  3 cycles overhead  */
  /* Disable MISRA rule 19 checking - Octal constant used */
  /*lint -esym( 960, 19)   */
  /* Disable MISRA rule 55 checking - Non-case label used */
  /*lint -esym( 961, 55)   */
  asm {
loop:
    /* 100 us delay block begin */
    /*
     * Delay
     *   - requested                  : 100 us @ 16MHz,
     *   - possible                   : 1600 c, 100000 ns
     *   - without removable overhead : 1592 c, 99500 ns
     */
    pshh                               /* (2 c: 125 ns) backup H */
    pshx                               /* (2 c: 125 ns) backup X */
    ldhx #$00C5                        /* (3 c: 187.5 ns) number of iterations */
label0:
    aix #-1                            /* (2 c: 125 ns) decrement H:X */
    cphx #0                            /* (3 c: 187.5 ns) compare it to zero */
    bne label0                         /* (3 c: 187.5 ns) repeat 197x */
    pulx                               /* (3 c: 187.5 ns) restore X */
    pulh                               /* (3 c: 187.5 ns) restore H */
    nop                                /* (1 c: 62.5 ns) wait for 1 c */
    nop                                /* (1 c: 62.5 ns) wait for 1 c */
    nop                                /* (1 c: 62.5 ns) wait for 1 c */
    /* 100 us delay block end */
    aix #-1                            /* us100 parameter is passed via H:X registers */
    cphx #0
    bne loop                           /* next loop */
    rts                                /* return from subroutine */
  }
  /* Restore MISRA rule 19 checking - Octal constant used */
  /*lint +esym( 960, 19)   */
  /* Restore MISRA rule 55 checking - Non-case label used */
  /*lint +esym( 961, 55)   */
}
void DELAY_MS(word x)
{   unsigned int WF;
WF=x/2;
    while(WF--)
    {
      Cpu_Delay100US(20);           
    }
}


别沉啊,自顶~~·

应该是数据类型的问题吧,
void DELAY_MS(word x)
{   unsigned int WF;
WF=x/2;
x是word,WF是int,word可能不能向int做格式转换

可以直接转换啊,int是32位,word是16位,应该不是这个问题,,,

我想会不会是因为我用的是COdewarrior6.3,软件版本的问题呢?

别沉啊,大家都来讨论一下

就是格式转换的问题,word是啥变量,怎么和整型变量在一块转换啊

我发现我只要在前面定义#define N=800   这一类的,就会出现后面的情况,不定义,该函数就可以正常运行。

不懂帮顶

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top