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

📄 suidao light.asm

📁 本程序使用STC单片机控制隧道灯具
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                 INC DPTR
                 CPL    DOG
                 DJNZ R0,ZZZ
                 MOV  A,R0_NUM
                 MOV  R0,A


                 LCALL   FLAT
                 POP    DPH
                 POP    DPL
                 RET



SENDNUM: ;NOP    ;确定6B595 NOP 或HC595 CPL A
         MOV   SEND_NUM,A
         MOV   A,R6
         MOV   JISHU_NUM,A
         MOV   A,SEND_NUM
         CPL   DOG
         CPL A
         CLR     XTXD
         MOV     R6,#08
DISPLP :RLC     A      ;RRC  A         ;确定先移高位或低位
	MOV     XDAT,C
	SETB    XTXD
	NOP
	CLR     XTXD
	DJNZ    R6,DISPLP

	MOV     A,JISHU_NUM
        MOV     R6,A
	RET
 FLAT:   CLR XLAT
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       SETB XLAT
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       CLR  XLAT
       RET


       TABL1:DB 0FFH ;1-72路初始亮灯方案 ,灯亮,调光方案未给出
             DB 0FFH
             DB 0FFH
             DB 0FFH
             DB 0FFH
             DB 0FFH
             DB 0FFH
             DB 0FFH
             DB 0FFH


;TABL2 是时段方案表
       TABL2: DB 01H,55H,06H,00H
              DB 02H,0AAH,08H,30H
              DB 03H,55H,10H,30H
              DB 04H,0AAH,12H,30H
              DB 05H,55H,14H,00H
              DB 06H,0AAH,16H,00H
              DB 07H,55H,18H,00H
              DB 08H,0AAH,21H,30H
              ;时段序号,方案,小时,分钟

;

     BINBCD:    PUSH B     ;二进制与BCD码转换子程序,以寄存器A为接口
                MOV B,#64H
                DIV AB
                MOV A,B
                MOV B,#0AH
                DIV AB
                SWAP A
                ADD A,B
                POP B
                RET

    BCDBIN:     PUSH B    ;BCD码与二进制转换子程序,以寄存器A为接口
                XCH A,R5
                PUSH ACC
                MOV A,R5
                SWAP A
                ANL A,#0FH
                MOV B,#0AH
                MUL AB
                XCH A,R5
                ANL A,#0FH
                ADD A,R5
                MOV R5,A
                POP B
                POP ACC
                XCH A,R5
                RET




;
S_PORT: PUSH    DPH
	PUSH    DPL
	PUSH    ACC
	PUSH    B
	PUSH    PSW
	SETB    RS1   ;以免影响主程序中寄存器值
	SETB    RS0

  JBC     TI,SPERR
	LCALL   SPIN
;	JC      SPERR
	CJNE    A,#55H,SPERR
	LCALL   SPIN
;	JC      SPERR
	CJNE    A,#0AAH,SPERR
	LCALL   SPIN
;	JC      SPERR
	CJNE    A,#0FFH,SPERR
	LCALL   SPIN
;	JC      SPERR
	CJNE    A,#LW_ADDR,SCRNOT2
	SJMP    SCRNOT1
SCRNOT2:CJNE    A,#0FFH,SCRNOT4;SCRNOT3
	SJMP    SCRNOT1
;SCRNOT3:MOV     A,#LW_ADDR
;	CJNE    A,#0FFH,SCRNOT4   ;FFH为广播机地址
;	SJMP    SCRNOT1
SCRNOT4:LJMP    EXITSP
SCRNOT1:
	LCALL   SPIN
;	JC      SPERR
	CJNE    A,#0FAH,REVSD

	MOV		DPTR,#SD_ADDR  ;接收时段
	MOV		R0,#SD_NUM
REVLOP: LCALL   SPIN
	MOVX    @DPTR,A
	INC     DPTR
        CPL	DOG
	DJNZ    R0,REVLOP
        NOP
        NOP
        NOP
        MOV     A,#55H       ;接收完成后回送时段表
	LCALL   SENDBYTE
	MOV     A,#0AAH
	LCALL   SENDBYTE
	MOV     A,#0FFH
	LCALL   SENDBYTE
	MOV     A,#LW_ADDR
	LCALL   SENDBYTE
	MOV     A,#0FAH
	LCALL   SENDBYTE
	MOV	DPTR,#SD_ADDR  ;回送时段
	MOV	R0,#SD_NUM
HSLOPP: MOVX    A,@DPTR
        LCALL   SENDBYTE
	INC     DPTR
        CPL	DOG
	DJNZ    R0,HSLOPP
;
SPERR:  LJMP     EXITSP
REVSD:	CJNE    A,#0FBH,REVHS  ;更改时间
        LCALL   SPIN
        MOV     B,A
        LCALL   SPIN
        PUSH    ACC
        LCALL   SPIN
        PUSH    ACC
        MOV DPTR,#000BH
        MOV A,#0A2H
        MOVX @DPTR,A
        MOV DPTR,#0004H  ;将小时值写入12887
        MOV A,B
        MOVX @DPTR,A
        MOV RHOUR,A
        MOV DPTR,#0000H ;将分钟值写入12887
        POP  ACC
        MOVX @DPTR,A
        MOV DPTR,#0002H
        POP  ACC
        MOVX @DPTR,A
        MOV RMINUTE,A
        MOV DPTR,#000BH
        MOV A,#22H
        MOVX @DPTR,A
        CPL		DOG
        MOV     A,#55H  ;回送修改时间以确认修改正确
	LCALL   SENDBYTE
	MOV     A,#0AAH
	LCALL   SENDBYTE
	MOV     A,#0FFH
	LCALL   SENDBYTE
	MOV     A,#LW_ADDR
	LCALL   SENDBYTE
	MOV     A,#0FBH
	LCALL   SENDBYTE
        MOV DPTR,#0004H  ;将小时值写入12887
                 ;MOV A,B
        MOVX A,@DPTR
        LCALL   SENDBYTE
        MOV DPTR,#0002H ;将分钟值写入12887
        MOVX A,@DPTR
        LCALL   SENDBYTE
        MOV DPTR,#0000H ;将分钟值写入12887
        MOVX A,@DPTR
        LCALL   SENDBYTE
        LJMP     EXITSP
