⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intr6.asm

📁 本文件包包括8051彻底研究书籍各章的实例源代码
💻 ASM
字号:
;PROGRAM NAME:INTR6.ASM
;TEST SERIAL INTERRUPT(MODE 1)
;
COUNT   EQU     9217    ;10mS FOR XTAL=11.0592MHz
;
DIGIT1  REG     P1.4
DIGIT2  REG     P1.5
LED     REG     P3.7
;
DISP    EQU     30H
SEC     EQU     31H
O_CNT   EQU     32H
;
O_TRUE  REG     20H.0
;
        ORG     0000H
        LJMP    RESET
        ORG     0003H           ;INT0 INTERRUPT
        RETI
        ORG     000BH           ;TIMER0 INTERRUPT
        LJMP    INT_TIMER0
        ORG     0013H           ;INT1 INTERRUPT
        RETI
        ORG     001BH           ;TIMER1 INTERRUPT
        RETI
        ORG     0023H           ;SERIAL INTERRUPT
        LJMP    SERIAL
;
RESET   MOV     R0,#00H
        DJNZ    R0,$    ;WAIT
        MOV     DISP,#00H       ;DISPLAY '0''0'
        MOV     SEC,#00H
        MOV     SP,#40H
;
        MOV     A,#00100001B
        MOV     TMOD,A
;TIMER0 IN MODE 1:16-BIT COUNT
        MOV     TH0,#(65536-COUNT)/256
        MOV     TL0,#(65536-COUNT).MOD.256
        CLR     TF0     ;CLEAR TF0
        SETB    TR0
;
;TIMER1 IN MODE 2:8-BIT AUTO RELOAD MODE
        MOV     TH1,#FDH
        SETB    TR1     ;TIMER1 START
;
        MOV     SCON,#01000000B
        SETB    REN     ;RECEIVE ENABLE
;
;TIMER0 SETTING
        SETB    PT0
        SETB    ET0     ;ENABLE TIMER0 INTURRUPT
;
        CLR     RI
        CLR     TI
        SETB    ES      ;ENABLE SERIAL INTERRUPT
;
        SETB    EA      ;ENABLE SYSTEM INTERRUPT
;
LOOP    LCALL   LDELAY
        LCALL   LDELAY
;
        MOV     A,DISP
        ADD     A,#01H
        DA      A
        MOV     DISP,A  ;DISP=DISP+1 (PLUS DAA)
;
        MOV     O_CNT,#00H
        SETB    O_TRUE
        SETB    TI
        SJMP    LOOP    ;WAITTING
;
TABLE   DB      ' ','H','E','L','L','O',0DH,0AH
;
SERIAL  JNB     TI,NO_DATA
        JNB     O_TRUE,NO_DATA
;TI=1 AND O_TRUE=1
        CLR     TI
        MOV     A,O_CNT
        INC     O_CNT   ;OUT_CNT=O_CNT+1
        MOV     DPTR,#TABLE
        MOVC    A,@A+DPTR
        MOV     SBUF,A
        CJNE    A,#0AH,NO_DATA
        MOV     O_CNT,#00H
        CLR     O_TRUE
NO_DATA
        RETI
;
;TF0=1
INT_TIMER0
        CLR     TF0     ;CLEAR TF0
        MOV     TH0,#(65536-COUNT)/256
        MOV     TL0,#(65536-COUNT).MOD.256
        INC     SEC             ;SEC=SEC+1
        MOV     A,SEC           ;CHECK SEC>=100?
        CJNE    A,#100,$CHK1    ;A-100
$CHK1   JC      $NEXT
        MOV     SEC,#00H        ;SEC=0
;
$NEXT   MOV     A,SEC
        CJNE    A,#40,$CHK2
$CHK2   JNC     OVER
        SETB    LED             ;LED ON
        SJMP    DISPLAY
OVER    CLR     LED
;
DISPLAY MOV     A,DISP
        ANL     A,#00001111B    ;GET LOW NIBBLES
        SETB    ACC.5           ;BIT5,BIT4=10
        MOV     P1,A
        ACALL   DELAY
;ADD EXTRA PART
        CLR     P1.4
        CLR     P1.5
        ACALL   DELAY
;
        MOV     A,DISP
        SWAP    A
        ANL     A,#00001111B
        SETB    ACC.4           ;BIT5,BIT4=01
        MOV     P1,A
        ACALL   DELAY
        CLR     P1.4
        CLR     P1.5
        RETI
;
DELAY   MOV     R7,#80H
        DJNZ    R7,$
        RET
;
LDELAY  MOV     R1,#00H
$R0     MOV     R0,#00H
        DJNZ    R0,$
        DJNZ    R1,$R0
        RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -