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

📄 soc080225.asm

📁 一个有关电子秤的汇编代码,和大学一起进步!
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;  author: berpo      date: 2008.2.25  ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;   application: electronic soc scal   ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;       function: dynamic meter        ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;         version: soc080225           ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ORG     0000H
                  JMP     MAIN
                  ORG     0003H
                  JMP     INTRR0
                  ORG     000BH
                  CLR     TR0
                  JMP     INTT0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;    define the i/o    ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  SO      BIT      P1.0
                  X5045   BIT      P1.1
                  SI      BIT      P1.2
                  SCK     BIT      P1.3
                  NET1    BIT      P1.4
                  ZERO    BIT      P1.5
                  SETS    BIT      P1.6
                  SCLK    BIT      P2.6
                  DOUT    BIT      P2.7
                  CSCT    BIT      P3.3
                  SPK     BIT      P3.4
                  DIN     BIT      P3.5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; define the symbol bit ;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  BIB     BIT      00H      ;;;标定时设定退出标志.
                  SYMB1   BIT      01H      ;;;修正值正负标志位.
                  SYMB    BIT      02H      ;;;当前称重值正负标志位.
                  BDB     BIT      03H      ;;;判定为摆动标志时设置为1.
                  DKB     BIT      04H      ;;;第二次滤波时只有一个最值且最值在开头部分.
                  LMC     BIT      05H      ;;;超载标志位,=1,超载;=0,正常.
                  WDBB    BIT      06H      ;;;当稳定次数达到后,设定WDB=1,否则WDB=0.
                  DOT     BIT      07H      ;;;小数点标志位.<=1t时设定1个小数位;=1,设定小数位;=0,不设定小数位.
                  DDT     BIT      08H      ;;;小数点显示控制标志位.=1,显示小数点;=0,不显示小数点.
                  TDB     BIT      09H      ;;;按键识别为进入标定状态,=1,标定状态;=0,置零.
                  GJB     BIT      0AH      ;;;按键识别为进入关机操作,=1,系统关机;=0,非关机操作.
                  FMQ     BIT      0BH      ;;;蜂鸣器打开标志位,=1,蜂鸣器开;=0,蜂鸣器关.
                  ADEN    BIT      0CH      ;;;内码转换完成标志位;转换完成后置1,在主程序中被接收后复0.
                  DYEN    BIT      0DH      ;;;电压测量结束标志;=0,继续检测;=1,退出检测
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; define the symbol byte ;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  MUL1    DATA     18H      ;;;用作乘法或第二级滤波中作最值的地址空间
                  MUL2    DATA     19H      ;;;
                  MUL3    DATA     1AH      ;;;
                  MUL4    DATA     1BH      ;;;
                  TEMP1   DATA     1CH      ;;;可重用暂时寄存器1
                  TEMP2   DATA     1DH      ;;;可重用暂时寄存器2
                  TEMP3   DATA     1EH      ;;;可重用暂时寄存器3
                  ADAT1   DATA     1CH      ;;;最大值与最小值的差值 L  ;可重用
                  ADAT2   DATA     1DH      ;;;                     H  ;可重用
                  PJB     DATA     1FH      ;;;求平均时记录最后一个为1的个数  ;可重用
                  WDB1    DATA     23H      ;;;
                  WDB     DATA     24H      ;;;稳定状态的次数判断      ;不可重用
                  DSPL1   DATA     25H      ;;;
                  DSPL2   DATA     26H      ;;;
                  DSPL3   DATA     27H      ;;;;显示当前位
                  DSPL4   DATA     28H      ;;;;
                  DSPL5   DATA     29H      ;;;
                  LED1    DATA     2AH      ;;;指示灯控制
                  KEYNO   DATA     2BH      ;;;键盘扫描时的键值.
                  SCADAT  DATA     2CH      ;;;保存分度值
                  DOTDAT  DATA     2DH      ;;;小数点位数
                  FSDAT1  DATA     2EH      ;;;满量程     L
                  FSDAT2  DATA     2FH      ;;;           H
                  XSDAT1  DATA     30H      ;;;标定系数.  L
                  XSDAT2  DATA     31H      ;;;           H
                  DEFDAT  DATA     32H      ;;;标定状态位,=0AAH时为已标定.
                  DSPT1   DATA     33H      ;;
                  DSPT2   DATA     34H      ;;
                  DSPT3   DATA     35H      ;;;显示暂存
                  DSPT4   DATA     36H      ;;;
                  DSPT5   DATA     37H      ;;
                  DSPT6   DATA     38H      ;;
                  CQDAT1  DATA     39H      ;;;当前称量的内码  L
                  CQDAT2  DATA     3AH      ;;;                H
                  MNDAT1  DATA     3BH      ;;;修补质量对应的内码   L
                  MNDAT2  DATA     3CH      ;;;置零时采集的内码     H
                  SCAD1L  DATA     3DH      ;;;2d对应的内码    L
                  SCAD1H  DATA     3EH      ;;;2d对应的内码    H
                  SCAD2L  DATA     3FH      ;;;4d对应的内码    L
                  SCAD2H  DATA     40H      ;;;4d对应的内码    H
                  DATZ1   DATA     41H      ;;;当前内码对应的质量
                  DATZ2   DATA     42H      ;;;
                  PREDAT1 DATA     43H      ;;;前一次称重地内码L
                  PREDAT2 DATA     44H      ;;;                H
                  MIN1    DATA     45H      ;;;最近两次称量的较小值 L
                  MIN2    DATA     46H      ;;;                     H
                  MAX1    DATA     47H      ;;;最近两次称量的较大值 L
                  MAX2    DATA     48H      ;;;                     H
                  DQXS1   DATA     49H      ;;;                L
                  DQXS2   DATA     4AH      ;;;存放当前内码值. H
                  YBXS1   DATA     4BH      ;;;第二次滤波只有一个最值时  L
                  YBXS2   DATA     4CH      ;;;保持前段滤波值            H
                  SUM1    DATA     4DH      ;;;                           L
                  SUM2    DATA     4EH      ;;;                           M
                  SUM3    DATA     4FH      ;;;3字节保存QUE序列中数据总和 H
                  ADMIN   DATA     50H      ;;;最小值的地址
                  ADMAX   DATA     51H      ;;;最大值的地址
                  CQXS1   DATA     52H      ;;;                L
                  CQXS2   DATA     53H      ;;;存放当前显示值. H
                  DATD1   DATA     55H      ;;;存放AD转换数据(低位)
                  DATD2   DATA     56H      ;;;存放AD转换数据(高位)
                  ADCD1   DATA     57H      ;;;                                   L
                  ADCD2   DATA     58H      ;;;存放从AD7799的数据寄存器读取地数据 M
                  ADCD3   DATA     59H      ;;;                                   H
                  CON     DATA     5AH      ;;;显示位控制字
                  QUE1    DATA     80H      ;;;
                  QUE2    DATA     82H      ;;;
                  QUE20   DATA     09CH     ;;;
                  QUE21   DATA     09EH     ;;;
                  QUEQ1   DATA     0B0H     ;;;
                  QUEQ2   DATA     0B2H     ;;;
                  QUEQ3   DATA     0B4H     ;;;
                  QUEQ4   DATA     0B6H     ;;;
                  QUEQ5   DATA     0B8H     ;;;
                  QUEK1   DATA     0BAH     ;;;
                  QUEK2   DATA     0BCH     ;;;
                  QUEK3   DATA     0BEH     ;;;
                  QUEK4   DATA     0C0H     ;;;
                  QUEK5   DATA     0C2H     ;;;
                  QUEK6   DATA     0C4H     ;;;
                  QUEK7   DATA     0C6H     ;;;
                  QUEK8   DATA     0C8H     ;;;
                  QUEK9   DATA     0CAH     ;;;
                  QUET1   DATA     0CCH     ;;;
                  QUET2   DATA     0CEH     ;;;
                  QUET3   DATA     0D5H     ;;;
                  QUET4   DATA     0D2H     ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;      main program      ;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                  ORG      0030H
