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

📄 1厂1主控.asm

📁 control the keyboard for workplace
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       JNB RI,$
       CLR RI
       CLR TI
       MOV  A,SBUF
       MOV  52H,A
       NOP
       NOP
       NOP
       NOP
       JNB RI,$
       CLR RI
       CLR TI
       MOV  A,SBUF
       MOV 53H,A
       NOP
       NOP
       NOP
       NOP
       MOV A,53H
       CJNE A,#100,TRA1
       LCALL RST
       AJMP  TRAX0
 TRA1: MOV  A,53H                               ;首先判断窗口号是否大于96
       CLR  C
       SUBB A,#96
       JNB  0D7H,TRAX0
       MOV A,53H
       CJNE A,#01,TRA2
       AJMP TRA0
 TRA2: MOV A,53H
       CJNE A,#02,TRA3
       AJMP TRA0
 TRA3: MOV A,53H
       CJNE A,#03,TRA4
       AJMP TRA0
 TRA4: MOV A,53H                              ;看窗口号除8和13外,是否能被5整除,(其所有窗口号都是5的倍数)
       MOV B,#05
       DIV AB
       MOV A,B
       CJNE A,#00H,TRAX0
       MOV A,53H
       CJNE A,#00H,TRA0
       AJMP TRAX0
 TRA0: LCALL  WFTI
TRAX0: MOV 51H,#0
       MOV 52H,#0
       MOV 53H,#0
       POP A
       POP DPL
       POP DPH
       POP PSW
       SETB ES
       SETB EA
       RETI
;复位设置,及00H发送信号

RST:  MOV   A,52H
      CJNE  A,#02H,JMYI
      DEC   40H
      MOV    R0,40H
      LCALL  VIHY
      MOV    33H,R1
      MOV    32H,R2
      LCALL  DIS1
       LCALL DEL100MS
      LCALL DIS1
      AJMP   FURET
JMYI: MOV    A,52H
      CJNE   A,#01H,FUWZ
      INC    40H
      MOV    R0,40H
      LCALL  VIHY
      MOV    33H,R1
      MOV    32H,R2
      LCALL  DIS1
       LCALL DEL100MS
      LCALL DIS1
      AJMP   FURET
FUWZ: MOV    A,52H
      CJNE   A,#03H,QRDY
      CLR    A
      MOV    R0,#5FH
      LCALL  RST_DOG
cLRROM1:MOV   @R0,A
      DJNZ   R0,CLRROM1
      CLR P1.1
      CLR P1.2
      CLR P1.3
      CLR P1.4
      CLR P1.5
      SETB P1.0
      SETB P3.3
      LCALL  QYLY
      LCALL  DUQU1
      LCALL  DIS1
      LCALL  DIS2
      LCALL  DIS3
      LCALL DEL100MS
      LCALL DIS1
      LCALL  DIS2
      LCALL DIS3
      AJMP   FURET
 QRDY:MOV    A,52H
      CJNE   A,#04H,FURET
      CLR    F0
      MOV    R0,#40H
      MOV    R2,#1
      MOV    R3,#0
      LCALL  WRITEX
      LCALL  VIHY
      LCALL   BEEP
FURET:RET
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;发送问题,及除00号以外的发送来的数据,
WFTI: MOV A,52H
      CJNE A,#01H,WFTI2
      MOV  3EH,#2
      LCALL ADD1
      MOV   R0,53H
      LCALL VIHY
      MOV   57H,R1
      MOV   56H,R2
      SETB  21H.1
      MOV   52H,#0
      MOV 47H,#1
      MOV 5CH,#0
      LCALL BEEP
WFTI2:MOV A,52H
      CJNE A,#03H,WFTI3
      MOV  3EH,#3
      LCALL ADD1
      MOV   R0,53H
      LCALL VIHY
      MOV   55H,R1
      MOV   54H,R2
      SETB  21H.2
      MOV   52H,#0
      MOV 48H,#1
      MOV 5DH,#0
      LCALL BEEP
WFTI3:MOV A,52H
      CJNE A,#02H,WFTI4
      MOV  3EH,#4
      LCALL ADD1
      MOV   R0,53H
      LCALL VIHY
      MOV   5BH,R1
      MOV   5AH,R2
      SETB  21H.3
      MOV   52H,#0
      MOV 49H,#1
      MOV 5EH,#0
      LCALL BEEP
