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

📄 comok.asm

📁 一个点阵LED屏动态扫描显示的控制程序
💻 ASM
字号:
;**********************************************************
;  (485)   COMINIT   串行口中断子程序
;
;  使用第二组寄存器
;  R3 485 接收字符数
;  R4 485 接收帧长度数
;  R5 485 发送字符数
;  R6 485 发送帧字符总数
;**********************************************************
COMINIT:   PUSH   ACC
           PUSH   PSW
           PUSH   DPH
           PUSH   DPL
;
           SETB   RS0                 ; 使用第二组寄存器
           CLR    RS1                 ;
;
           JB     RI,COM_RXD          ; 接收中断
           JNB    TI,COMINIT0
           LJMP   COM_TXD             ; 发送中断
COMINIT0:  LJMP   COMEND
;
COM_RXD:   CLR    RI
           JNB    RB8,COM_RXDX
           CLR    C
           MOV    A,SBUF
           CJNE   A,#0F8H,COM_RXD04   ; 地址是否为下传地址?
           CLR    RB8                 ; 是 置接收数据帧状态
           SETB   biRXDDA           
           SETB   biF8FLG             ; 置下传地址状态
           LJMP   COMEND
;
;COM_RXD01: CJNE   A,#0FDH,COM_RXD02   ; 地址是否广播地址?
;           CLR    RB8                 ; 是 置接收数据帧状态
;           LJMP   COMEND
;
;COM_RXD02: CJNE   A,#0FBH,COM_RXD03   ; 地址是否叫号器广播地址?
;           CLR    RB8                 ; 是 置接收数据帧状态
;           LJMP   COMEND
;
;COM_RXD03: CJNE   A,#0FEH,COM_RXD04   ; 地址是否新挂设备地址?
;           ;**********
;           ;判断本机地址是否新挂设备  是发送新挂设备信息
;           LJMP   COMEND
;
COM_RXD04: SUBB   A,yCOMADR
           JNZ    COMEND              ; 地址是否本机地址?  否退出
;
;
COM_RXD1:  CLR    RB8                 ; 是 置接收数据帧状态
           SETB   biRXDDA
           LJMP   COMEND
;
;
;          接收信息帧 到0100H~01FFH
COM_RXDX:  JNB    biRXDDA,COMEND
           CLR    C
           MOV    A,SBUF
           MOV    R7,A                ; R7 接收字符暂存
           JB     biCOMPRO,COMEND     ; 接收等待处理    退出接收中断
           JB     biRXDFLG,COM_RXDX1
           CJNE   A,#0EAH,COMEND      ; 未接收帧状态  判断是否帧头 否放弃
           MOV    DPTR,#D_RXD485
           MOVX   @DPTR,A
           MOV    A,#01H
           MOV    R3,A                ; R3=接收字符数
;
           MOV    R4,#05H             ; 预置信息帧长度=5
           SETB   biRXDFLG
           SJMP   COMEND
;
COM_RXDX1: CLR    C
           MOV    A,R3
           CJNE   A,#01H,COM_RXDX10    ; 接收是否地址字节?
           JNB    biF8FLG,COM_RXDX10   ; 是否下传帧
           CLR    biF8FLG
           CLR    C
           MOV    A,R7
           SUBB   A,yCOMADR            ; 下传帧判是否本机地址  否 退出接收
           JNZ    COM_RXDX31
           MOV    A,R3
;
COM_RXDX10:MOV    DPL,A
           MOV    DPH,#01H
           MOV    A,R7                ; R7 接收字符暂存
           MOVX   @DPTR,A
           INC    R3
           CJNE   R3,#04H,COM_RXDX2
           ADD    A,#02H              ;
           MOV    R4,A                ; 写 帧信息长度+3=帧长度 ->R4
           SJMP   COMEND
COM_RXDX2: CLR    C
           MOV    A,R3                ; 接收帧字节数= 帧信息长度+3 ?   相等 接收帧完毕 待处理
           SUBB   A,R4
           JNZ    COM_RXDX3
           SETB   biCOMPRO            ; 置处理通讯帧标志=1
           SETB   RB8
           CLR    biRXDDA
           SJMP   COMEND
COM_RXDX3: CLR    C
           MOV    A,#31
           SUBB   A,R3
           JNC    COM_RXDX4           ; 接收字节数>32 ?    >32 清接收状态 重新接收
           CLR    C
