? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

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 個解答

評分
  • carey
    Lv 4
    1 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

    上述寫法也可以延遲一秒

    參考資料: 自己
還有問題?馬上發問,尋求解答。