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

📄 f16std0.asm

📁 16点阵屏单片机程序
💻 ASM
字号:
;f16std0  16点阵屏旧通讯协议标准程序 可用89c51
;15H      本机地址
;18H	  接收数据的校验和
;r5		接收的第几字节计数
;R6      将接收的指令记住,用于最后的数据应答
          ORG    0000H
          JMP    MAIN
          ORG    000BH	;INT0  外部中断0服务程序
          JMP    SMXS
          ORG    0023H	; 通讯中断服务程序
          JMP    REC
          ORG    0030H
MAIN:     CLR    P3.2		;(int0)收发切换
          MOV    SCON,   #0F0H
          MOV    TMOD,   #21H
          MOV    TL1,    #0F6H
          MOV    TH1,    #0F6H
          SETB   TR1
          SETB   PT0
          MOV    SP,     #63H
          MOV    TL0,    #00H
          MOV    TH0,    #00H
          MOV    IE,     #92H

          CALL   CLP
          MOV    2FH,    #00H
          MOV    2EH,    #02H
          MOV    R4,     #00H
          MOV    14H,    #00H
          MOV    2AH,    #00H
          CLR    P3.4
          CLR     INT1
          CLR     INT1
          SETB    INT1
          SETB    INT1
          MOV    15H,    P2
          SETB   P3.4

          SETB   TR0
          MOV    R2,     #10H

;ADDED
          MOV   a,#30h
PRE_SEE:
	  mov 	29h,#04h
          mov   28h,29h
	  ;mov	a,#31h
          mov     r5,	#02h
          MOV     1AH,     #15H
ADYL2:    lcall 	XNM
          inc	r5
          DJNZ    1AH,     ADYL2
          MOV     14H,     #00H
          MOV     2AH,     #00H
          MOV     R4,      #00H
          MOV     R3,      #07H
          CLR     27H.4
          SETB    2AH.1
          MOV     1AH,     #0FFH         ;数据延时
ADYL14:    MOV     19H,     #0FFH
          DJNZ    19H,     $
          DJNZ    1AH,     ADYL14

          mov 	29h,#05h
          mov   28h,29h
	  ;mov	a,#31h
          mov     r5,	#02h
          MOV     1AH,     #15H
ADYL3:    lcall 	XNM
          inc	r5
          DJNZ    1AH,     ADYL3

          MOV     14H,     #00H
          MOV     2AH,     #00H
          MOV     R4,      #00H
          MOV     R3,      #07H
          CLR     27H.4
          SETB    2AH.1

          mov     r5,      #05h
ADYL5:    MOV     1AH,     #0FFH         ;数据延时
ADYL4:    MOV     19H,     #0FFH
          DJNZ    19H,     $
          DJNZ    1AH,     ADYL4
          DJNZ    r5,      ADYL5
          INC     a
          INC     a
          CJNE   a,  #3aH , PRE_SEE
          CALL   CLP
;End ADDED
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MAL5:     JMP    MAL5
;**************************************
SMXS:     PUSH   ACC
          PUSH   P1
          PUSH   P2
          PUSH   01H
          SETB   P3.5
          CLR    P1.0
          SETB   T1                   ;SCAN HC161 COUNT (FROM 00 TO 15)

          CJNE   R2,     #10H,   SML1
          MOV    R2,     #00H
          CLR    INT1                 ;\
          CLR    INT1                 ; | CLEAR HC161
          SETB   INT1                 ;/
          MOV    08H,    #00H

SML1:     CLR    P1.4
          CLR     P1.5
          CLR     P1.6
          SETB    P1.7
          MOV    P2,     2FH
          MOV    0AH,    #10H
          MOV    R0,     08H
SML2:     MOVX   A,      @R0
          INC    R0
          DJNZ   0AH,    SML2

          SETB    P1.5
          MOV    P2,     2EH
          MOV    0AH,    #10H
          MOV    R0,     08H
SML3:     MOVX   A,      @R0
          INC    R0
          DJNZ   0AH,    SML3
          MOV    08H,    R0
                CLR     P1.7

          MOV    P2,     R2           ;SCAN
          CLR    P3.5
          SETB   P1.0
          CLR    T1
          MOV    TL0,    #00H
          MOV    TH0,    #0FCH
          CJNE   R2,      #00H,    SML4
          JNB    2AH.0,   SML4
          MOV    17H,     #00H
          CALL   DNM

SML4:     JNB    2AH.1,   SML5
          CALL   DNM1

SML5:     JNB    2AH.2,   SML6
          CALL   MOVE

SML6:     INC    R2
          POP    01H
          POP    P2
          POP    P1
          POP    ACC
          RETI
REL17:    SETB    SM2
          JMP     REL7
;**************************************
REC:      PUSH    ACC		; 通讯中断服务程序
          PUSH    PSW
          MOV     A,      SBUF
          CLR     RI
          JNB     RB8,    REL0	;是数据则转
          CJNE    A,      15H,     REL17	;地址错
          SETB    P3.2		;(int0)收发切换--发射
          MOV     1AH,    #15H			;#06H  应答前的延时
DYL1:     MOV     19H,    #0FFH
          DJNZ    19H,    $
          DJNZ    1AH,    DYL1
;          SETB    P3.2		;(int0)收发切换--发射
          clr	  TB8		;SETB    TB8
          MOV     SBUF,    A
          JNB     TI,      $
          CLR     P3.2		;(int0)收发切换--接收
          CLR     TI
          CLR     TB8
          CLR     SM2		;数据接收状态
          MOV     R5,      #00H
          JMP     REL7
REL0:     CJNE    R5,      #00H,  REL5 ;如果不是接收的第一个字节,则转
          INC     R5                   ;如果是第一个字节,为命令字
          MOV     R6,      A	;将接收的指令记住,用于最后的数据应答
          MOV     18H,     A
          CJNE    A,       #01H,  REL1	;01--上行
          MOV     29H,     #04H
          JMP     REL7
REL1:     CJNE    A,       #02H,  REL2  ;02--下行
          MOV     29H,     #05H
          JMP     REL7
REL2:     CJNE    A,       #03H,  REL7  ;清屏
          MOV     R6,      A
          CALL    CLP                   ;清屏函数
          SETB    SM2
          JMP     DYL5
REL5:     INC     R5			;第二字节开始为数据
          CJNE    R5,      #12H,   REL6 ;第#2~#11H个字节为10个数据
          SETB    SM2                   ;切换回地址接收状态;第#12h个为校验和
          MOV     28H,     29H
          CJNE    A,       18H,    REL7 ;校验和错不应答

DYL5:     SETB    P3.2			;(int0)收发切换
          MOV     1AH,     #15H         ;数据应答前延时#06H
DYL2:     MOV     19H,     #0FFH
          DJNZ    19H,     $
          DJNZ    1AH,     DYL2
;DYL5:     SETB    P3.2			;(int0)收发切换
          clr	  TB8 	   ;SETB    TB8  数据应答
          MOV     SBUF,    R6
          MOV     14H,     #00H
          MOV     2AH,     #00H
          MOV     R4,      #00H
          MOV     R3,      #07H
          CLR     27H.4
          JNB     TI,      $
          SETB    2AH.1
          CJNE    R6,      #03H,    REL9
          CLR     2AH.1
REL9:     CLR     P3.2		;(int0)收发切换
          CLR     TB8
          CLR     TI
          JMP     REL7
REL6:     CALL    XNM
          ADD     A,       18H	;计算校验和
          MOV     18H,     A
REL7:     POP     PSW
          POP     ACC
          RETI
;*************************************
XNM:      CLR     P1.0
          MOV     P2,     29H
          MOV     R1,     05H
          DEC     R1
          DEC     R1
          MOVX    @R1,    A
          SETB    P1.0
          RET
;*************************************
MOVE:     CLR     P1.0
          INC     17H
          MOV     P2,     #08H
          JNB     28H.0,  MOL1
          SETB    P2.0
MOL1:     MOV     R0,     17H
          MOVX    A,      @R0
          RLC     A
          MOVX    @R0,    A
          DEC     R0
          MOVX    A,     @R0
          RLC     A
          MOVX    @R0,   A
          INC     17H

          MOV     P2,    2FH
          JNB     28H.0, MOL2
          MOV     P2,    2EH
MOL2:     MOV     0AH,   #10H
          MOV     R0,    08H
MOL3:     DEC     R0
          MOVX    A,     @R0
          RLC     A
          MOVX    @R0,   A
          DJNZ    0AH,   MOL3
          SETB    P1.0
          RET
;************************************
DNM:      INC     R3
          JNB     27H.4,  DNL0
          CJNE    R3,     #10H,     DNL4
          JMP     DNL6
DNL0:     CJNE    R3,     #08H,     DNL4
DNL6:     CLR     P1.0
          MOV     R3,     #00H
          MOV     P2,     28H
          MOV     R0,     04H
          MOVX    A,      @R0
          MOV     2BH,    A
          JNB     2BH.7,  DNL2
          INC     R0
          MOVX    A,       @R0
          MOV     2CH,     A
          CALL    QDZ
          JMP     DNL3
DNL2:     CALL    QDZ1
DNL3:     SETB    P1.0
          MOV     04H,    R0
          INC     R4
          CALL    DZK
          SETB    2AH.2
          CJNE    R4,     #11H,   DNL8
DNL8:     JC      DNL4
          MOV     2AH,    #00H
DNL4:     RET
;************************************
DNM1:     CLR     P1.0
          MOV     P2,     28H
          MOV     R0,     04H
          MOVX    A,      @R0
          MOV     2BH,    A
          JNB     2BH.7,  DN1L2
          INC     R0
          MOVX    A,      @R0
          MOV     2CH,    A
          CALL    QDZ
          JMP     DN1L3
DN1L2:    CALL    QDZ1
DN1L3:    SETB    P1.0
          MOV     04H,    R0
          CALL    DZK1
          INC     R4
          CJNE    R4,     #10H,   DN1L9
DN1L9:    JC      DN1L5
          MOV     2AH,    #00H
          JB      28H.0,  DN1L4
          CPL     2FH.0
          JMP     DN1L5
DN1L4:    CPL     2EH.0
DN1L5:    RET
;************************************
;  2BH-2DH    2BH=GB1,   2CH=GB2
;  ADDR:      2DH,2CH,2BH
;************************************
QDZ1:     MOV     A,       2BH
          MOV     B,       #10H
          MUL     AB
          MOV     2BH,     A
          MOV     A,       B
          ADD     A,       #0A0H
          MOV     2CH,     A
          MOV     2DH,     #00H
          CLR     27H.4
          RET
;***************************************
;  2BH-2DH    2BH=GB1,   2CH=GB2
;  ADDR:      2DH,2CH,2BH
;***************************************
QDZ:      CLR     C
          MOV     A,     2CH
          SUBB    A,     #0A1H
          MOV     2CH,    A
          CLR     C
          MOV     A,     2BH
          SUBB    A,     #0A1H
          MOV     B,     #5EH
          MUL     AB
          CLR     C
          ADD     A,     2CH
          JNC     QDL1
          INC     B
QDL1:     MOV     2CH,    B
          MOV     B,      #20H
          MUL     AB
          MOV     2BH,    A
          MOV     2DH,    B
          MOV     A,      2CH
          MOV     B,      #20H
          MUL     AB
          CLR     C
          ADD     A,      2DH
          MOV     2CH,    A
          JNC     QDL2
          INC     B
QDL2:     MOV     2DH,    B
          SETB    27H.4
          RET
;*****************************************
DZK:      MOV    C,       2DH.0
          MOV    P1.1,    C
          MOV    C,       2DH.1
          MOV    P1.2,    C
          MOV    DPH,     2CH
          MOV    DPL,     2BH
          MOV    R1,      #40H
          MOV    10H,     #20H
          JB     27H.4,   DZL0
          MOV    10H,     #10H
DZL0:    ; CLR    P3.3
          CLR     P1.4
          CLR     P1.5
          SETB    P1.6
          SETB    P1.7
DZL1:     MOVX   A,       @DPTR
          MOV    @R1,     A
          INC    DPTR
          INC    R1
          JB     27H.4,   DZL2
          INC    R1
DZL2:     DJNZ   10H,     DZL1
         ; SETB   P3.3
          CLR    P1.7
          MOV    R1,      #40H
          MOV    R0,      #00H
          MOV    10H,     #20H
          MOV    P2,      #08H
          JNB    28H.0,   DZL9
          SETB   P2.0
DZL9:     CLR    P1.0
DZL3:     MOV    A,       @R1
          MOVX   @R0,     A
          INC    R0
          INC    R1
          DJNZ   10H,     DZL3
          SETB   P1.0
          RET
;********************************************
DZK1:     MOV    C,       2DH.0
          MOV    P1.1,    C
          MOV    C,       2DH.1
          MOV    P1.2,    C
          MOV    DPH,     2CH
          MOV    DPL,     2BH
          MOV    R1,      #40H
          MOV    10H,     #20H
          JB     27H.4,   DZ1L0
          MOV    10H,     #10H
DZ1L0:   ; CLR    P3.3
          CLR     P1.4
          CLR     P1.5
          SETB    P1.6
          SETB    P1.7
DZ1L1:    MOVX   A,       @DPTR
          MOV    @R1,     A
          INC    DPTR
          INC    R1
          DJNZ   10H,     DZ1L1
          ;SETB   P3.3
          CLR     P1.7
          MOV    R1,      #40H
          MOV    R0,      14H
          MOV    P2,      2FH
          JNB    28H.0,   DZ1L4
          MOV    P2,      2EH
DZ1L4:    CPL    P2.0
          JNB    27H.4,   DZ1L3
          MOV    10H,     #10H
          CLR    P1.0
DZ1L5:    MOV    13H,     #02H
DZ1L6:    MOV    A,       @R1
          MOVX   @R0,     A
          INC    R0
          INC    R1
          DJNZ   13H,     DZ1L6
          MOV    A,       R0
          ADD    A,       #0EH
          MOV    R0,      A
          DJNZ   10H,     DZ1L5
          SETB   P1.0
          INC    14H
          INC    14H
          JMP    DZ1L8
DZ1L3:    MOV    10H,      #10H
          CLR    P1.0
DZ1L7:    MOV    A,       @R1
          MOVX   @R0,     A
          INC    R1
          MOV    A,       R0
          ADD    A,       #10H
          MOV    R0,      A
          DJNZ   10H,     DZ1L7
          SETB   P1.0
          INC    14H
DZ1L8:    RET
;********************************************
CLP:      CLR    P1.0 			;清屏函数
          MOV    DPTR,   #00H
          MOV    A,      #00H
CLL1:     MOVX   @DPTR,  A
          INC    DPTR
          MOV    R7,     DPH
          CJNE   R7,     #04H,    CLL1
          SETB   P1.0
          RET
;********************************************
          END

⌨️ 快捷键说明

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