COM_RXDX31:CLR    biRXDFLG
           SETB   RB8
COM_RXDX4: SJMP   COMEND
;
;
COMEND:    POP    DPL
           POP    DPH
           POP    PSW
           POP    ACC
           RETI
;
;
COM_TXD:   CLR    TI
           CLR    P1.4
           CLR    P1.5
           CLR    biTXDFLG               ; 发送字节全部发送完毕 ,清发送状态
           CLR    biINFFLG              ;
;
COM_TXD1:  SJMP   COMEND
;
;
;********************************************************************
;  COM_PRO   通讯处理子程序
;********************************************************************
COM_PRO:   CLR    C
           MOV    DPTR,#D_RXD485
           INC    DPTR
           MOVX   A,@DPTR                  ; A= 数据帧中 目的地址
           CJNE   A,#0FDH,COMPRO01         ; 是否广播地址  是进入通讯处理
           SJMP   COMPRO03

COMPRO01:  CJNE   A,#0FBH,COMPRO02         ; 是否叫号器广播地址  是进入通讯处理
           SJMP   COMPRO03
COMPRO02:  CLR    C
           SUBB   A,yCOMADR
           JZ     COMPRO03                 ; 是否本机地址  是进入通讯处理
;
           CLR    C
           LJMP   COMPROEND                ; 不是上述地址 放弃处理此帧
;
COMPRO03:  INC    DPTR
           MOVX   A,@DPTR                  ; A =命令字
;
           CJNE   A,#018H,COMPRO04
           LJMP   COMPRO1                  ;  呼叫号码(代码)显示
COMPRO04:  CJNE   A,#010H,COMPRO05
           LJMP   COMPRO2                  ;  汉字点阵显示
COMPRO05:  CJNE   A,#021H,COMPRO06

COMPRO06:

COMPROEND: CLR    biRXDFLG
           CLR    biCOMPRO
           RET
;
; 呼叫号码(代码)显示
COMPRO1:   INC    DPTR
           INC    DPTR
           MOVX   A,@DPTR
           MOV    50H,A                ;50H 显示字符个数
           MOV    R7,A
           INC    DPTR
           MOVX   A,@DPTR
           MOV    51H,A                ; 51H闪烁标志
           INC    DPTR
           MOVX   A,@DPTR
           MOV    52H,A                ; 52H闪烁次数
;
           INC    DPTR
           INC    DPTR
;
           MOV    R7,#04
           MOV    R0,#54H              ; 显示字符代码->53H~5AH
COMPRO11:  INC    DPTR
           MOVX   A,@DPTR
           MOV    @R0,A
           INC    R0
           DJNZ   R7,COMPRO11
;
           CLR    C
           MOV    A,54H 
           CJNE   A,#01CH,COMPRO12
           ;  显示暂停服务
           SETB   biSTOP
           MOV    51H,#00H
           MOV    50H,#04H
           MOV    53H,#08DH
           MOV    54H,#08EH
           MOV    55H,#08FH
           MOV    56H,#090H                                 
           LCALL  VIS_BUF    ; 显示50H~5AH字符           
           CLR    biFRMFS
           LJMP   COMPROEND
;           
COMPRO12:  CJNE   A,#018H,COMPRO16
           ; 显示开启服务
           MOV    51H,#00H
           MOV    50H,#04H
           MOV    53H,#085H
           MOV    54H,#086H
           MOV    55H,#087H
           MOV    56H,#088H                                 
           LCALL  VIS_BUF    ; 显示50H~5AH字符           
           CLR    biFRMFS
           CLR    biSTOP
           LJMP   COMPROEND
;           
COMPRO16:  CLR    C         
           JB     biSTOP,COMPRO19
           MOV    53H,#84H
           MOV    58H,#83H
           LCALL  VIS_BUF    ; 显示50H~5AH字符
;
           CLR    C
           MOV    A,51H
           JZ     COMPRO19
           ; 需闪烁  ******
           LCALL  FLASH_VIS           ; 闪烁显示
           SETB   biFRMFS
           MOV    yFLSHDEL,52H
;
COMPRO19:  LJMP   COMPROEND
;
;
;  汉字点阵显示
COMPRO2:

COMPRO29:  LJMP   COMPROEND

⌨️ 快捷键说明

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