📄 chengxu.asm
字号:
目录
一 数据采样与处理………………………………………………………………1
二 键盘接口………………………………………………………………………8
一 数据采样与处理
;采样模拟信号
PR?ADC SEGMENT CODE
RSEG PR?ADC
ADCN: MOV R7,#0 ;通道号初始化
MOV R0,#CYN ;#CYN(采样值存放首地址44H~47H,四字节,十六进制)
ADC1: MOV R1,#ADADR ;#ADADR(A/D的通道号地址低字节50H)
MOV A,R7 ;通道号
MOVX @R1,A
MOV R6,#10
ADC2: DJNZ R6,ADC2 ;延时
INC R1 ;A/D的数据口地址低字节51H
ADC3: MOVX A,@R1
JB ACC.7,ADC3 ;转换结束吗?
MOVX A,@R1
ANL A,#0FH ;取12位
MOV R2,A
DEC R1
MOVX A,@R1
MOV R3,A
INC R0
MOV A,@R0
ADD A,R3
MOV R3,A
DEC R0
MOV A,@R0
ADDC A,R2
RRC A ;算术平均滤波
MOV @R0,A
INC R0
MOV A,R3
RRC A
MOV @R0,A
INC R0
INC R7
CJNE R7,#2,ADC1
MOV R0,#CYN ;计算两个毛重值
MOV R1,#MZN ;#MZN(毛重,四字节58H,BCD码,Kg)
MOV B,LC1 ;LC1(生料量程代码存放单元25H,单字节,十六进制)
LCALL CYTOKG
MOV R0,#CYN+2
MOV R1,#MZN+2
MOV B,LC2
LCALL CYTOKG
MOV R0,#CYN ;计算两个净重值
MOV R1,#JZN ;JZN(静重存放单元5CH,四字节,BCD码,Kg)
MOV R2,PZN ;PZN(皮重存放单元48H,四字节,十六进制)
MOV R3,PZN+1
MOV B,LC1
LCALL JZTOKG
MOV R0,#CYN+2
MOV R1,#JZN+2
MOV R2,PZN+2
MOV R3,PZN+3
MOV B,LC2
JZTOKG: INC R0 ;计算净重值
MOV A,@R0
CLR C
SUBB A,R3 ;减去皮重
MOV R5,A
DEC R0
MOV A,@R0
SUBB A,R2
MOV R4,A
JNC CYTOKG0
CLR A ;净重值不为负值
MOV R6,A
MOV R7,A
SJMP CYTOKG9
;采样值转换为重量(采样值在[R0]中,量程代码在B中,重量结果在[R1]中)
CYTOKG: MOV A,@R0
MOV R4,A
INC R0
MOV A,@R0
MOV R5,A
CYTOKG0:MOV A,B ;量程代码
JNZ CTOK0
LCALL X3 ;量程1400:乘3
MOV B,#3 ;除8
SJMP CYTOKG2
CTOK0: CJNE A,#1,CYTOKG1
MOV B,#2 ;除4
SJMP CYTOKG2
CYTOKG1:CJNE A,#2,CYTOKG2
LCALL X3 ;量程650:乘3
MOV B,#4 ;除16
CYTOKG2:MOV A,B
CJNE A,#4,CYTOKG3
LCALL CTOK4
SJMP CYTOKG8
CYTOKG3:CJNE A,#5,CYTOKG4
LCALL CTOK4
MOV B,#1
SJMP CYTOKG6
CYTOKG4:CJNE A,#6,CYTOKG5
LCALL CTOK4
MOV B,#2
SJMP CYTOKG6
CYTOKG5:CJNE A,#7,CYTOKG6
MOV A,R5
RLC A
MOV A,R4
RLC A
MOV R5,A
CLR A
RLC A
MOV R4,A
SJMP CYTOKG8
CYTOKG6:CLR C
MOV A,R4
RRC A
MOV R4,A
MOV A,R5
RRC A
MOV R5,A
DJNZ B,CYTOKG2
CYTOKG8:LCALL HBCD
CYTOKG9:MOV A,R6 ;保存结果
MOV @R1,A
INC R1
MOV A,R7
MOV @R1,A
RET
CTOK4: MOV A,R4
SWAP A
ANL A,#0FH
XCH A,R4
SWAP A
ANL A,#0F0H
XCH A,R5
SWAP A
ANL A,#0FH
ORL A,R5
MOV R5,A
RET
X3: MOV A,R5 ;R4R5×3
MOV B,#3
MUL AB
MOV R5,A
MOV A,B
XCH A,R4
MOV B,#3
MUL AB
ADD A,R4
MOV R4,A
RET
HBCD: CLR A ;十六进制R4R5转换为十进制R6R7
MOV R6,A
MOV R7,A
MOV R2,#10H ;2字节,16位
HBCD1: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
DJNZ R2,HBCD1
RET
;配方和落差数据格式转换
CHGPF: CLR PFYX ;标志初始化
MOV R0,#PFN
MOV R1,#PFHN
MOV B,LC1
LCALL KGTOCY
MOV R0,#PFN+2
MOV R1,#PFHN+2
MOV B,LC2
LCALL KGTOCY
MOV R0,#LCAN
MOV R1,#LCN
MOV B,LC1
LCALL KGTOCY
MOV R0,#LCAN+2
MOV R1,#LCN+2
MOV B,LC2
LCALL KGTOCY
MOV A,PFN ;生料配方数据不能为零
ORL A,PFN+1
JZ CHGPFE
MOV A,PFHN ;生料配方数据不能接近或超过量程
ADD A,#0F1H
JC CHGPFE
MOV A,LCN ;生料落差数据不能超过量程的四分之一
ADD A,#0FCH
JC CHGPFE
MOV A,PFN+2 ;焦粉配方数据不能为零
ORL A,PFN+3
JZ CHGPFE
MOV A,PFHN+2 ;焦粉配方数据不能接近或超过量程
ADD A,#0F1H
JC CHGPFE
MOV A,LCN+2 ;焦粉落差数据不能超过量程的四分之一
ADD A,#0FCH
JC CHGPFE
CHGPF2: SETB PFYX ;配方有效
CHGPFE: RET
;重量转换为采样值(重量在[R0]中,量程代码在B中,采样值结果在[R1]中)
KGTOCY: PUSH B
MOV A,@R0
MOV R4,A
INC R0
MOV A,@R0
MOV R5,A
LCALL BCDH2 ;
POP B ;量程代码
PUSH B
MOV A,B
JNZ KGTOCY0
MOV B,#3 ;乘8
SJMP KGTOCY2
KGTOCY0:CJNE A,#1,KGTOCY1
MOV B,#2 ;乘4
SJMP KGTOCY2
KGTOCY1:CJNE A,#2,KGTOCY2
MOV B,#4 ;乘16
KGTOCY2:MOV A,B
CJNE A,#4,KGTOCY3
LCALL KTOC4
SJMP KGTOCY7
KGTOCY3:CJNE A,#5,KGTOCY4
LCALL KTOC4
MOV B,#1
SJMP KGTOCY6
KGTOCY4:CJNE A,#6,KGTOCY5
LCALL KTOC4
MOV B,#2
SJMP KGTOCY6
KGTOCY5:CJNE A,#7,KGTOCY6
MOV A,R4
RRC A
MOV A,R5
RRC A
MOV R4,A
CLR A
RRC A
MOV R5,A
SJMP KGTOCY7
KGTOCY6:CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
DJNZ B,KGTOCY2
KGTOCY7:POP ACC
JNZ KGTOCY8
LCALL D3
SJMP KGTOCY9
KGTOCY8:CJNE A,#2,KGTOCY9
LCALL D3
KGTOCY9:MOV A,R4 ;保存结果
MOV @R1,A
INC R1
MOV A,R5
MOV @R1,A
RET
KTOC4: MOV A,R5
SWAP A
ANL A,#0F0H
XCH A,R5
SWAP A
ANL A,#0FH
XCH A,R4
SWAP A
ANL A,#0F0H
ORL A,R4
MOV R4,A
RET
;R4R5/3-->R4R5
D3: MOV A,R5
MOV R3,A
MOV A,R4
MOV R2,A
MOV B,#85
MUL AB
MOV R4,B
MOV R5,A
MOV A,R2
ADD A,R3
MOV R3,A
JNC D33
MOV A,#85
LCALL D34
INC R3
D33: MOV A,R3
MOV B,#3
DIV AB
D34: ADD A,R5
MOV R5,A
JNC D35
INC R4
D35: RET
;BCD(R4R5)-->HEX(R4R5)
BCDH2: MOV A,R5
LCALL BCDH
MOV R5,A
MOV A,R4
LCALL BCDH
MOV B,#100
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R4,A
RET
BCDH: MOV B,#10H
DIV AB
MOV R2,B
MOV B,#10
MUL AB
ADD A,R2
RET
END
二 键盘接口
;与键盘相关的子程序
PR?KEY SEGMENT CODE
RSEG PR?KEY
INITKEY:MOV R2,#0 ;清键盘缓冲区
MOV P2,#0FFH ;指向键盘地址的高字节
MOV R1,#KEYDAT ;#KEYDAT(键盘数据口低字节9EH)
CLRKEY: MOVX A,@R1
DJNZ R2,CLRKEY
RET
;读键模块
INKEY: MOV R1,#KEYZT ;键盘状态口,KEYZT(键盘状态口低字节9CH)
MOVX A,@R1
JB ACC.0,INKEY1
MOV A,#0FFH ;未按键
RET
INKEY1: MOV R1,#KEYDAT ;键盘数据口
MOVX A,@R1
JB ACC.7,INKEY ;无效码,重新读键
MOV DPTR,#KCOD
MOV B,A
MOV R2,#0FFH
INKEY2: INC R2
MOV A,R2
MOVC A,@A+DPTR
CJNE A,#0FFH,INKEY3
RET
INKEY3: CJNE A,B,INKEY2
MOV A,R2
RET
KCOD: DB 0BH,02H,03H,04,05H ;0,1,2,3,4
DB 06H,07H,08H,09H,0AH ;5,6,7,8,9
DB 1CH,01H,48H,50H,4BH,4DH ;回车(0AH),Esc(0BH),上(0CH),下(0DH),左(0EH),右(0FH)
DB 39H,3BH,3CH,3DH,3EH,3FH ;Pass(10H),F1(11H),F2(12H),F3(13H),F4(14H),F5(15H)
DB 40H,41H,42H,0FH,0EH,0FFH;F6(16H),F7(17H),F8(18H),Tab(19H),Back(1AH)
;"上"键
UP: MOV A,XXH
ADD A,GBYMAX
DEC A
MOV B,GBYMAX
DIV AB
MOV XXH,B
RET
;"下"键
DOWN: MOV A,XXH
INC A
MOV B,GBYMAX
DIV AB
MOV XXH,B
RET
;"左"键
LEFT: MOV A,XXV
ADD A,GBXMAX
DEC A
MOV B,GBXMAX
DIV AB
MOV XXV,B
RET
;"右"键
RIGHT: MOV A,XXV
INC A
MOV B,GBXMAX
DIV AB
MOV XXV,B
RET
;初始化输入状态
ININIT: CLR A
MOV INBUF,A
MOV INBUF+1,A
MOV INBUF+2,A
MOV INBUF+3,A
SETB INP
RET
;更新配方数据
SAVEPF: MOV A,INBUF
SWAP A
ORL A,INBUF+1
MOV R2,A
MOV A,INBUF+2
SWAP A
ORL A,INBUF+3
MOV R3,A
MOV A,XXH
JNZ SAVELC
MOV A,XXV
RL A
ADD A,#PFN
MOV R0,A
MOV A,R2
MOV @R0,A
MOV A,R3
INC R0
MOV @R0,A
RET
SAVELC: MOV A,XXV
RL A
ADD A,#LCAN
MOV R0,A
MOV A,R2
MOV @R0,A
INC R0
MOV A,R3
MOV @R0,A
RET
SAVETJ: MOV A,XXH
ADD A,#TIMES
MOV R0,A
MOV A,INBUF+2
MOV B,#10
MUL AB
ADD A,INBUF+3
MOV R2,A
MOV A,INBUF+1
MOV B,#100
MUL AB
ADD A,R2
MOV @R0,A
RET
;更任务数据
SAVERW: MOV A,INBUF
SWAP A
ORL A,INBUF+1
MOV R2,A
MOV A,INBUF+2
SWAP A
ORL A,INBUF+3
MOV R3,A
MOV A,XXH
JNZ SAVEDS
MOV R0,#RWCS
MOV R1,#RWDS
CLR RWBZ ;任务次数
SJMP SAVEE
SAVEDS: MOV R0,#RWDS
MOV R1,#RWCS
SETB RWBZ ;任务吨数
SAVEE: MOV A,R2
MOV @R0,A
INC R0
MOV A,R3
MOV @R0,A
MOV A,#0DDH
MOV @R1,A
INC R1
MOV @R1,A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -