; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; Subroutine 延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒182次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)
Delay1S Proc Near
push dx
push cx
xor ax,ax
int 1ah
mov Times,dx
mov Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,Times
sbb cx,Times[2]
cmp dx,Didas
jb Read_Time
pop cx
pop dx
ret
Times dw 0,0
Delay1S EndP
; -----------------------------------------
Didas equ 18
Start: call Delay1S
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
我以前写的控制跑马灯的程序,有1s定时,也有中断,
根据需要修改修改就可以了。
#include<reg51h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
void
delay(uchar
uu);
main()
{
EA=1;
EX0=1;//开总中断和外部中断0;
EX1=1;//开中断1
ET0=1;
PX0=1;
PX1=1;
IT0=1;
IT1=1;
while(1)
{
P2=0;
delay(20);
P2=0xff;
delay(20);
}
}
void
int1()
interrupt
0
using
2
{
uchar
aa,i,j,k;
i=0xfe;
for(aa=0;aa<4;aa++)
{
P2=i;
j=i>>7;
k=i<<1;
i=k|j;
delay(20);
}
}
void
int2()
interrupt
2
using
3
{
uchar
bb,ii,jj,kk;
ii=0x7f;
for(bb=0;bb<4;bb++)
{
P2=ii;
jj=ii<<7;
kk=ii>>1;
ii=kk|jj;
delay(20);
}
}
void
delay(uchar
uu)
//uu5ms定时;
{
uchar
aaa;
for(aaa=0;aaa<uu;aaa++)
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(!TF0);
TF0=0;
}
}
void delay(unsigned int xms)
{
unsigned int i, j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--); //这条指令约等于1ms
}
1秒即delay(1000)
VB提倡的是用定时器控件(Timer)的方法。首先在窗体放入一个Timer1和Command1,然后输入以下代码:
Private Sub Command1_Click()Timer1Interval = 1000
Timer1Enabled = True
End Sub
Private Sub Form_Load()
Timer1Enabled = False
End Sub
Private Sub Timer1_Timer()
MsgBox "这个对话框是点击按钮1秒钟后d出来的"
Timer1Enabled = False
End Sub
此外还可以用API函数Sleep来延时,或者利用循环结合时间函数来延时,但它们都容易造成系统阻塞,所以不建议使用。
使用定时器控件还有一个最大好处,就是在延时期间你的程序还可以继续运行处理其他事务(比如鼠标点击、键盘输入等)。而其他方法产生的延时效果,在延时期间就只能傻等,什么也做不了,甚至还有可能影响到其他程序。
以上就是关于用汇编语言编写一个延时1S的子程序全部的内容,包括:用汇编语言编写一个延时1S的子程序、求单片机一秒延时程序(12M晶振),要用C语言且用定时和中断、假设单片机的时钟频率为12HZ,设计一个1秒的延时程序并解释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)