|
|
ORG 0000H ;
LJMP MAIN ;轉(zhuǎn)主程序
ORG 0003H ;INT0中斷服務(wù)入口地址
LJMP L1 ;轉(zhuǎn)INT0高優(yōu)先級中斷服務(wù)程序
ORG 0013H ;INT1中斷服務(wù)入口地址
LJMP L2 ;轉(zhuǎn)INT1高優(yōu)先級中斷服務(wù)程序
ORG 0100H ;設(shè)置主程序起始地址
MAIN: SETB EA ;CPU開放中斷
SETB EX0 ;允許外部中斷0中斷
SETB EX1 ;允許外部中斷1中斷
SETB PX0 ;外部中斷0設(shè)置為高優(yōu)先級
SETB IT0 ;設(shè)置外部中斷0為跳沿觸發(fā)方式
SETB IT1 ;設(shè)置外部中斷1為跳沿觸發(fā)方式
MOV SP,#70H ;設(shè)置堆棧為70H
MOV A,#0FFH ;將0FFH賦值給累加器
FR: MOV P1,A ;將累加器的值給P1
ACALL DELAY1S ;調(diào)用1秒延時(shí)子程序
CPL A ;對累加器值取反
SJMP FR ;循環(huán)
L1: PUSH ACC ;將累加器的值暫時(shí)存于堆棧
MOV A,#80H ;將80H賦值給A
MOV P1,A ;將累加器的值給P1
ACALL DELAY1S ;調(diào)用1秒延時(shí)子程序
LOOP1:RR A ;累加器循環(huán)右移
MOV P1,A ;將累加器的值給P1
ACALL DELAY1S ;調(diào)用1秒延時(shí)子程序
JB P1.0,N2 ;P1.0判斷為1則跳轉(zhuǎn)N2
AJMP LOOP1 ;循環(huán)
L2: PUSH ACC ;將累加器的值暫時(shí)存于堆棧
MOV A,#7FH ;將7FH賦值給A
MOV P1,A ;將累加器的值給P1
ACALL DELAY1S ;調(diào)用1秒延時(shí)子程序
LOOP2:RR A ;累加器循環(huán)右移
MOV P1,A ;將累加器的值給P1
ACALL DELAY1S ;調(diào)用1秒延時(shí)子程序
JNB P1.0,N2 ;P1.0判斷不為1則跳轉(zhuǎn)N2
AJMP LOOP2 ;循環(huán)
N2:POP ACC ;從堆棧取出累加器的值
RETI ;中斷返回
DELAY1S:MOV R5,#10 ;1秒延時(shí)子程序
DELAY0 :MOV R6,#200
DELAY1 :MOV R7,#123
DELAY2:DJNZ R7,DELAY2
DJNZ R6,DELAY1
DJNZ R5,DELAY0
RET
END
以上程序全文,想知道最后的一秒延時(shí)子程序是怎么實(shí)現(xiàn)的,那個(gè)延時(shí)一秒的計(jì)算是怎么算出來的
|
|