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

📄 soc080225.asm

📁 一个有关电子秤的汇编代码,和大学一起进步!
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                  MOV      DSPL5,#0EH       ;;;传感器信号线接反,或者传感器上附加重量过大
                  MOV      DSPL4,#18H       ;;;显示" Err-1"
                  MOV      DSPL3,#18H
                  MOV      DSPL2,#16H
                  MOV      DSPL1,#01H
                  SJMP     STCLR
STCLR2:
                  MOV      MNDAT1,CQDAT1    ;;;保存修补质量对应的内码
                  MOV      MNDAT2,CQDAT2
                  MOV      A,#15H
                  LCALL    DISPLAY5         ;;;清0显示
                  MOV      DSPL1,#00H
                  JNB      DDT,STCLR3
                  MOV      DSPL2,#00H       ;;;小数点显示
STCLR3:
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIB:             ;;;功能说明:设置初始状态位和状态字.
                  CLR      WDBB
                  CLR      DDT              ;;;开机允许小数点显示
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COMP:             ;;;功能说明:处理每次称重值
                  NOP
                  NOP
                  JBC      ADEN,COMP0
                  RET
COMP0:
                  MOV      DATZ1,DATD1
                  MOV      DATZ2,DATD2
                  LCALL    PCB              ;;;对质量进行处理.
                  MOV      TEMP1,MNDAT1
                  MOV      TEMP2,MNDAT2     ;;;(D1-D0)*M/D
                  MOV      CQDAT1,DQXS1
                  MOV      CQDAT2,DQXS2
                  LCALL    CTOM             ;;;将内码转换为质量存放在DATZ
                  JBC      BDB,COMP2
                  JB       SYMB,COMP01
                  LCALL    LIMCOMP
                  JNB      LMC,COMP01
                  MOV      DSPL5,#0EH       ;;;并返回到重新称量状态.
                  MOV      DSPL4,#18H       ;;;超载显示" Err-2"
                  MOV      DSPL3,#18H
                  MOV      DSPL2,#16H
                  MOV      DSPL1,#04H
                  JMP      COMP
COMP01:
                  MOV      R5,CQXS1
                  MOV      R6,CQXS2
COMP1:
                  MOV      R1,#DSPT1        ;;;DATZ<MMDAT显示负数
                  MOV      R7,#00H
                  LCALL    BCD              ;;;数据转换为显示值送DSPT
                  MOV      R2,#04H          ;;;;;;;;;;;;;;;05H
                  MOV      R0,#DSPT5        ;;;;;;;;;;;;;;;DSPT5
                  LCALL    BANK             ;;;显示消隐
                  LCALL    TTOL5            ;;;;;;;;;;;;;;;;TTOL5
                  JNB      SYMB,COMP2
                  MOV      A,CQXS1
                  ORL      A,CQXS2
                  JZ       COMP2            ;;;为0时不显示负号
                  MOV      DSPL5,#16H       ;;;;;;;;;;;;;;;
COMP2:
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PCB:              ;;;功能说明:根据当前接收到的质量与上一次的质量判断秤体的状态
                  MOV      A,PREDAT1
                  JNZ      PCB1
                  MOV      A,PREDAT2
                  JNZ      PCB1
                  MOV      PREDAT1,DATZ1
                  MOV      PREDAT2,DATZ2
                  RET
PCB1:
                  MOV      R3,DATZ1
                  MOV      R4,DATZ2
                  MOV      R5,PREDAT1
                  MOV      R6,PREDAT2
                  LCALL    MAXMIN
                  MOV      PREDAT1,DATZ1
                  MOV      PREDAT2,DATZ2
                  MOV      A,ADAT2
                  JNZ      PCB2             ;;;确定为非稳定状态
                  MOV      A,ADAT1
                  JNZ      PCB2             ;;;确定为非稳定状态
                  INC      WDB              ;;;确定为稳定状态
                  INC      WDB1
                  MOV      A,WDB
                  CLR      C
                  SUBB     A,#18H
                  JNC      PCB6             ;;;直接更新序列
                  MOV      A,WDB1
                  CJNE     A,#06H,PCB3      ;;;直接更新序列
                  MOV      WDB1,#00H
                  JMP      PCB7             ;;;小于时转入第一级滤波中
PCB2:
                  MOV      WDB,#00H
                  MOV      WDB1,#00H
                  MOV      A,ADAT1
                  CLR      C
                  SUBB     A,#40H           ;;;将差值与40H比较.
                  MOV      A,ADAT2
                  SUBB     A,#00H
                  JC       PCB3             ;;;确定为摆动状态
                  MOV      A,ADAT2
                  CLR      C
                  RRC      A
                  MOV      DQXS2,A
                  MOV      A,ADAT1
                  RRC      A
                  ADD      A,MIN1
                  MOV      DQXS1,A          ;;;确定为抖动状态
                  MOV      A,DQXS2
                  ADDC     A,MIN2
                  MOV      DQXS2,A
                  RET
PCB3:
                  LCALL    PXCPP            ;;;第二级排序
                  RET
PCB7:
                  LCALL    PXCPP06
                  RET
PCB6:
                  MOV      DQXS1,DATZ1
                  MOV      DQXS2,DATZ2
                  MOV      WDB,#00H
                  MOV      A,LED1
                  SETB     ACC.0            ;;;稳定状态灯亮.
                  MOV      LED1,A
                  SETB     WDBB
PCB8:
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAXMIN:           ;;;判断两个数据的大小并求出差值.
                  MOV      A,R3
                  CLR      C
                  SUBB     A,R5
                  MOV      ADAT1,A
                  MOV      A,R4
                  SUBB     A,R6
                  MOV      ADAT2,A
                  JC       MAXMIN1
                  MOV      MAX1,R3
                  MOV      MAX2,R4
                  MOV      MIN1,R5
                  MOV      MIN2,R6
                  RET
MAXMIN1:
                  MOV      A,ADAT1
                  CPL      A
                  ADD      A,#01H
                  MOV      ADAT1,A
                  MOV      A,ADAT2
                  CPL      A
                  ADDC     A,#00H
                  MOV      ADAT2,A
                  MOV      MAX1,R5
                  MOV      MAX2,R6
                  MOV      MIN1,R3
                  MOV      MIN2,R4
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CTOM:             ;;;功能说明:(CQDAT-NOADAT)*AQDAT/AQDAT'最后得到当前称重的质量
                  ;;;TEMP存放NOADAT或者MNDAT的值
                  MOV       A,CQDAT1        ;;;当前内码减去空载时内码
                  CLR       C
                  SUBB      A,TEMP1
                  MOV       R5,A
                  MOV       A,CQDAT2
                  SUBB      A,TEMP2
                  MOV       R6,A            ;;;实现CQDAT-TEMP并判断符号
                  JC        CTOM0
                  CLR       SYMB            ;;;正数
                  SJMP      CTOM01
CTOM0:
                  MOV       A,R5            ;;;对CQDAT-TEMP的结果取反
                  CPL       A
                  ADD       A,#01H
                  MOV       R5,A
                  MOV       A,R6
                  CPL       A
                  ADDC      A,#00H
                  MOV       R6,A
                  SETB      SYMB            ;;;负数
CTOM01:
                  MOV       R3,#00H
                  MOV       R4,05H          ;;;左移8位
                  MOV       R5,06H
                  MOV       TEMP1,XSDAT1
                  MOV       TEMP2,XSDAT2
                  LCALL     DIV32
CTOM1:
                  MOV       CQXS1,R3        ;;;L
                  MOV       CQXS2,R4        ;;;H
                  MOV       R6,CQXS2        ;;;取消分度值
                  MOV       R5,CQXS1
                  MOV       R4,SCADAT
                  LCALL     DIV21
                  MOV       R2,06H
                  MOV       R3,05H
                  MOV       R4,SCADAT
                  LCALL     MUL21
                  MOV       CQXS2,R6
                  MOV       CQXS1,R7
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PXCPP:            ;;;功能说明:将接收的内码依次推进到序列中.QUEQ1=0A0H
                  ;;;QUEQ2=0A2H,QUEQ3=0A4H,QUEQ4=0A6H,QUEQ5=0A8H
                  MOV       R0,#QUEQ2       ;;;当第二个数据为0时,以当前数据去更新序列
                  MOV       A,@R0
                  JNZ       PXCPP0
                  INC       R0
                  MOV       A,@R0
                  JNZ       PXCPP0
                  MOV       R2,#03H
                  MOV       R0,#QUEQ1
