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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3956|回复: 2
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-15 11:30:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
2#
 楼主| 发表于 2009-4-15 11:31:11 | 只看该作者
char *tmp;
for(tmp = (char *)0x0c;tmp <= (char *)0x1e;tmp++)
*(tmp)=0;

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

做热启动?

你可以定义一个persistent
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2009-4-15 11:43:09 | 只看该作者
如果你知道中断函数调用的所有变量都是全局,你就理解这个错误了。哪怕中断函数里调用的其它函数里定义的局部变量,它也是一个特殊的全局变量,因为中断函数执行是不可预测的。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-5-2 12:50 , Processed in 0.052004 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表