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单片机 展开
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单片机 展开
2个回答
展开全部
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
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
展开全部
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??
#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??
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询