winnie 发表于 2009-4-15 11:30:42

汇编能实现的功能,用C怎样实现?

N       EQU      0C
START:
         MOVLW   55
         SUBWF       N,W
         BTFSC      STATUS,Z
          GOTO          ERR

;0C-1E的内存清零
         MOVLW    0x0C
         MOVWF   FSR
RAMCLR
         CLRF          INDF;清除FSR所指向的单元
         INCF          FSR,F
         MOVF      FSR,W;检测是否完成
         ANDLW   B'00011111'      
         XORLW    1F
         BTFSS       STATUS,Z
          GOTO         RAMCLR
;内存清零完毕

          MOVLW   55
          MOVWF   N
ERR:
;其他初始化
...
...
...
MAIN:
...
...
...
         GOTO         MAIN

END

winnie 发表于 2009-4-15 11:31:11

char *tmp;
for(tmp = (char *)0x0c;tmp <= (char *)0x1e;tmp++)
*(tmp)=0;

不过好象没有0x0c-0x1e的用户内存吧?

做热启动?

你可以定义一个persistent

winnie 发表于 2009-4-15 11:43:09

如果你知道中断函数调用的所有变量都是全局,你就理解这个错误了。哪怕中断函数里调用的其它函数里定义的局部变量,它也是一个特殊的全局变量,因为中断函数执行是不可预测的。

如果你能保证delay不能被主函数和中断函数同时执行,你可以加上interrupt level来修饰。但这样做有个坏处就是代码不太可靠,容易出BUG。一般的建议是象delay这样经常被执行,代码又小的函数,不如单独为中断写一个。
页: [1]
查看完整版本: 汇编能实现的功能,用C怎样实现?