8051時間延遲一秒
請問下面的程式要改程delay一秒要怎麼改?可以順便教我怎麼算嗎?
;file name = 7seg.asm for port 1 flash (program 03-2)
;****************************************************************
ORG 0H ;reset start here
START: ;
MOV R2,#0 ;set 7-seg code index
MOV DPTR,#TABLE ;load table address
LOOP1: MOV A,R2 ;load A with index number
MOVC A,@A+DPTR ;translate number into 7seg code
MOV P1,A ;output 7seg code to port1
CALL DELAY ;delay some time for look slowly
CALL DELAY ;delay
INC R2 ;increase index number
CJNE R2,#10,LOOP1 ;if index not equal 10,jmp next
JMP START ;restart
DELAY: MOV R7,#0 ;delay parameter
$1: MOV R6,#0 ;
DJNZ R6,$ ;
DJNZ R7,$1 ;
RET ;
; 7 segment led display code [pabcdefg] for 0--9
TABLE DB 10000001B ;0's 7seg code
DB 11001111B ;1's 7seg code
DB 10111111B ;2's 7seg code
DB 11011111B ;3's 7seg code
DB 11101111B ;4's 7seg code
DB 11110111B ;5's 7seg code
DB 11111011B ;6's 7seg code
DB 11111101B ;7's 7seg code
DB 11111110B ;8's 7seg code
DB 01111111B ;9's 7seg code
END
2 個解答
- careyLv 41 0 年前最佳解答
ORG 0H ;reset start here
START: ;
MOV R2,#0 ;set 7-seg code index
MOV DPTR,#TABLE ;load table address
LOOP1: MOV A,R2 ;load A with index number
MOVC A,@A+DPTR ;translate number into 7seg code
MOV P1,A ;output 7seg code to port1
;CALL DELAY ;delay some time for look slowly
;CALL DELAY ;delay
call delay1s ;delay 1 sec ******
INC R2 ;increase index number
CJNE R2,#10,LOOP1 ;if index not equal 10,jmp next
JMP START ;restart
DELAY: MOV R7,#0 ;delay parameter
$1: MOV R6,#0 ;
DJNZ R6,$ ;
DJNZ R7,$1 ;
RET ;
DELAY: MOV R7,#0 ;delay parameter
$1: MOV R6,#0 ;
DJNZ R6,$ ;
DJNZ R7,$1 ;
RET ;
;------若以 12 Mhz 而言,djnz 指令需 2us----
Delay1s:
Mov R5,#8
$2:mov R7,#250
$3:mov R6,#250
djnz R6,$ ;250*2us=500us=0.5ms
djnz R7,$3 ;250*0.5=125ms
djnz R5,$2 ;125ms*8=1 sec
ret
參考資料: me - 1 0 年前
另外一種延遲1S的DELAY副程式的寫法。
DELAY: mov r5,#10
s1: mov r6,#250
s2: mov r7,#200
djnz r7,$
djnz r6,s2
djnz r5,s1
上述寫法也可以延遲一秒
參考資料: 自己