ORG 0000H ;
LJMP MAIN ;转主程序
ORG 0003H ;INT0中断服务入口地址
LJMP L1 ;转INT0高优先级中断服务程序
ORG 0013H ;INT1中断服务入口地址
LJMP L2 ;转INT1高优先级中断服务程序
ORG 0100H ;设置主程序起始地址
MAIN: SETB EA ;CPU开放中断
SETB EX0 ;允许外部中断0中断
SETB EX1 ;允许外部中断1中断
SETB PX0 ;外部中断0设置为高优先级
SETB IT0 ;设置外部中断0为跳沿触发方式
SETB IT1 ;设置外部中断1为跳沿触发方式
MOV SP,#70H ;设置堆栈为70H
MOV A,#0FFH ;将0FFH赋值给累加器
FR: MOV P1,A ;将累加器的值给P1
ACALL DELAY1S ;调用1秒延时子程序
CPL A ;对累加器值取反
SJMP FR ;循环
L1: PUSH ACC ;将累加器的值暂时存于堆栈
MOV A,#80H ;将80H赋值给A
MOV P1,A ;将累加器的值给P1
ACALL DELAY1S ;调用1秒延时子程序
LOOP1:RR A ;累加器循环右移
MOV P1,A ;将累加器的值给P1
ACALL DELAY1S ;调用1秒延时子程序
JB P1.0,N2 ;P1.0判断为1则跳转N2
AJMP LOOP1 ;循环
L2: PUSH ACC ;将累加器的值暂时存于堆栈
MOV A,#7FH ;将7FH赋值给A
MOV P1,A ;将累加器的值给P1
ACALL DELAY1S ;调用1秒延时子程序
LOOP2:RR A ;累加器循环右移
MOV P1,A ;将累加器的值给P1
ACALL DELAY1S ;调用1秒延时子程序
JNB P1.0,N2 ;P1.0判断不为1则跳转N2
AJMP LOOP2 ;循环
N2:POP ACC ;从堆栈取出累加器的值
RETI ;中断返回
DELAY1S:MOV R5,#10 ;1秒延时子程序
DELAY0 :MOV R6,#200
DELAY1 :MOV R7,#123
DELAY2:DJNZ R7,DELAY2
DJNZ R6,DELAY1
DJNZ R5,DELAY0
RET
END
以上程序全文,想知道最后的一秒延时子程序是怎么实现的,那个延时一秒的计算是怎么算出来的
|