打印

讨论c语言延时设计

[复制链接]
1889|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tkalxy|  楼主 | 2007-10-31 16:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
picc里c语言延时不好计时,需要看汇编代码。我察看了一些资料上说对于
while(d--)编译后的汇编代码: 
    bcf  3,5 
    bcf  3,6   
    movlw  10 
    movwf  _delay
    l2 
    decf    _delay 
    incfsz   _delay,w 
    goto l2 
    return 
但是,我经过试验后发现汇编代码为:

while(d--);
   3F5    0820     MOVF 0x20, W
   3F6    1903     BTFSC 0x3, 0x2
   3F7    03A1     DECF 0x21, F
   3F8    03A0     DECF 0x20, F
   3F9    0A20     INCF 0x20, W
   3FA    1903     BTFSC 0x3, 0x2
   3FB    0A21     INCF 0x21, W
   3FC    1D03     BTFSS 0x3, 0x2
   3FD    2BF4     GOTO 0x3f4
我就有点搞不明白了,请高手指点一下,难道编译器,编译出的汇编不一样么?

对于for(x=100;--x;){;}经过编译后,
汇编为:
movlw 100 
    bcf 3,5 
    bcf 3,6 
    movwf   _delay 
l2    
decfsz   _delay 
    goto l2 
return
而我实验后汇编为:
  3F3    1283     BCF 0x3, 0x5
   3F4    00A0     MOVWF 0x20
   3F5    01A1     CLRF 0x21
   3F6    30FF     MOVLW 0xff
   3F7    07A0     ADDWF 0x20, F
   3F8    1C03     BTFSS 0x3, 0
   3F9    03A1     DECF 0x21, F
   3FA    0821     MOVF 0x21, W
   3FB    0420     IORWF 0x20, W
   3FC    1D03     BTFSS 0x3, 0x2
   3FD    2BF6     GOTO 0x3f6


请各位老大给几个延时函数,以便以后软件延时,谢谢
沙发
fsaok| | 2007-10-31 18:10 | 只看该作者

个人意见

我个人意见是,延时这类东西最好还是用汇编来实现,

因为C语言会优化算法的,所以同样的语句,不同的版本可能会出不同的结果。

不过,如果使用定时器去实现延时,那就另当别论,

所以,如果条件许可,建议最好是使用定时器去延时

使用特权

评论回复
板凳
tkalxy|  楼主 | 2007-10-31 18:58 | 只看该作者

有些没有必要用定时器实现!

提出用软件延时,意思就是想总结一个结论,以后好调用这个函数!

使用特权

评论回复
地板
LXRLXR| | 2007-11-1 11:44 | 只看该作者

while(d--); 应改while(--d);

unsigned char d;才行

使用特权

评论回复
5
tkalxy|  楼主 | 2007-11-1 13:44 | 只看该作者

为什么?

为什么要改为--d????
我用picc编译过,二者的编译结果一样!!!

使用特权

评论回复
6
韦广远| | 2007-11-1 14:57 | 只看该作者

对于--d和d--,如果要延时一样的话,前者设置的d值要比后者

很容易验证,把d设为1的话,while(d--)会执行一次,而while(--d)不会执行

使用特权

评论回复
7
goothin| | 2007-11-2 13:17 | 只看该作者

用软件仿真

使用特权

评论回复
8
ethunter| | 2007-11-3 16:33 | 只看该作者

PICC里asm应该很好嵌到C里吧

我看过资料,好像是加#asm{}在里面写汇编就可以了,但还没用过~!

时间要的很准的话用汇编来的好

使用特权

评论回复
9
tkalxy|  楼主 | 2007-11-3 20:15 | 只看该作者

想通过c循环设计总结延时的方法

看来大家在picc里延时是五花八门,多一半都要编译后的汇编代码
难道c里没有一个函数设置一个参数,要延时调用这个延时函数就可以了??

使用特权

评论回复
10
anxiangbo| | 2007-11-4 12:11 | 只看该作者

没有那么复杂的

PICC里带有延时函数的,在安装PICC后就有了,你只要把delays.h文件复制到INCLUDE 目录下就可以了,ms us级相当精确的,并且代码要少的多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

117

帖子

1

粉丝