📄 350ad1.asm
字号:
CLR LCDWR
MOV R2,#3
MOV A,#0A0H ;写100代码
LCALL SENDBIT
;
CLR C
MOV R2,#6 ;送A5~A0
MOV A,LCD_ADDR
RLC A
RLC A
LCALL SENDBIT
;
CLR C
MOV A,LCD_DATA
MOV R2,#4 ;送字符 D0~D3
LCALL SENDBIT
CLR LCDWR
SETB LCDCS
RET
;全显
SHOW_LCD: MOV LCD_ADDR,#0
MOV R5,#15
CLR_L: MOV LCD_DATA,#0FFH
LCALL LCDWRITE
INC LCD_ADDR
DJNZ R5,CLR_L
RET
;清屏
CLR_LCD: MOV LCD_ADDR,#0
MOV R5,#15
CLR_LC: MOV LCD_DATA,#00H
LCALL LCDWRITE
INC LCD_ADDR
DJNZ R5,CLR_LC
RET
;发送位(输入位数R2,数据ACC)
SENDBIT: PUSH ACC
PUSH PSW
SENDB1: RLC A
MOV LCDDAT,C
LCALL D_5
SETB LCDWR
LCALL D_5
CLR LCDWR
DJNZ R2,SENDB1
POP PSW
POP ACC
RET
TABL: DB 0FAH,060H,0D6H,0F4H,06CH,0BCH,0BEH,0E0H,0FEH,0FCH,0EEH,03EH,09AH,076H,09EH,08EH;0~F
TABL1: DB 80H,40H,20H;T1~T3
TABL2: DB 00H,00H,00H,00H,00H,0F0H,00H,0FH,0F0H,00H,0FFH,0F0H,0FH,0FFH,0F0H,0FFH,0FFH,0F0H;d1~d6
;*********************************
;输入R2R3,单字节16进制, 结果存于BCDCODE (可用于采样码)
;*********************************
BCD: MOV R1,#BCDCODE
MOV A,R2 ;先高后低
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,R2
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,R3 ;先高后低
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,R3
ANL A,#0FH
MOV @R1,A
RET
;**************************
;转成显示用的单字节BCD码(可用于电压\力值显示)
;输入R2R3(十六进制),结果存于BCDCODE
;**************************
BCDM: LCALL IBTD
MOV R1,#BCDCODE
MOV A,R5 ;先高后低
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,R5
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,R6 ;先高后低
SWAP A
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,R6
ANL A,#0FH
MOV @R1,A
RET
;*************************
;采样码换算成电压值
;输入为R2,R3十六进制采样码,输出为R2,R3电压值
;*************************
VOLTAGE: CLR C ;(0.5V~2V)
MOV A,R3
SUBB A,#0E8H
MOV R3,A
MOV A,R2
SUBB A,#33H
MOV R2,A
MOV R6,#05H ;R2R3*1500mv/9AA8
MOV R7,#0DCH
LCALL QMUL
MOV R2,#09AH
MOV R3,#0A8H
LCALL NDIV
CLR C
MOV A,R7
ADD A,#0F4H
MOV R3,A
MOV A,R6
ADDC A,#01H
MOV R2,A
LCALL BCDM
RET
;******************************
;计算
;******************************
;****************************
QMUL: MOV A,R3 ;R2R3*R6R7-->R4R5R6R7
MOV B,R7
MUL AB ;R3*R7
XCH A,R7 ;R7=(R3*R7)L
MOV R5,B ;R5=(R3*R7)H
MOV B,R2
MUL AB ;R2*R7
ADD A,R5 ;R4=(R2*R7)L+(R3*R7)H
MOV R4,A
CLR A
ADDC A,B ;R5=(R2*R7)H
MOV R5,A
MOV A,R6
MOV B,R3
MUL AB ;R3*R6
ADD A,R4 ;R6=(R3*R6)L+R4
XCH A,R6 ;A=R6
XCH A,B ;B=R6
ADDC A,R5 ;R5=(R3*R6)H+R5
MOV R5,A
MOV F0,C ;F0=C
MOV A,R2
MUL AB ;R2*R6
ADD A,R5 ;R5=(R2*R6)L+R5
MOV R5,A
CLR A
MOV ACC.0,C
MOV C,F0
ADDC A,B ;R4=(R2*R6)H+F0+C
MOV R4,A
RET
;
NDIV: CLR C ;R4R5R6R7/R2R3-->R6R7
MOV A,R5
SUBB A,R3
MOV A,R4
SUBB A,R2
JNC NDVE
MOV B,#16
NDVL: CLR C
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
XCH A,R4
RLC A
XCH A,R4
MOV F0,C
CLR C
SUBB A,R3
MOV R1,A
MOV A,R4
SUBB A,R2
JB F0,NDVM
JC NDVD
NDVM: MOV R4,A
MOV A,R1
MOV R5,A
INC R7
NDVD: DJNZ B,NDVL
CLR F0
CLR C
MOV A,R2
RRC A
MOV R2,A
MOV A,R3
RRC A
MOV R3,A
MOV A,R4
CJNE A,02H,NDVI ;R4R5-R2R3 >= 0
MOV A,R5
CJNE A,03H,NDVI
NDVI: JC NDVJ
CLR C ;YES
MOV A,#1
ADD A,R7
MOV R7,A
CLR A
ADDC A,R6
MOV R6,A
NDVJ: RET
NDVE: SETB F0
RET
;***************************************
;the programis for B/D change
;inport r2,r3
;outport r4,r5,r6
;***************************************
IBTD: CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#16
IBTL2: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,IBTL2
RET
;***********************************
;平滑滤波
;***********************************
FILT: MOV R2,#20 ;20,采样次数(10-1)
MOV R0,#DATABUF+2 ;队列首地址
MOV R1,#DATABUF+3
FILT1: MOV A,@R0 ;移动低字节
DEC R0
DEC R0
MOV @R0,A ;修改低字节地址
MOV A,R0
ADD A,#04H
MOV R0,A
MOV A,@R1 ;移动高字节
DEC R1
DEC R1
MOV @R1,A ;修改高字节地址
MOV A,R1
ADD A,#04H
MOV R1,A
DJNZ R2,FILT1
DEC R0
DEC R0
DEC R1
DEC R1
MOV @R0,ADC0M
MOV @R1,ADC0H
;LCALL ARIFIL
LCALL DAVG
RET
;***********************************
;算术平均滤波法
;***********************************
;ARIFIL: MOV R2,#10 ;采样次数
; MOV R0,#DATABUF ;采样值首地址
; CLR A
; MOV ADSUMH,A
; MOV ADSUMM,A
; MOV ADSUML,A
; ARIFI1: CLR C
; MOV A,ADSUML
; ADD A,@R0
; MOV ADSUML,A
; INC R0
; MOV A,ADSUMM
; ADDC A,@R0
; MOV ADSUMM,A
; INC R0
; MOV A,ADSUMH
; ADDC A,#0
; MOV ADSUMH,A
; DJNZ R2,ARIFI1
; MOV R4,#0
; MOV R5,ADSUMH
; MOV R6,ADSUMM
; MOV R7,ADSUML
; MOV R2,#0
; MOV R3,#10 ;采样次数
; LCALL NDIV
; MOV BINH,R6 ;10次采样平均值
; MOV BINL,R7
; RET
;***********************************
;防脉冲干扰算术平均滤波法
;***********************************
DAVG: MOV R2,#10 ;采样次数
MOV R0,#DATABUF ;采样值首地址
CLR A
MOV ADSUMH,A
MOV ADSUMM,A
MOV ADSUML,A
MOV MAXH,A ;MAX
MOV MAXL,A
MOV MINH,#0FFH ;MIN
MOV MINL,#0FFH
DAVG1: CLR C
MOV A,ADSUML
ADD A,@R0
MOV ADSUML,A
MOV COD1L,@R0
INC R0
MOV A,ADSUMM
ADDC A,@R0
MOV ADSUMM,A
MOV COD1H,@R0
INC R0
MOV A,ADSUMH
ADDC A,#0
MOV ADSUMH,A
;
CLR C
MOV A,COD1L
SUBB A,MAXL
MOV A,COD1H
SUBB A,MAXH
JC DAVG2
MOV MAXH,COD1H
MOV MAXL,COD1L
DAVG2: CLR C
MOV A,COD1L
SUBB A,MINL
MOV A,COD1H
SUBB A,MINH
JNC DAVG3
MOV MINH,COD1H
MOV MINL,COD1L
;
DAVG3: DJNZ R2,DAVG1
CLR C
MOV A,ADSUML
SUBB A,MAXL
MOV R7,A
MOV A,ADSUMM
SUBB A,MAXH
MOV R6,A
MOV A,ADSUMH
SUBB A,#0
MOV R5,A
CLR C
MOV A,R7
SUBB A,MINL
MOV R7,A
MOV A,R6
SUBB A,MINH
MOV R6,A
MOV A,R5
SUBB A,#0
MOV R5,A
MOV R4,#0
MOV R2,#0
MOV R3,#8 ;采样次数-2
LCALL NDIV
MOV BINH,R6 ;10次采样平均值
MOV BINL,R7
RET
;***********************************
;多次采样,去最大最小值,再取平均值
;INPUT:ADCOH/M OUTPUT:BINH/L
;***********************************
DAVGX: MOV A,SMPTMS
CJNE A,#0,DAV1
MOV SMPTMS,#100 ;重新赋值采样次数
CLR A
MOV ADSUMH,A
MOV ADSUMM,A
MOV ADSUML,A
MOV MAXH,A ;MAX
MOV MAXL,A
MOV MINH,#0FFH ;MIN
MOV MINL,#0FFH
CLR S_E
; JMP DAV5
DAV1: CLR C
MOV A,ADC0M
ADD A,ADSUML
MOV ADSUML,A
MOV A,ADC0H
ADDC A,ADSUMM
MOV ADSUMM,A
MOV A,#0
ADDC A,ADSUMH
MOV ADSUMH,A
CLR C
MOV A,ADC0M
SUBB A,MAXL
MOV A,ADC0H
SUBB A,MAXH
JC DAV2
MOV MAXH,ADC0H
MOV MAXL,ADC0M
DAV2: CLR C
MOV A,ADC0M
SUBB A,MINL
MOV A,ADC0H
SUBB A,MINH
JNC DAV3
MOV MINH,ADC0H
MOV MINL,ADC0M
DAV3: DJNZ SMPTMS,DAV5
CLR C
MOV A,ADSUML
SUBB A,MAXL
MOV R7,A
MOV A,ADSUMM
SUBB A,MAXH
MOV R6,A
MOV A,ADSUMH
SUBB A,#0
MOV R5,A
CLR C
MOV A,R7
SUBB A,MINL
MOV R7,A
MOV A,R6
SUBB A,MINH
MOV R6,A
MOV A,R5
SUBB A,#0
MOV R5,A
MOV R4,#0
MOV R2,#0
MOV R3,#98 ;采样次数-2
LCALL NDIV
DAV4: MOV BINH,R6 ;10次采样平均值
MOV BINL,R7
SETB S_E
DAV5: RET
;两个16字节相减 COD1H/L-COD2H/L ==> COD1H/L
SUBB_TWO:CLR C
MOV A,COD1L
SUBB A,COD2L
MOV COD1L,A
MOV A,COD1H
SUBB A,COD2H
MOV COD1H,A
RET
;延时子程序
;DELY: mov r5,#11h
;dely00: MOV R2,#20
;DEL0: MOV R3,#50h
;DEL1: NOP
; DJNZ R3,DEL1
; DJNZ R2,DEL0
; DJNZ R5,DELY00
; djnz r4,dely
; RET
;10MS延时(若为1/2外部晶振,20ms)
DELY: MOV R2,#90H
DEL0: MOV R3,#0FFH
DEL1: DJNZ R3,DEL1
DJNZ R2,DEL0
djnz R4,dely
RET
;1ms延时
DELEY: MOV R2,#13
DELE0: MOV R3,#80H
DELE1: DJNZ R3,DELE1
DJNZ R2,DELE0
djnz R4,deley
RET
;-----------------------------------------------------------------------------
; End of file.
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -