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

📄 hkbus16.asm

📁 多数位分频器.............................................可直接编译
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;      ANL A,#0F0H
;      ORL A,R7
;      MOV P1,A


      INC R7
      SETB P3.3
      NOP
      NOP
      CLR P3.3          ;STO脉冲锁存数据
      MOV R6,#10        ;防止暗亮
      DJNZ R6,$
      CLR P3.2             ;OE开显示
      JMP DIS1

;------------------------------------------------------------------

     ;入口参数:此幕起始数据指针(69H,68H)
     ;出口参数:下一幕起始数据指针(69H,68H)
LILI:JNB 06H,LILI1
     PUSH 69H
     PUSH 68H
LILI1:MOV 42H,68H
     MOV 43H,69H
     MOV 44H,#00H
     MOV 45H,#80H
     LCALL LIU1
     MOV 68H,42H
     MOV 69H,43H
     JNB 06H,LILI8
     POP 68H
     POP 69H
     LJMP LILI9
LILI8:MOV R5,#90H           ;显示次数
LILIY:LCALL DIS
     DJNZ R5,LILIY
LILI9:RET

LIU1: MOV R5,#VER                  ;R5中存放图文屏共有几行
LIU2: MOV R4,#HOR                  ;R4中存放图文屏一行有几字节
LIU3: MOV A,#01H
      LCALL PX
      MOV DPL,42H
      MOV DPH,43H
      MOVX A,@DPTR
      MOV B,A
      INC DPTR
      MOV 42H,DPL
      MOV 43H,DPH
      MOV A,#0
      LCALL PX
      MOV DPL,44H
      MOV DPH,45H
      MOV A,B
      JNB 06H,LIU6
      MOV A,#00H
LIU6: MOVX @DPTR,A
      INC DPTR
      MOV 44H,DPL
      MOV 45H,DPH
      DJNZ R4,LIU3
      DJNZ R5,LIU2
      RET

;----------------------------------------------------------------

PX:                      ;选择芯片子程序
    CLR C
    CJNE A,#09,PXX1       ;入口参数放入A中,0-8
PXX1:JC PXX2
    RET
PXX2:PUSH DPL
    PUSH DPH
    PUSH B
    PUSH ACC
    MOV B,#10
    MUL AB
    MOV B,A
    POP ACC
    ADD A,B
    MOV DPTR,#PXX
    JMP @A+DPTR
PXX:CLR P1.6             ;A=00,选中628128-1的低64K,
    CLR P1.7
    CLR P1.4
    CLR P1.5
    LJMP PXX3
    CLR P1.6             ;A=01,选中628128-1的高64K,
    CLR P1.7
    SETB P1.4
    CLR P1.5
    LJMP PXX3
    SETB P1.6            ;A=02,选中628128-2的低64K,
    CLR P1.7
    CLR P1.4
    CLR P1.5
    LJMP PXX3
    SETB P1.6            ;A=03,选中628128-2的高64K,
    CLR P1.7
    SETB P1.4
    CLR P1.5
    LJMP PXX3
    CLR P1.6             ;A=04,选中1387
    SETB P1.7
    CLR P1.4
    CLR P1.5
    LJMP PXX3
    SETB P1.6            ;A=05,选中29C020的1区
    SETB P1.7
    CLR P1.4
    CLR P1.5
    LJMP PXX3
    SETB P1.6            ;A=06,选中29C020的2区
    SETB P1.7
    SETB P1.4
    CLR P1.5
    LJMP PXX3
    SETB P1.6            ;A=07,选中29C020的3区
    SETB P1.7
    CLR P1.4
    SETB P1.5
    LJMP PXX3
    SETB P1.6            ;A=08,选中29C020的4区
    SETB P1.7
    SETB P1.4
    SETB P1.5
    LJMP PXX3
PXX3:POP B
    POP DPH
    POP DPL
    RET

;----------------------------------------------

REC: CLR P3.4
     MOV R1,#10H
REC3:MOV R3,#0FFH
REC4:MOV R2,#0FFH
REC1:JBC RI,REC2
     JBC RI,REC2
     JBC RI,REC2
     DJNZ R2,REC1
     DJNZ R3,REC4
     DJNZ R1,REC3
