PIC单片机延迟函数汇编语言

有一段简单的延迟函数如下:voiddelay1(x)charx;{delayh=x#asmdelay2movlw0x06movwf_delaydelay1decfsz_d... 有一段简单的延迟函数如下:
void delay1(x)
char x;
{
delayh=x
#asm
delay2 movlw 0x06
movwf_delay
delay1 decfsz_delayl
goto delay1
decfsz_delayh
goto delay2
#endasm
}
由于本人只学过C语言所以看不懂这段程序,请高手帮我解释一下!谢谢啦
最好能够解释一下延迟多久,或多少周期!我用的是PIC16f877单片机
展开
 我来答
xjdwan
2010-05-11 · TA获得超过214个赞
知道答主
回答量:102
采纳率:0%
帮助的人:71万
展开全部
delay2
movlw 0x06 //0X06给W
movwf_delay //W寄存器的值6给DELAY(应该是DELAYL吧)
delay1
decfsz_delayl //此句是 DECFSZ DELAYL,1
goto delay1 //DELAYL不等与0则跳转到delay1
decfsz_delayh //DELAYL=0在这里执行 DELAYH-1 判断是否为0为0
goto delay2 //不等于0 则跳转到DELAY2
//等于0 汇编程序执行完毕

什么编程环境啊,感觉有问题一样。。
[(2+1)*6+2+1+2]*x 个机器周期 你一个机器周期是1US 就是这么多US
micropower
2010-05-11 · TA获得超过1万个赞
知道大有可为答主
回答量:2619
采纳率:50%
帮助的人:1542万
展开全部
delayh=x //这句话有点问题,delay在这里没有定义,从字面上看,他应该是个有符号字符型变量,是个8位数值,而你下面有个delay和delayl这两个变量没有定义。
#asm //C语言里嵌入汇编指令的开始
delay2 movlw 0x06 //这句和下面一句是给_delay变量赋值,W=0X06
movwf_delay //因为在PIC的汇编里不能直接给目标变量赋数值,所以要先把0x06送W,然后_delay=w
delay1 decfsz_delayl //这应该是给目标变量_delayl自减。
goto delay1 //上述一句自减的指令如果结果等于0的时候,这句话不执行(跳过),如果_delayl结果不等于0,则跳到delay1即上一条指令继续执行自减程序
decfsz_delayh //同前面一句一样,给_delayH自减,直至等于0
goto delay2 //
#endasm //C语言里嵌入汇编语句的结束

这个程序就是有错误的地方,首先变量没有明确,到底是delay,还是delayl,还是delayh??
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式