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

2019-07-15 10:25发布

本帖最后由 为了labview 于 2017-6-20 10:29 编辑

这个延时函数在其他程序中可以正常运行,但在我自己编的程序中出错了,
错误原因附在图片上,代码中红 {MOD}部分时出错所在位置
函数代码如下,
求助懂得人给我解答一下,
/********************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);           
    }
}

捕获.PNG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
为了Labview
1楼-- · 2019-07-15 19:45
人中狼 发表于 2017-6-20 09:59
应该是数据类型的问题吧,
void DELAY_MS(word x)
{   unsigned int WF;

可以直接转换啊,int是32位,word是16位,应该不是这个问题,,,
为了Labview
2楼-- · 2019-07-15 19:58
我想会不会是因为我用的是COdewarrior6.3,软件版本的问题呢????
为了Labview
3楼-- · 2019-07-15 23:54
 精彩回答 2  元偷偷看……
huihui163
4楼-- · 2019-07-16 02:27
就是格式转换的问题,word是啥变量,怎么和整型变量在一块转换啊
为了Labview
5楼-- · 2019-07-16 06:05
我发现我只要在前面定义#define N=800   这一类的,就会出现后面的情况,不定义,该函数就可以正常运行。
youwozuozhujun
6楼-- · 2019-07-16 08:59
不懂帮顶

一周热门 更多>