;  AJMP REC1
     POP DPL
     POP DPH
     MOV DPTR,#RETU
     PUSH DPL
     PUSH DPH
REC2:RET

;--------------------------------------------

INTEST:CJNE A,#'K',RETU2    ;SELF TEST
     MOV A,37H
     CJNE A,#'4',RETU2
     MOV A,3AH
     CJNE A,#'1',RETU2
     MOV A,3BH
     CJNE A,#'0',RETU2
     MOV R4,#'1'
     LCALL SENDTE          ;TEST ACK

     SETB P3.2             ;关显示OE
     SETB P1.3   ;控制所有片选有效,9572并入串出功能无效
                           ;MDD EXECUTE A SELF TEST OPRATION
     MOV R1,#55H
     LCALL TEST
     MOV R1,#0AAH
     LCALL TEST

     CLR 0FH
     LCALL TESV
     SETB 0FH
     LCALL TESV

     MOV R1,#0FFH
     LCALL TEST

     SETB 0AH           ;检测所存幕循环显示一次
      pop DPH
      pop DPL
      mov dptr,#list0
      push dpl
      push dph
      RETI

;--------------------------------------------

RETU2:LJMP RETU

;--------------------------------------------

INKP:CJNE A,#24H,RETU2     ;KEYPAD来的开始指令  $
     SETB P3.2             ;关显示OE
     SETB P1.3   ;控制所有片选有效,9572并入串出功能无效

     MOV R0,#30H
     MOV @R0,A
     INC R0
     LCALL RKEYPAD         ;接收KEYPAD的数据

     MOV A,35H
     CJNE A,#'B',INTEST     ;不是FUNCTION,则跳到INTEST自检
     MOV A,36H
     CJNE A,#'S',RETU2

     LCALL SENDOK          ;IF OK 发送acknowledge to KEYPAD

     MOV R0,#30H           ;接收KEYPAD的数据 $0000K......
     LCALL RKEYPAD         ;接收KEYPAD的数据

     MOV A,36H              ;CHECK SUM
     CLR C
     SUBB A,#30H
     SWAP A
     MOV B,A
     MOV A,37H
     CLR C
     SUBB A,#30H
     ORL A,B
     MOV R1,A       ;the length of the data
     MOV R2,A
     MOV R3,A
     MOV R7,#06
     MOV R0,#30H
     MOV A,#0
CSUM1:ADD A,@R0
     INC R0
     DJNZ R7,CSUM1
     ADD A,@R0
     INC R0
     ADD A,@R0
     INC R0
CSUM2:ADD A,@R0
     INC R0
     DJNZ R3,CSUM2
     MOV R5,A        ;R5--SUM
     SWAP A
     ANL A,#0FH
     CLR C
     CJNE A,#10,CSUM4
CSUM4:JC CSUM5
     ADD A,#07H
CSUM5:ADD A,#30H
     MOV B,A
     MOV A,@R0
     CJNE A,B,RETU2
     MOV A,R5
     ANL A,#0FH
     CLR C
     CJNE A,#10,CSUM6
CSUM6:JC CSUM7
     ADD A,#07H
CSUM7:ADD A,#30H
     MOV B,A
     INC R0
     MOV A,@R0
     CJNE A,B,RETU2

     MOV A,3BH
     CJNE A,#31H,INST0   ;Fn
     JMP ERROR
INST0:MOV R0,#38H       ;CHECK INVELID
     CLR 05H           ;幕数选择OR亮度调整 标志
INST1:MOV A,@R0
     INC R0
     CJNE A,#'Q',INST2
     SETB 05H
     JMP INST5
INST2:CLR C
     CJNE A,#3AH,INST3
INST3:JNC ERROR           ;>10错误
     MOV B,A
     MOV A,R2
     CLR C
     CJNE A,#03,INST4     ;除了最后两位数字,其余要=0,不然报错
INST4:JC INST5
     MOV A,B
     CLR C
     CJNE A,#30H,ERROR