WFTI4:MOV A,52H
      CJNE A,#04H,WFTIRET
      MOV  3EH,#5
      LCALL ADD1
      MOV   R0,53H
      LCALL VIHY
      MOV   59H,R1
      MOV   58H,R2
      SETB  21H.4
      MOV   52H,#0
      MOV 4AH,#1
      MOV 5FH,#0
      LCALL BEEP
WFTIRET:RET


;定时器0中断,用于液晶显示

 INNT0:PUSH PSW                  ;1秒中断
       PUSH DPH
       PUSH DPL
       PUSH A
       INC  3CH
       MOV  A,3CH
       CJNE A,#130,KK
       MOV  3CH,#0                     ;在此记录1秒的时间,
       SETB  20H.0
       LCALL RST_DOG
KK:    MOV TH0,#0E0H
       MOV TL0,#0F0H   ;;;;"OF0"
       POP A
       POP DPL
       POP DPH
       POP PSW
       RETI


;把数据从x5045中读出,然后加1再写入
;入口3EH,x5045地址,3FH,缓冲区地址
;当从地址中读出的数据加1=100时,给予地址单元中的数据清0
  ADD1:MOV    R3,3EH
       MOV    R0,#3FH
       CLR    F0
       MOV    R2,#1
       LCALL  READX
       INC    3FH
       MOV    A,3FH
       CJNE   A,#100,ADD2
       MOV    3FH,#0
 ADD2: MOV    R0,#3FH
       MOV    R2,#1
       MOV    R3,3EH
       CLR    F0
       LCALL  WRITEX
       RET
;把需要的数据从x5045中读出,并转换为显示主要的数据
  DUQU1:CLR    F0
       MOV    R0,#40H
       MOV    R2,#6
       MOV    R3,#0
       LCALL  READX
       MOV    50H,40H
       MOV    R0,40H
       LCALL  VIHY
       MOV    33H,R1
       MOV    32H,R2
       MOV    R0,41H
       LCALL  VIHY
       MOV    31H,R1
       MOV    30H,R2
       MOV    R0,42H
       LCALL  VIHY
       MOV    37H,R1
       MOV    36H,R2
       MOV    R0,43H
       LCALL  VIHY
       MOV    35H,R1
       MOV    34H,R2
       MOV    R0,44H
       LCALL  VIHY
       MOV    3BH,R1
       MOV    3AH,R2
       MOV    R0,45H
       LCALL  VIHY
       MOV    39H,R1
       MOV    38H,R2
       RET

;进制转换,将16进制转换为10进制,默认最大数据不超过99
;入口地址R0,出口R1,R2
VIHY: MOV   A,R0
      MOV B,#0AH
      DIV AB
     ;把十位的显示数值放到R1内
      MOV R1,A
     ;把个位的显示数值放到R2内
      MOV R2,B
      RET

;数据清零,及每次按00号按键清零按钮是的工作,
QYLY: MOV  40H,#10
      MOV  41H,#0
      MOV  42H,#0
      MOV  43H,#0
      MOV  44H,#0
      MOV  45H,#0
      MOV  4CH,#0
      CLR    F0
      MOV    R0,#40H
      MOV    R2,#6
      MOV    R3,#0
      LCALL  WRITEX
      RET


;******延时100MS********
;^^^误差:相差177微秒^^^
DEL100MS: MOV R5,#0FEH
DL100MS0: MOV R6,#01EH
DL100MS1: MOV R7,#01H
          DJNZ R7,$
          DJNZ R6,DL100MS1
          DJNZ R5,DL100MS0
          RET

RST_DOG:SETB CS ;复位看门狗定时器
        NOP
        CLR CS
        NOP
        SETB CS
        RET

 ;X25045数据写入程序

;功能:将缓冲区数据写入指定地址开始的单元。

;入口:F0、R3是E2PROM单元地址最高位低八位;R0是缓冲区首地址;R2是缓冲区长度。

WRITEX:LCALL STAX ;;指令启动

       MOV A,#06H ;;输出WREN

       LCALL BYTE_OUT

       LCALL STAX ;;下一指令启动

       MOV A,#02H ;;输出WRITE

       MOV C,F0 ;;插入单元地址最高位

       MOV ACC.3,C

       LCALL BYTE_OUT

       MOV A,R3 ;,;输出单元地址低八位

       LCALL BYTE_OUT

BYWR:MOV A,@R0 ;;从缓冲区取数输出

       LCALL BYTE_OUT

       INC R0 ;,;指针加1

       DJNZ R2,BYWR; ;缓冲区未空则继续输出

       LCALL ENDX ;,指令结束

       LCALL WIP_CHK ;;等待WIP=0

       RET

;

⌨️ 快捷键说明

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