REVHS:	CJNE    A,#0FCH,REVRET  ;要求控制机回送时段表
	MOV     A,#55H
	LCALL   SENDBYTE
	MOV     A,#0AAH
	LCALL   SENDBYTE
	MOV     A,#0FFH
	LCALL   SENDBYTE
	MOV     A,#LW_ADDR
	LCALL   SENDBYTE
	MOV     A,#0FCH
	LCALL   SENDBYTE
	MOV	DPTR,#SD_ADDR  ;回送时段
	MOV	R0,#SD_NUM
HSLOP:  MOVX    A,@DPTR
        LCALL   SENDBYTE
	INC     DPTR
        CPL	DOG
	DJNZ    R0,HSLOP
        LJMP     EXITSP
REVRET:	CJNE    A,#0FDH,REVGX  ;
        MOV	DPTR,#XS_ADDR  ;接收显示方案
	MOV	R0,#XS_NUM
REVLOPPP: LCALL   SPIN
	MOVX    @DPTR,A
	INC     DPTR
        CPL	DOG
	DJNZ    R0,REVLOPPP
        MOV	DPTR,#XS_ADDR  ;回送显示方案
	MOV	R0,#XS_NUM
HSLOPPPP: MOVX    A,@DPTR
        LCALL   SENDBYTE
	INC     DPTR
        CPL	DOG
	DJNZ    R0,HSLOPPPP
        LJMP     EXITSP
REVGX:  CJNE    A,#0FEH,EXITSP ;要求回送显示方案
        MOV     A,#55H
	LCALL   SENDBYTE
	MOV     A,#0AAH
	LCALL   SENDBYTE
	MOV     A,#0FFH
	LCALL   SENDBYTE
	MOV     A,#LW_ADDR
	LCALL   SENDBYTE
	MOV     A,#0FEH
	LCALL   SENDBYTE
	MOV	DPTR,#XS_ADDR  ;回送时段
	MOV	R0,#XS_NUM
HSLOPPP:MOVX    A,@DPTR
        LCALL   SENDBYTE
	INC     DPTR
        CPL	DOG
	DJNZ    R0,HSLOPPP
        ;MOV     A,TMSG ;判断当前为亮灯还是调光状态
        ;MOV     R4,A
        ;LCALL   JSSD
        ;INC     DPTR

        ;MOVX     A,@DPTR
        ;CJNE    A,#55H,LAB
       ;MOV      A,#00H
       ;LCALL   SENDBYTE
       ;LJMP     EXITSP
;LAB:   MOV      A,#0FFH
       ;LCALL   SENDBYTE

;
EXITSP: NOP
	POP     PSW
	POP     B
	POP     ACC
	POP     DPL
	POP     DPH
	RETI
;
SENDBYTE:;CLR  ES
        ;MOV  C,P
        ;MOV  TB8,C
        MOV  SBUF,A
WAIT:   JBC  TI,OUTS
        AJMP WAIT
OUTS:   ;SETB ES
        RET
;
;SENDBYTE2:CLR  TI
;        MOV  C,P
;        MOV  TB8,C
;        MOV  SBUF,A
;        CLR  RI
;        RET
;
SPIN:   MOV     R6,#80H
SPIN2:  MOV     R7,#0FFH
SPIN1:  JB      RI,SPIN0                ;WAITING RECEIVER
;	CLR     C
	DJNZ    R7,SPIN1
	DJNZ    R6,SPIN2
;	SETB    C
	RET
SPIN0:  MOV     A,SBUF
	CLR     RI
	RET
;
;	MOV     C,RB8           ;ODD/EVEN TEST
;	JC      SPINTS
;	ORL     C,P
;	RET
;SPINTS: ANL     C,P
;	CPL     C               ;IF C=0,THEN EVEN,CORRECT
;	RET                     ;   c=1, error
;*******************************************************
INCR0R1:CJNE    R0,#0FFH,INCR11
	MOV     R0,#00H
	INC     R1
	SJMP    INCR12
INCR11: INC     R0
INCR12: RET
;
;**********************************************
DECDPTR:PUSH    PSW              ;DPTR=DPTR-1
	XCH     A,DPL
	ADD     A,#0FFH
	XCH     A,DPL
	XCH     A,DPH
	ADDC    A,#0FFH
	XCH     A,DPH
	POP     PSW
	RET
;**********************************************
;计算时段条地址,R4为时段值
      JSSD:     MOV      DPTR,#SD_ADDR
               MOV      A,DPL
               CLR      C
               SUBB     A,#SD_LONG ;将SD_ADDR减4,是因为在下面的循环加法
               MOV      DPL,A      ;中,SD_ADDR至少会加一次
               MOV      A,DPH
               SUBB     A,#0
               MOV      DPH,A
      LL:      MOV      A,DPL
               CLR      C
               ADD      A,#SD_LONG
               MOV      DPL,A
               CLR      A
               ADDC     A,DPH
               MOV      DPH,A
               DJNZ     R4,LL          ;DPTR存储时段条地址
               RET
;**********************************************
                END

⌨️ 快捷键说明

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