51单片机汇编语言定时器的使用(中断方式)

用汇编语言写51单片机的程序:
(1)选择定时器T1为工作方式1,产生100ms定时,使P2口的八个发光二极管循环点亮。
(2)选择定时器T1为工作方式2,产生100ms定时,使P2口的八个发光二极管循环点亮。
12MHz晶振

(1)
COUNT_INT    EQU 30H
LEDVALUE    EQU 31H
    ORG 0000H
    LJMP START
    ORG 001BH
    LJMP Timer1Interrupt

START:
    MOV SP,#60H
    MOV COUNT_INT,#0 
    MOV LEDVALUE,#01H
    LCALL InitTimer1

LOOP:
     MOV A,LEDVALUE
     MOV P2,A
    LJMP LOOP

InitTimer1:
    MOV TMOD,#10H;定时器T1为工作方式1,产生50ms定时
    MOV TH1,#3CH
    MOV TL1,#0B0H
    SETB EA
    SETB ET1
    SETB TR1
    RET

Timer1Interrupt:
    PUSH DPH
    PUSH DPL
    PUSH ACC
    MOV TH1,#3CH
    MOV TL1,#0B0H
    ;========================
     INC COUNT_INT
     MOV A,COUNT_INT;每50ms加1,
     CJNE A,#2,Timer1Interrupt_EXIT;100ms
     MOV COUNT_INT,#0
     MOV A,LEDVALUE
     RL A
     MOV LEDVALUE,A
     ;========================
Timer1Interrupt_EXIT:    
    POP ACC
    POP DPL
    POP DPH
    RETI

END

(2)
COUNT_INT_L    EQU 30H
COUNT_INT_H    EQU 31H
LEDVALUE    EQU 32H
    ORG 0000H
    LJMP START
    ORG 001BH
    LJMP Timer1Interrupt

START:
    MOV SP,#60H
    MOV COUNT_INT_L,#0 
    MOV COUNT_INT_H,#0
    MOV LEDVALUE,#01H
    LCALL InitTimer1

LOOP:
     MOV A,LEDVALUE
     MOV P2,A
    LJMP LOOP

InitTimer1:
    MOV TMOD,#20H;定时器T1为工作方式2,产生250us定时
    MOV TH1,#00H
    MOV TL1,#06H
    SETB EA
    SETB ET1
    SETB TR1
    RET

Timer1Interrupt:
    PUSH DPH
    PUSH DPL
    PUSH ACC
    MOV TH1,#00H
    MOV TL1,#06H
    ;========================
     INC COUNT_INT_L
     MOV A,COUNT_INT_L;每250us加1,
     CJNE A,#40,Timer1Interrupt_EXIT;250US*40=10ms
     MOV COUNT_INT_L,#0
     INC COUNT_INT_H
     MOV A,COUNT_INT_H;每10Ms加1,
     CJNE A,#10,Timer1Interrupt_EXIT;10ms*10=100MS
     MOV COUNT_INT_H,#0
     MOV A,LEDVALUE
     RL A
     MOV LEDVALUE,A
     ;========================
Timer1Interrupt_EXIT:    
    POP ACC
    POP DPL
    POP DPH
    RETI

END

温馨提示:答案为网友推荐,仅供参考
相似回答