INST5:DJNZ R2,INST1

     JB 05H,LIGHT
     DEC R0
     MOV A,@R0
     CLR C
     SUBB A,#30H
     MOV R7,A
     DEC R0
     MOV A,@R0
     CLR C
     SUBB A,#30H
     MOV B,#10
     MUL AB
     ADD A,R7          ;选择幕数A
     LJMP RETX2
LIGHT:
     DEC R0
     MOV A,@R0
     CLR C
     SUBB A,#30H
     MOV R7,A
     DEC R0
     MOV A,@R0
     CJNE A,#'Q',LIGHT2
     MOV A,R7
     JMP LIGHT3
LIGHT2:CLR C
     SUBB A,#30H
     MOV B,#10
     MUL AB
     ADD A,R7          ;亮度等级A
LIGHT3:
     LJMP LIGHT99

;--------------------------------------------

ERROR:LJMP RETX24

;--------------------------------------------

LIGHT99:MOV R6,A
      MOV A,#01
      LCALL PX
      MOV DPTR,#0FFFAH       ;0FFFAH中存亮度等级0-9
      MOV A,R6
      LCALL CHECKA           ;限制A为0-9
      MOVX @DPTR,A
      MOV 73H,A              ;亮度等级参数73H
      LCALL ZHUZ71           ;HOR-HOR/10*73H==>74H
      LCALL W29CS1           ;写FF00H--FFFFH的内容到29C040
      mov SCON,#0f0h
      SETB ES
      LCALL SENDOK          ;IF OK 发送acknowledge to KEYPAD
      MOV R0,#30H
      LCALL RKEYPAD         ;接收KEYPAD的数据
      LCALL SENDOK          ;IF OK 发送acknowledge to KEYPAD
      pop DPH
      pop DPL
      mov dptr,#list
      push dpl
      push dph
      RETI

;--------------------------------------------

RETX2:JZ RETX24
      DEC A                     ;执行幕号
      CLR C
      CJNE A,1CH,RETX21       ;与结束幕号比较
       MOV 1DH,A
       JMP RETX23
RETX21:JNC RETX24
       MOV 1DH,A
RETX23:MOV A,#01
      LCALL PX
      MOV A,1DH
      MOV DPTR,#0FFFEH       ;0FFFBH中存选择幕数
      MOVX @DPTR,A
      LCALL W29CS1           ;写FF00H--FFFFH的内容到29C040
      mov SCON,#0f0h
      SETB ES
      LCALL SENDOK          ;IF OK 发送acknowledge to KEYPAD
      LCALL RKEYPAD         ;接收KEYPAD的数据
      LCALL SENDOK          ;IF OK 发送acknowledge to KEYPAD
      pop DPH
      pop DPL
      mov dptr,#list
      push dpl
      push dph
      RETI

RETX24:
      LCALL SENDER          ;IF OK 发送acknowledge to KEYPAD
      LCALL RKEYPAD         ;接收KEYPAD的数据
      LCALL SENDOK          ;IF OK 发送acknowledge to KEYPAD
      mov SCON,#0f0h
      SETB ES
      RETI

;--------------------------------------------

RETU:SETB ES          ;通讯失败,返回
     SETB TR1
     mov SCON,#0f0h
     MOV A,#01H
     LCALL PX
     CLR P3.4
     RETI

;-----------------------------------------------------------

INKPP:LJMP INKP

;-----------------------------------------------------------

INES:                         ;通讯子程序
     CLR RI
     MOV A,SBUF
     CJNE A,#ADDR1,INKPP       ;判定是否本机地址
     MOV 67H,A
     LCALL REC
     MOV A,SBUF
     CJNE A,#ADDR2,RETU
     LCALL REC
     MOV A,SBUF
     CJNE A,#ADDR3,RETU
     SETB P3.4             ;发控制端置为发送
     SETB P3.2             ;关显示OE
     SETB P1.3   ;控制所有片选有效,9572并入串出功能无效
     CLR ES
     setb TB8                       ;是重新设置通讯协议为单机方式
     MOV A,67H
     MOV SBUF,A                    ;改校验为无校验,不发送第9位
     JNB TI,$
     CLR TI

     mov SCON,#0d0h               ; 清SM2位,所有数据接收

     CLR P3.4
      LCALL REC
      MOV A,SBUF            ;接收功能号
     SETB P3.4
      CLR TB8
      MOV SBUF,A
      JNB TI,$
      CLR TI
      MOV 71H,A              ;功能号暂存71H
      CJNE A,#2AH,RETU      ;"*"  接收图片信息
      CLR P3.4
      LCALL REC