MAIN:
                  SETB     NET1             ;;;CPU上电
                  NOP
                  NOP
                  LCALL    INITIAL          ;;;初始化处理
MAIN1:
                  NOP
                  NOP
                  LCALL    BANS             ;;;任务处理
                  RET                       ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INITIAL:          ;;;功能说明:初始化处理
                  SETB     SPK              ;;;开蜂鸣器
                  SETB     FMQ
                  LCALL    DELAY1
                  CLR      SPK              ;;;关闭蜂鸣器
                  CLR      DDT
                  MOV      0BH,#20H         ;;;蜂鸣器鸣叫时间初值.
                  CLR      FMQ
                  CLR      BIB
                  LCALL    CLRRAM           ;;;清0存储单元
                  MOV      SP,#0E0H         ;;;设定堆栈起始地址
                  MOV      A,#16H
                  LCALL    DISPLAY5
                  LCALL    INIINT           ;;;中断初始化
                  MOV      0AH,#0FFH        ;;;自检时变换速度
                  MOV      0BH,#00H
                  MOV      TEMP1,#0AH
                  LCALL    READDEF          ;;;读取标定值
                  MOV      A,DEFDAT         ;;;判断标定位.
                  CJNE     A,#0AAH,INITIAL1
INITI0:
                  NOP
                  NOP
                  LCALL    LIANGCHENG       ;;;显示称量吨位
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DYDY             ;;;显示电源电压
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    INIB             ;;;设置初始状态位和状态字.
                  MOV      A,#09H
                  MOV      R2,#09H
