📄 soc080225.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;; 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 + -