PRI1C:MOV A,SBUF
      SETB P3.4
      MOV R6,A
      MOV R7,A                   ;R7中存放总共要接收几屏
      CLR TB8
      MOV SBUF,A                ;R6存放还剩几屏需接收,初始为总屏数
      JNB TI,$
      CLR TI

     CLR P3.4
      mov a,#01h            ;控主板1断开,主板2接通显示
      lcall px                        ;选中628128
COMI:MOV DPTR,#0000H
     MOV A,R7
     CLR C
     SUBB A,R6              ;总屏数R7-还剩几屏需接收R6==>正在接收第几屏B
     MOV B,A
     MOV A,#SUM1            ;SUM1整个点阵屏有几个字节的低位
     MUL AB
     ADD A,DPL
     MOV DPL,A
     MOV A,B
     ADDC A,DPH
     MOV DPH,A                     ;计算接收当前屏的存放地址
     MOV A,R7
     CLR C
     SUBB A,R6
     MOV B,A
     MOV A,#SUM2          ;SUM2整个点阵屏有几个字节的高位
     MUL AB
     ADD A,DPH
     MOV DPH,A
     MOV R4,#HOR                  ;R4中存放图文屏一行有几字节
     MOV R5,#VER                  ;R5中存放图文屏共有几行
RIGV:LCALL REC
PRI1:MOV A,SBUF
     MOVX @DPTR,A
     INC DPTR
   SETB P3.4
     CLR TB8
     MOV SBUF,A
     JNB TI,$
     CLR TI                       ;存放显示内容数据
   CLR P3.4
     DJNZ R4,RIGV
     MOV R4,#HOR
     DJNZ R5,RIGV

     mov dptr,#0f600h               ;计算该屏显示方式存放地址
     MOV A,R7
     CLR C
     SUBB A,R6              ;0f600h+此幕*10
     MOV B,#10
     MUL AB
     ADD A,DPL
     MOV DPL,A
     MOV A,B
     ADDC A,DPH
     MOV DPH,A
      MOV R4,#4
RIGVM:LCALL REC                 ;跳到接收下一幕数据
PRI1m:MOV A,SBUF
      MOVX @DPTR,A
      INC DPTR
    SETB P3.4
      CLR TB8
      MOV SBUF,A
      JNB TI,$
      CLR TI
    CLR P3.4
      DJNZ R4,RIGVM               ;存放显示方式的4个数据
      DJNZ R6,COMI0               ;R6减1,接收下一屏
      JMP COMI1

COMI0:LJMP COMI

COMI1:mov dptr,#0fffeh            ;显示内容和方式字接收完毕
      mov a,#0
      movx @dptr,a
      MOV DPTR,#0FFFFH            ;0FFFEH中存显示屏号起始号
      MOV A,R7                    ;0FFFFH中存显示屏号结束号
      DEC A
      MOVX @DPTR,A
RTIME: mov a,#04h                   ;选中12887时间芯片
      lcall px                     ;接收时间参数
      mov dptr,#7f89h
      MOV R4,#4
RIGVj:LCALL REC              ;接收年,月,日,星期
PRI1j:MOV A,SBUF
      MOVX @DPTR,A
    SETB P3.4
      CLR TB8
      MOV SBUF,A
      clr c
      mov a,dpl
      subb a,#01
      mov dpl,a
      mov a,dph
      subb a,#0
      mov dph,a
      JNB TI,$
      CLR TI
   CLR P3.4
      DJNZ R4,RIGVj                  ;接收4个字节

      clr c
      mov a,dpl
      subb a,#01
      mov dpl,a
      mov a,dph
      subb a,#0
      mov dph,a
      MOV R4,#3
RIGVn:LCALL REC                ;接收时,分,秒
PRI1n:MOV A,SBUF
      MOVX @DPTR,A
  SETB P3.4
      CLR TB8

⌨️ 快捷键说明

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