51单片机T0定时器10ms定时中断例程

cpp 复制代码
PROGRAM NAME:INTR1.ASM
;TEST TIMER0 INTERRUPT(MODE 1)

COUNT   EQU     9217        ;10 ms FOR XTAL=11.0592MHz
CHK_BIT REG     P3.2

        ORG     0000H
        LJMP    RESET
        ORG     0003H       ;INTO INTERRUPT
        RETI
        ORG     000BH       ;TIMER0 INTERRUPT
        LJMP    INT_TIMER0
        ORG     0013H       ;INT1 INTERRUPT
        RETI
        ORG     001BH       ;TIMER1 INTERRUPT
        RETI
        ORG     0023H       ;SERIAL INTERRUPT
        RETI

RESET:  MOV     R0,#00H
        DJNZ    R0,$        ;WAIT
        CLR     CHK_BIT
        MOV     SP,#40H

        MOV     A,TMOD
        ANL     A,#11110000B
        CLR     ACC.3       ;GATE=0
        CLR     ACC.2       ;C/T=0
        CLR     ACC.1       ;TIMER0 M1=0
        SETB    ACC.0       ;TIMER0 M0=1
        MOV     TMOD,A
        MOV     TH0,#(65536-COUNT)/256
        MOV     TL0,#(65536-COUNT).MOD.256
        CLR     TF0         ;CLEAR TF0
        SETB    TR0
        SETB    PT0
        SETB    ET0         ;ENABLE TIMER0 INTRRUPT
        SETB    EA          ;ENABLE SYSTEM INTERRUPT

LOOP:   SJMP    LOOP

;TF0=1
INT_TIMER0
        CPL     CHK_BIT
        CLR     TF0         ;CLEAR TF0
        MOV     TH0,#(65536-COUNT)/256
        MOV     TL0,#(65536-COUNT).MOD.256
        RETI