PXCPP00:
                  MOV       @R0,DATZ1
                  INC       R0
                  MOV       @R0,DATZ2
                  INC       R0
                  DJNZ      R2,PXCPP00
                  MOV       DQXS1,DATZ1
                  MOV       DQXS2,DATZ2
                  RET
PXCPP0:
                  MOV       R0,#QUEQ3
                  MOV       R1,#QUEQ2
                  INC       R0
                  INC       R1
                  MOV       R2,#04H
PXCPP1:           ;;;更新序列,将DATZ插入
                  MOV       A,@R1
                  MOV       @R0,A
                  DEC       R1
                  DEC       R0
                  DJNZ      R2,PXCPP1
                  MOV       @R0,DATZ2
                  DEC       R0
                  MOV       @R0,DATZ1
                  MOV       R2,#03H         ;;;比较X4与X1,X2,X3,X4,X5,X6,X7,X8,X9的关系
                  MOV       R4,#00H         ;;;将结果存放在R4,R5,R6中
                  MOV       R5,#00H
                  MOV       R6,#00H
                  MOV       R1,#QUEQ1
PXCPP2:
                  MOV       R0,#QUEQ2
                  MOV       A,@R0
                  CLR       C
                  SUBB      A,@R1
                  MOV       TEMP1,A
                  INC       R0
                  INC       R1
                  MOV       A,@R0
                  SUBB      A,@R1
                  INC       R1
                  JNZ       PXCPP3
                  MOV       A,TEMP1
                  JNZ       PXCPP3
                  INC       R4              ;;;存放相等的次数
                  DJNZ      R2,PXCPP2
                  SJMP      PXCPP5
PXCPP3:
                  JC        PXCPP4
                  INC       R5              ;;;存放大于的次数
                  DJNZ      R2,PXCPP2
                  SJMP      PXCPP5
PXCPP4:
                  INC       R6              ;;;存放小于的次数
                  DJNZ      R2,PXCPP2
PXCPP5:
                  MOV       A,R5
                  JZ        PXCPP6          ;;;最小值时转入最值处理
                  MOV       A,R6
                  JZ        PXCPP6          ;;;最大值时转入最值处理
                  RET                       ;;;非最值时退出
PXCPP6:           ;;;最值处理               ;;;;;;;;;;;;;;;;;;;;;;;
                  MOV       R0,#QUEQ2       ;;;
                  MOV       DATZ1,@R0       ;;;比较DATZ与QUE1是否相等?
                  INC       R0              ;;;相等时不更新,直接退出
                  MOV       DATZ2,@R0       ;;;不相等时更新.
                  MOV       R0,#QUE1        ;;;
                  MOV       A,@R0           ;;;
                  XRL       A,DATZ1         ;;;
                  JNZ       PXCPP06         ;;;
                  INC       R0              ;;;
                  MOV       A,@R0           ;;;
                  XRL       A,DATZ2         ;;;
                  JNZ       PXCPP06         ;;;
                  RET                       ;;;;;;;;;;;;;;;;;;;;;;;;
PXCPP06:
                  MOV       R1,#QUE21
                  MOV       R0,#QUE20
                  INC       R1
                  INC       R0
                  MOV       R2,#1EH         ;;;15个数据.
PXCPP7:
                  MOV       A,@R0           ;;;将新数据插入先进先出队列
                  MOV       @R1,A
                  DEC       R0
                  DEC       R1
                  DJNZ      R2,PXCPP7
                  MOV       @R1,DATZ2       ;;;插入新值
                  DEC       R1
                  MOV       @R1,DATZ1
                  MOV       R0,#QUE21       ;;;;队列已满
                  MOV       A,@R0
                  JNZ       PXCPP8
                  INC       R0
                  MOV       A,@R0
                  JNZ       PXCPP8
                  MOV       R1,#QUEK1       ;;;;队列没插满
                  MOV       @R1,DATZ1
                  INC       R1              ;;;用当前内码去更新QUEK队列
                  MOV       @R1,DATZ2
                  MOV       R0,#QUE1

⌨️ 快捷键说明

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