INITI1:
                  MOV      A,R2
                  LCALL    DISPLAY5
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  LCALL    DELAY1
                  DJNZ     R2,INITI1
                  MOV      A,#15H           ;;;显示"     0"
                  LCALL    DISPLAY5
                  MOV      DSPL1,#00H
                  SETB     DDT
                  JNB      DOT,INITI2
                  MOV      DSPL2,#00H
INITI2:
                  NOP
                  NOP
                  LCALL    STCLR            ;;;开机置0
                  NOP
                  NOP
                  JMP      MAIN1
INITIAL1:         ;;;没有标定时进行初始值设定.
                  MOV      SCADAT,#05H      ;;;分度值为1
                  MOV      DOTDAT,#0AAH
                  SETB     DOT              ;;;设定小数点
                  MOV      FSDAT1,#0E8H
                  MOV      FSDAT2,#03H      ;;;1T
                  MOV      XSDAT1,#88H
                  MOV      XSDAT2,#13H      ;;;5000
                  MOV      R0,#SCADAT
                  MOV      R3,#04H
                  MOV      R5,#00H
                  MOV      R6,#07H
                  CLR      EA
                  LCALL    WRBYTE
                  SETB     EA
                  JMP      INITI0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BANS:             ;;;功能说明:称重循环处理
                  NOP
                  NOP
                  LCALL    COMP             ;;;接收到的数据送显示端
                  LCALL    READKEY          ;;;扫描按键
                  SJMP     BANS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRRAM:           ;;;功能说明:清0RAM单元20h-0ffh
                  MOV      R0,#20H
CLR1:
                  MOV      @R0,#00H
                  INC      R0
                  CJNE     R0,#0FFH,CLR1
                  MOV      @R0,#00H
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIINT:           ;;;功能说明:中断初始化
                  CLR      EX1
                  CLR      EX0
                  MOV      TMOD,#21H
                  MOV      SCON,#0D0H
                  ANL      PCON,#7FH
                  MOV      TH1,#0E8H
                  MOV      TL1,#0E8H
                  SETB     TR1
                  MOV      TH0,#0FFH
                  MOV      TL0,#30H
                  SETB     TR0
                  SETB     TR0
                  SETB     ET0
                  SETB     ES
                  SETB     PS
                  CLR      PT0
                  SETB     EA
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY5:         ;;;功能说明:5个LED显示相同的数值.输入传送:A
                  MOV      DSPL1,A
                  MOV      DSPL2,A
                  MOV      DSPL3,A
                  MOV      DSPL4,A
                  MOV      DSPL5,A
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READDEF:          ;;;功能说明:读出标定时设定的相关数据,并完成数据到上限值的转换.
                  MOV      R5,#00H          ;;;存放A8
                  MOV      R3,#07H          ;;;读取数据的个数
                  MOV      R6,#00H          ;;;数据在x5045中首地址
                  MOV      R0,#SCADAT       ;;;数据存放在RAM中首地址
                  CLR      EA
                  LCALL    RDBYTE
                  SETB     EA
                  MOV      A,DOTDAT
                  CJNE     A,#0AAH,READDF1
                  SETB     DOT
                  SJMP     READDF2
READDF1:
                  CLR      DOT
READDF2:
                  LCALL    FSLIM            ;;;转换为超载的上限值
                  LCALL    NMSCAL
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NMSCAL:           ;;;功能说明:计算2D和4D分别对应的内码.
                  MOV      A,SCADAT
                  CLR      C
                  RLC      A
                  MOV      SCAD1L,A
                  MOV      SCAD1H,#00H      ;;;2d对应的内码
                  CLR      C
                  RLC      A
                  MOV      SCAD2L,A
                  MOV      SCAD2H,#00H      ;;;4d对应的内码
                  RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STCLR:            ;;;功能说明:读取当前内码,判断压力信号,正常时作置零内码(修正内码).
                  JBC      ADEN,STCLR1      ;;;
                  NOP
                  NOP
                  LCALL    READKEY
                  SJMP     STCLR
STCLR1:
                  MOV      A,DATD2
                  JNB      ACC.7,STCLR2

⌨️ 快捷键说明

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