论坛风格切换切换到宽版
  • 4907阅读
  • 9回复

请问各位汇编延时程序应该怎样写? [复制链接]

上一主题 下一主题
离线cxa1587
 
发帖
28
只看楼主 倒序阅读 0楼 发表于: 2008-09-17
del:mov r5,#04h
  mov r6,#0ffh
  mov r7,#0ffh
del1:djnz r7,del1
del2:djnz r6,del2
del3:djnz r5,del3
    ret
    end
请问论坛的各位高手上面的延时子程序有什么不妥,为什么这样写行不通,小弟刚开始学汇编,请问各位汇编延时程序应该怎样写及计算延时时间。
离线汤圆
发帖
1157
只看该作者 1楼 发表于: 2008-09-18
delay:   mov r5,#04h
del1:   mov r6,#ffh
del2:   mov r7,#ffh
del3:   djnz r7,del3
        djnz r6,del2
        djnz r5,del1
好像这么写才是嵌套循环吧!
delay:
mov r7,#0ffh
djnz r7,$
nop
ret
单循环这么写
延时时间最简单去编译器仿真看看 自己算 算一下各个指令执行次数的周期求和即可
离线cxa1587
发帖
28
只看该作者 2楼 发表于: 2008-09-18
多谢楼上的答复,小弟还不是很明白什么是“嵌套循环”和“单循环”
离线xcodes
只看该作者 3楼 发表于: 2008-09-18
何必非要汇编
来个c的
void delay(int time)
{
while(time)time--;
}

要不就用定时器

设方式
赋初值
开中断
启动之
tmod=
th1=
tl1=
ie=
tr=1;

中断服务
void timerx_isr() intterrupt x using 2
{

}
离线albert
发帖
4807
只看该作者 4楼 发表于: 2008-09-18
'
多谢楼上的答复,小弟还不是很明白什么是“嵌套循环”和“单循环”
'
循环套循环就是嵌套循环。一个循环完了才进入别的循环那么就是单循环。你的程序的时间就是几个单循环累加了。自己画一画程序流程图就清楚了
离线汤圆
发帖
1157
只看该作者 5楼 发表于: 2008-09-18
楼上 人家问汇编 你整c 答非所问 哈哈
离线代洪波
发帖
4809
只看该作者 6楼 发表于: 2008-09-18
循环嵌套:比如a循环要运行8次,b循环才运行1次,如果要b循环运行8次,a循环就已经是运行了64次了!
离线cxa1587
发帖
28
只看该作者 7楼 发表于: 2008-09-19
'
何必非要汇编
来个c的
void delay(int time)
{
while(time)time--;
}
要不就用定时器
设方式
赋初值
开中断
启动之
tmod=
th1=
tl1=
ie=
tr=1;
中断服务
void timerx_isr() intterrupt x using 2
{
}
'
因为一向学惯电子,所以比较喜欢汇编,而且汇编能真正了解单片机的工作过程,况且本人也没有c语言基础。
离线cxa1587
发帖
28
只看该作者 8楼 发表于: 2008-09-19
多谢楼上各位前辈的热心指导,小弟刚开始学单片机有很多东西以后还须向大家请教,比如学习方法等......
离线BA5RW
发帖
48263
只看该作者 9楼 发表于: 2008-09-19
'
del:mov r5,#04h
  mov r6,#0ffh
  mov r7,#0ffh
del1:djnz r7,del1
del2:djnz r6,del2
del3:djnz r5,del3
    ret
    end
请问论坛的各位高手上面的延时子程序有什么不妥,为什么这样写行不通,小弟刚开始学汇编,请问各位汇编延时程序应该怎样写及计算延时时间。
'

除了多一个end,看不出有什么行不通的?应该可以用的吧?只是这样写浪费了工作寄存器而已.
我也喜欢汇编,常用结构化的语言思路尝试汇编来实现,其实可读性和逻辑性还是不错的,我也鼓励初学者要先玩汇编.