延时1秒 单片机 汇编语言

延时1秒的程序要怎么编写呀? 16F877
求指教……
用中断完成延时1秒

用定时器T0来完成

那么我令T0的溢出时间为200us
那么T0的初值为56
1(s)=200*250*2(us)
下面是程序
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP CTC0
ORG 100H
MIAN:
MOV SP,#5FH
MOV R7,#250;软件计数第一级
MOV R6,#2;软件计数第二级
MOV TL0,#56;送初值
MOV TH0,#56;
ANL TOMD,#0F0H;TOMD高4位不变,T1工作方式不
;变
ORL TMOD,#02H;定义T0工作方式
SETB ET0
SETB TR0
SJMP $
CTC0:
PUSH PSW;保护PSW
DJNZ R7, EXIT;软件计数
MOV R7,#250 ;重装初值,下同
DJNZ R6,EXIT
MOV R6,#2
EXIT:
POP PSW
RETI
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-14
假定你的晶体是12mhz的,如果不是12mhz请自己计算TH0,TL0,和R7需要赋的值。呵呵
-------------------------------

ORG 0000H
JMP START
ORG 000BH
JMP TIMER
START: MOV TMOD,#01H
MOV TH0,#0BDH
MOV TL0,#0C0H
MOV IE,#82H
MOV R7,#16
SETB TR0
LOOP: SJMP LOOP
TIMER: DJNZ R7,RETURN
MOV TH0,#0BDH
MOV TL0,#0C0H
MOV R7,#16
RETURN: RETI
END
第2个回答  2008-11-08
写一个空操作:nop
或者是空传送:mov r0,r0
若时间不够,就写个循环,让他够一秒就退出循环。
第3个回答  推荐于2017-09-16
51下 晶振 12m延时1s的程序,定时器中断方式0

#include<reg51.h>
int s,ms;

void main()
{

TMOD = 0x00; // 方式0
TH0 = (8192-4607) /32;
TL0 = (8192-4607) %32;
EA = 1; // 总中断
ET0 = 1; // 定时器0 中断
TR0 = 1; // 启动定时器中断
P1 = 0xff;

while(1)
{
if(s == 60)

{
s = 0;

}

}

void timer(void) interrupt 1
{
TH0 = (8192-4607) /32;
TL0 = (8192-4607) %32;

if(ms == 1000)
{
s++;
ms = 0;
}

ms++;
相似回答