vdr2(0823).asm

来自「8051单片机汇编程序」· 汇编 代码 · 共 496 行

ASM
496
字号
                            
SWITCHTIME    EQU       4BH
ADRECDATA     EQU       70H
ADSHOWDATA    EQU       60H
SWITCHDATA    EQU       4CH
NEWDATA       EQU       4DH

              ORG       0000H
              LJMP      MAIN
              ORG       000BH
              LJMP      TIME0
              ORG       0023H
              LJMP      RECEIVE
              ORG       0100H
;************************************************************************************
;*************************************6***********************************************
MAIN:
                MOV          P0,#0FFH
                LCALL        DOG
                LCALL        CHECK

                LCALL        INITIAL
                MOV          R6,#00H
                MOV          SWITCHDATA,#00H       ;判断接受到的数据是否正确,00H正确,FFH,错误
                MOV          SWITCHTIME,#00H       ;判断时间是否超过4秒而没有接受到数据,50H
                MOV          NEWDATA,#00H          ;判断是否已经接受到数据 00H,没有新数据
MA0:            NOP
                LCALL        ALARM
                LCALL        SHOW
                LJMP         MA0

                RET
;*************************************************************************************
;*************************************************************************************
CHECK:          MOV       R7,#03H
                MOV       A,#55H   ;1010 1010
                NOP
UNITLAMP:       MOV      R5,#18H
MOVEMENT:       MOV      C,ACC.7
                RL       A
                MOV      P1.0,C           ;数据位
                CLR      P1.1
                SETB     P1.1           ;一次脉冲
                DJNZ     R5,MOVEMENT
                LCALL    DELAY

                MOV      R5,#18H
                SETB     P1.0           ;数据位
MMENT:          CLR      P1.1
                SETB     P1.1           ;一次脉冲
                DJNZ     R5,MMENT
                LCALL    DELAY
                DJNZ     R7,UNITLAMP

                MOV      R7,#03H
                MOV       A,#0AAH   ;0101 0101
                NOP
ULAMP:          MOV      R5,#18H
MOVERED:        MOV      C,ACC.7
                RL       A
                MOV      P1.0,C           ;数据位
                CLR      P1.1
                SETB     P1.1           ;一次脉冲
                DJNZ     R5,MOVERED

                MOV      P0,#00H
                MOV      P2,#0FFH
                LCALL    DELAY

                MOV      R5,#18H
                SETB     P1.0           ;数据位
MMENTRED:       CLR      P1.1
                SETB     P1.1           ;一次脉冲
                DJNZ     R5,MMENTRED

                MOV      P0,#0FFH
                MOV      P2,#0FFH

                LCALL    DELAY
                DJNZ     R7,ULAMP

                RET


;**************************************************************************************
;***************************************************************************************
INITIAL:
      LCALL        DOG
      MOV     TH0,#03CH    ;时间中断每次0。05秒,每4秒钟没收到数据就显示小数点循环
      MOV     TL0,#0AFH
      MOV     TMOD,#21H    ;设置波特率9600B/S
      MOV     SCON,#50H
      MOV     PCON,#00H
      MOV     TH1,#0FDH
      MOV     TL1,#0FDH
      CLR     ES
      SETB    ET0
      SETB            ES              ;开放串口中断
      SETB            EA              ;开放中断
      SETB            TR1             ;打开定时器T1
      SETB            TR0
      NOP
      RET
;****************************************************************************************
;***************************************************************************************
SHOW: NOP
      LCALL     SHOWLED
      LCALL     SHOWLAMP
      RET
