英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 汇编能实现的功能,用C怎样实现? [打印本页]

作者: winnie    时间: 2009-4-15 11:30
标题: 汇编能实现的功能,用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
char *tmp;
for(tmp = (char *)0x0c;tmp <= (char *)0x1e;tmp++)
*(tmp)=0;

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

做热启动?

你可以定义一个persistent
作者: winnie    时间: 2009-4-15 11:43
如果你知道中断函数调用的所有变量都是全局,你就理解这个错误了。哪怕中断函数里调用的其它函数里定义的局部变量,它也是一个特殊的全局变量,因为中断函数执行是不可预测的。

如果你能保证delay不能被主函数和中断函数同时执行,你可以加上interrupt level来修饰。但这样做有个坏处就是代码不太可靠,容易出BUG。一般的建议是象delay这样经常被执行,代码又小的函数,不如单独为中断写一个。




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://www.enroobbs.com/) Powered by Discuz! X3.2