汇编语言延时程序

来源:百度知道 编辑:UC知道 时间:2024/06/22 08:51:37
求一延时程序,波特率9600,晶振12M.(输入输出口自定)当输入为高电平时,每电平输出延时20uS.为低电平时,直接输出,输出有可能的全高不管.
希望高手帮忙编个程序.不胜感谢!
简单点吧,就是输出一个信号,当输出是高电平时,启动延时程序,低电平时,不延时,NEXT.
dshxxf有NEXT这指令吗?好象都没见过,要汇编语言的啊。再改下,谢谢

应该是这样简单的吧:
mov c,p1.0
jnc next
mov r1,#9
yanshi:
djnz r1,yanshi
nop
next:....
延时1+18+1=20us
1ms=1000us
next是标号好不好,就是低电平跳过延时程序到这里,高电平延时后到这里

for i=1 to 100000
next for

;很简单的一个小程序,以P1.0为例,任意一个IO都可以

JNB P1.0,BACK;为低电平时不延时,直接去执行你想处理的事情
MOV R2,#9 ;为高则进入延时20us
DELAY:
DJNZ R2,DELAY

BACK:;判断为高低电平后(延时或不延时后)进行处理的程序
BACK是一个标号,程序跳转的地址。
普通单片机时钟为12分频上,12M晶振,所以机器周期为1us.
延时20us=2+18
如果你的延时精度很高的话,建议你用示波器去看下。

汇编一般不考虑延时的!如果是延时的话,CPU的占用极高,这不是大定所想的,而且极大地浪费资源。一般采用中断的方式。

在BIOS中数中有一个例行中断,触发时间为15.2ns,你可以进行修改使用。

有点不明白us是什么单位?是毫秒吗?ms?还是纳秒?ns?教我一下us与他们的换算关系。

in equ p1.0 //输入口
out equ p1.1
main:
mov a,in
jnz delay_20//输出低电平往下走,高电平跳到延时
//这里写你要继续的代码

delay_20://延时20MS
mov delay,#4
djnz delay,$
mov delay,#4
djnz delay,$
ret

发了帖子就要看看别人的回帖,地下的帖子看了就足够你使用的了