?? 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 + -