專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

HOLTEK單片機(jī)-秒表

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2012年01月02日   【字體:

功能說明:

利用定時器1的定時模式制作一個秒表。

電路說明:

        HT48R50A-1 的端口A,端口C控制4個共陽極七段顯示器以顯示秒表的s及1/100s。

        HT48R50A-1 的復(fù)位鍵SW1作為秒表的開始計(jì)時,停止計(jì)時和回零按鍵。

程序:

; ***************************************************

; * Filename : 9712a.ASM                            *

; * Function : Stop watch                           *

; * Microprocessor : HT48R50A-1/28SKDIP-A           *

; * Crystal : 4MHz                                  *

; ***************************************************

#INCLUDE                HT48R50A-1.INC

TIMER_START             EQU     55H

TIMER_STOP              EQU     66H

;----------------------------------------------------

DATA    .SECTION        AT 60H  'DATA'

WARM_RESET              DB      ?       ;[60H]

DELAY_COUNTER           DB      ?       ;[61H]

DISPLAY_DATA            DB      ?       ;[62H]

DISPLAY_COUNTER         DB      ?       ;[63H]

DISPLAY_SHIFT           DB      ?       ;[64H]

SECOND                  DB      4 DUP(?);[65H]

;----------------------------------------------------

CODE    .SECTION        AT 00H  'CODE'

                ORG     00H

                JMP     START

                ORG     0CH

                JMP     TIMER1

 

                ORG     20H

START:

                CLR     PAC

                CLR     PCC

                MOV     A,WARM_RESET

                SUB     A,TIMER_START

                SZ      ACC

                JMP     TIMER_STOP_C

                MOV     A,TIMER_STOP

                MOV     WARM_RESET,A

                JMP     TIMER_START_GO

TIMER_STOP_C:

                MOV     A,WARM_RESET

                SUB     A,TIMER_STOP

                SZ      ACC

                JMP     TIMER_ONE

                CLR     WARM_RESET

                JMP     DISPLAY

TIMER_ONE:

                MOV     A,TIMER_START

                MOV     WARM_RESET,A

                CALL    CLEAN

                JMP     DISPLAY

TIMER_START_GO:

                MOV     A,09H

                MOV     INTC,A

                MOV     A,80H

                MOV     TMR1C,A

                MOV     A,0F0H

                MOV     TMR1L,A

                MOV     A,0D8H

                MOV     TMR1H,A

                SET     TMR1C.4

                CALL    CLEAN

TIMER:

                MOV     A,OFFSET SECOND

                MOV     MP1,A

                MOV     A,R1

                SUB     A,0AH

                SZ      ACC

                JMP     DISPLAY

                CLR     R1

 

                INC     MP1

                INC     R1

                MOV     A,R1

                SUB     A,0AH

                SZ      ACC

                JMP     DISPLAY

                CLR     R1

 

                INC     MP1

                INC     R1

                MOV     A,R1

                SUB     A,0AH

                SZ      ACC

                JMP     DISPLAY

                CLR     R1

 

                INC     MP1

                INC     R1

                MOV     A,R1

                SUB     A,06H

                SZ      ACC

                JMP     DISPLAY

                CALL    CLEAN

DISPLAY:

                MOV     A,OFFSET SECOND

                MOV     MP0,A

                MOV     A,0FEH

                MOV     DISPLAY_SHIFT,A

                MOV     A,04H

                MOV     DISPLAY_COUNTER,A

DISPLAY_LOOP:

                MOV     A,R0

                MOV     TBLP,A

                TABRDL  DISPLAY_DATA

                MOV     A,DISPLAY_DATA

                MOV     PA,A

                MOV     A,DISPLAY_SHIFT

                MOV     PC,A

                INC     MP0

                RL      DISPLAY_SHIFT

                CALL    DELAY

                SDZ     DISPLAY_COUNTER

                JMP     DISPLAY_LOOP

                MOV     A,WARM_RESET

                SUB     A,TIMER_STOP

                SZ      ACC

                JMP     DISPLAY

                JMP     TIMER

                RET

;----------------------------------------------------

TIMER1:

                INC     SECOND

                RETI

;----------------------------------------------------

CLEAN           PROC

                MOV     A,OFFSET SECOND

                MOV     MP1,A

                MOV     A,04H

                MOV     DISPLAY_COUNTER,A

CLEAN_LOOP:

                CLR     R1

                INC     MP1

                SDZ     DISPLAY_COUNTER

                JMP     CLEAN_LOOP

                RET

CLEAN           ENDP

;----------------------------------------------------

DELAY           PROC

                MOV     A,0FFH

                MOV     DELAY_COUNTER,A

WAIT:

                SDZ     DELAY_COUNTER

                JMP     WAIT

                RET

DELAY           ENDP

;----------------------------------------------------

                ORG     0F00H

                DC      081H,0CFH,092H,086H     ;0123

                DC      0CCH,0A4H,0A0H,08FH     ;4567

                DC      080H,084H               ;89

;----------------------------------------------------

                END 
關(guān)閉窗口

相關(guān)文章