;****************************************************************************************
;****************************************************************************************
SHOWLED:

      MOV       P2,#00H
      MOV       A,64H
      CLR       C
      ANL       A,#0FH
      MOV       DPTR,#TABNUM
      MOVC      A,@A+DPTR
      CPL       A
      MOV       P0,A
      SETB      P2.4
      CLR       P2.4

      MOV       A,65H
      CLR       C
      ANL       A,#0FH
      MOV       DPTR,#TABNUM
      MOVC      A,@A+DPTR
      CPL       A
      MOV       P0,A
      SETB      P2.3
      CLR       P2.3

      MOV       A,66H
      ANL       A,#0FH
      MOV       DPTR,#TABNUM
      MOVC      A,@A+DPTR
      CPL       A
      MOV       P0,A
      SETB      P2.2
      CLR       P2.2

      MOV       A,67H
      ANL       A,#0FH
      MOV       DPTR,#TABNUM
      MOVC      A,@A+DPTR
      CPL       A
      MOV       P0,A
      SETB      P2.1
      CLR       P2.1

      MOV       A,68H
      ANL       A,#0FH
      MOV       DPTR,#TABNUM
      MOVC      A,@A+DPTR
      CPL       A
      MOV       P0,A
      SETB      P2.0
      CLR       P2.0
      LCALL        DOG
      RET
;********************************************************************************************
;****************************************************************************************
SHOWLAMP:
      MOV       R4,#08H
      MOV       A,6BH
CIRC1:NOP
      MOV       C,ACC.7
      MOV       P1.0,C
      CLR       P1.1
      SETB      P1.1
      RL        A
      DJNZ      R4,CIRC1

      MOV       R4,#08H
      MOV       A,6AH
CIRC2:NOP
      MOV       C,ACC.7
      MOV       P1.0,C
      CLR       P1.1
      SETB      P1.1
      RL        A
      DJNZ      R4,CIRC2
      MOV       R4,#08H
      MOV       A,69H
CIRC3:NOP
      MOV       C,ACC.7
      MOV       P1.0,C
      CLR       P1.1
      SETB      P1.1
      RL        A
      DJNZ      R4,CIRC3
      LCALL     DELAY
      LCALL        DOG
      RET


;**************************************************************************************
;*************************************************************************************
ALARM:
                NOP
                MOV      A,NEWDATA
                CJNE     A,#00H,CHTIME
                LCALL    SHOWPOINT
                LJMP     ALARM
CHTIME:         MOV      A,SWITCHTIME
                CLR      C
                SUBB     A,#050H
                JC       NOTALARM
                LCALL    SHOWPOINT         ;显示小数点循环
                LJMP     ALARM
NOTALARM:       LCALL        DOG
                NOP

                RET

;*****************************************************************************************
;***************************************************************************************
SHOWPOINT:      NOP
                MOV     P0,#0FFH    ;CLEAR LED
                MOV     P2,#0FFH
                MOV     P2,#00H

                MOV      R4,#18H
BLACK:          NOP
                SETB     P1.0
                CLR      P1.1
                SETB     P1.1
                DJNZ     R4,BLACK

                MOV      P2,#00H
                MOV      P0,#7FH

                CLR      P1.0
                CLR      P1.1
                SETB     P1.1
                SETB     P1.0
                CLR      P1.1
                SETB     P1.1

                SETB     P2.0
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.0
                MOV      P0,#7FH
                SETB     P2.1
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1


                MOV      P0,#0FFH
                CLR      P2.1
                MOV      P0,#7FH
                SETB     P2.2
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.2
                MOV      P0,#7FH
                SETB     P2.3
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.3
                MOV      P0,#7FH
                SETB     P2.4
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1
                LCALL    DELAYSHORT

                MOV      P0,#0FFH
                CLR      P2.4
                MOV      P0,#7FH


                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1


                MOV      P0,#7FH
                SETB     P2.0
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.0
                MOV      P0,#7FH
                SETB     P2.1
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.1
                MOV      P0,#7FH
                SETB     P2.2
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.2
                MOV      P0,#7FH
                SETB     P2.3
                LCALL    DELAYSHORT

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1

                MOV      P0,#0FFH
                CLR      P2.3
                MOV      P0,#7FH
                SETB     P2.4
                LCALL    DELAYSHORT
                NOP

                MOV      P0,#0FFH
                CLR      P2.4

                CLR      P1.1
                SETB     P1.1
                CLR      P1.1
                SETB     P1.1
                LCALL    DELAYSHORT
                LCALL        DOG

                RET

;*****************************************************************************************
;******************************************************************************************
TIME0:          NOP
                PUSH    A
                MOV     TH0,#03CH
                MOV     TL0,#0AFH
                INC     SWITCHTIME        ;每次0。05秒,4秒报警,即SWITCHTIME大于80
                MOV     A,SWITCHTIME
                CJNE    A,#0FFH,RE1
                MOV     A,#051H
                MOV     SWITCHTIME,A
RE1:            POP     A
                RETI

;*****************************************************************************************
;**********LANC RECEIVE INI SERVE PROGRAM*************************************************
RECEIVE:	   NOP
        PUSH       PSW
	PUSH       A
RETN:	JNB        RI,RETN
	CLR        RI
	MOV        A, SBUF
RECE1:  CJNE       A,#24H,RECE2
        MOV        R6,#00H
        MOV       SWITCHDATA,#00H
        MOV        R1,#ADRECDATA          ;FIRST CHAR $?
        MOV        @R1,A
        LJMP       RETURN
RECE2:  CJNE       R6,#01H,RECE3
        CJNE       A,#4CH,RETN1
        MOV        @R1,#4CH          ;SECORD CHAR L?
        LJMP       RETURN
RECE3:  CJNE       R6,#02H,RECE4
        CJNE       A,#45H,RETN1
        MOV        @R1,#45H          ;THRID CHAR E?
        LJMP       RETURN
RECE4:  CJNE       R6,#03H,RECE13
        CJNE       A,#44H,RETN1
        MOV        @R1,#44H          ;FOUR CHAR D?
        LJMP       RETURN

RECE13:  CJNE       R6,#0CH,RECE14
        CJNE       A,#0DH,RETN1
        MOV        @R1,#0DH          ;13 CHAR <CR> ?
        LJMP       RETURN
RECE14:  CJNE       R6,#0DH,OTHER
        CJNE       A,#0AH,RETN1
        MOV        @R1,#0AH          ; CHAR <LF>?
        LCALL      SAVEDATA                 ;如果接受正常,将数据存入显示RAM,否则不管
        LJMP       RETURN
OTHER:  MOV        @R1,A
        LJMP       RETURN

RETN1:  MOV       SWITCHDATA,#0FFH
RETURN: NOP
        INC       R6
        INC       R1
        CJNE      R6,#0EH,RELOOP
        MOV       R6,#00H
        MOV       R1,#ADRECDATA
RELOOP:
        POP       A
        POP       PSW
        RETI

;****************************************************************************************
;****************************************************************************************
SAVEDATA:
        MOV      R0,SWITCHDATA
        CJNE     R0,#00H,NOTSAVE
        MOV       60H,70H
        MOV       61H,71H
        MOV       62H,72H
        MOV       63H,73H
        MOV       64H,74H
        MOV       65H,75H
        MOV       66H,76H
        MOV       67H,77H
        MOV       68H,78H
        MOV       69H,79H
        MOV       6AH,7AH
        MOV       6BH,7BH
        MOV       6CH,7CH
        MOV       6DH,7DH                      ;接受到正确数据SWITCHTIME归0
        MOV       SWITCHTIME,#00H              ;没有收到数据和收到无效的数据看作一种情况。
        MOV       NEWDATA,#0FFH                ;>于4秒均报警
NOTSAVE:NOP
        MOV       SWITCHDATA,#00H
        RET
;*****************************************************************************************
;*****************************************************************************************
DELAYSHORT:
        NOP
        NOP
        MOV     R4,#01H
DELY0:  MOV     R3,#0FFH
DELY1:  MOV     R2,#0FFH
DELY2:  NOP
        DJNZ    R2,DELY2
        DJNZ    R3,DELY1
        LCALL   DOG
        DJNZ    R4,DELY0

        RET
;****************************************************************************************
;*****************************************************************************************
DELAY:
        NOP
        NOP
        MOV     R4,#03H
DEL0:   MOV     R3,#0FFH
DEL1:   MOV     R2,#0FFH
DEL2:   NOP
        DJNZ    R2,DEL2
        DJNZ    R3,DEL1
        LCALL   DOG
        DJNZ    R4,DEL0

        RET
;***********WATCHDOG****************
DOG:	       CPL      P1.7
	       NOP
	       CPL      P1.7
               RET


TABNUM:  DB   3FH,06H,5BH,4FH,66H,6DH,7DH,07H
         DB   7FH,6FH,77H,7CH,39H,5EH,79H,71H

⌨️ 快捷键说明

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