?? dyb.asm
字號(hào):
ADCS BIT P1.4 ;A/D轉(zhuǎn)換數(shù)據(jù)輸出使能
ADDATA BIT P1.3 ;A/D轉(zhuǎn)換輸出數(shù)據(jù)
ADCLK BIT P1.2 ;A/D轉(zhuǎn)換時(shí)鐘,即串行時(shí)鐘
ADTEMP EQU 30H ;A/D轉(zhuǎn)換輸出數(shù)據(jù)暫存單元
DATA1L EQU 31H ;第一次采樣數(shù)據(jù)低位
DATA1H EQU 32H ;第一次采樣數(shù)據(jù)高2位
DATA2L EQU 33H ;第二次采樣數(shù)據(jù)低位
DATA2H EQU 34H ;第二次采樣數(shù)據(jù)高2位
DATA3L EQU 35H ;第三次采樣數(shù)據(jù)低位
DATA3H EQU 36H ;第三次采樣數(shù)據(jù)高2位
VOLT1 EQU 37H ;電壓值千分位
VOLT2 EQU 38H ;電壓值百分位
VOLT3 EQU 39H ;電壓值十分位
VOLT4 EQU 3AH ;電壓值個(gè)位
DISP0 EQU 40H ;顯示區(qū)
DISP1 EQU 41H
DISP2 EQU 42H
DISP3 EQU 43H
DISP4 EQU 44H
DISP5 EQU 45H
DISP6 EQU 46H
DISP7 EQU 47H
DISP8 EQU 48H
DISP9 EQU 49H
DISPA EQU 4AH
DISPB EQU 4BH
DISPC EQU 4CH
DISPD EQU 4DH
DISPE EQU 4EH
DISPF EQU 4FH
;===========================================================================================================
ORG 0000H
LJMP START
ORG 3000H
START: MOV SP,#60H
LCALL INIT
LOOP: LCALL FILT
LCALL DTV
LCALL DISP
SJMP LOOP
;===========================================================================================================
FILT: LCALL AD ;軟件濾波子程序
MOV DATA1L,R6
MOV DATA1H,R7
ACALL DL ;延時(shí)約2ms
LCALL AD
MOV DATA2L,R6
MOV DATA2H,R7
ACALL DL
LCALL AD
MOV DATA3L,R6
MOV DATA3H,R7
ACALL MFILT3
RET
DL: MOV R2,#00H
DL1: NOP
NOP
DJNZ R2,DL1
RET
MFILT3: ;3次采樣中值濾波子程序
CLR C
MOV A,DATA1L ;DATA1<DATA2?
SUBB A,DATA2L
MOV A,DATA1H
SUBB A,DATA2H
JC M1
MOV A,DATA1H ;DATA1>=DATA2,則交換DATA1和DATA2
XCH A,DATA2H
MOV DATA1H,A
MOV A,DATA1L
XCH A,DATA2L
MOV DATA1L,A
M1: CLR C
MOV A,DATA2L ;DATA2<DATA3?
SUBB A,DATA3L
MOV A,DATA2H
SUBB A,DATA3H
JC M2 ;DATA2<DATA3,排序結(jié)束
MOV A,DATA2H ;DATA2>=DATA3,則交換DATA2和DATA3
XCH A,DATA3H
MOV DATA2H,A
MOV A,DATA2L
XCH A,DATA3L
MOV DATA2L,A
CLR C
MOV A,DATA1L ;DATA1<DATA2?
SUBB A,DATA2L
MOV A,DATA1H
SUBB A,DATA2H
JC M2 ;DATA1<DATA2,排序結(jié)束
MOV A,DATA1H ;DATA1>=DATA2,以DATA1為中值,將中值存放于DATA2中
MOV DATA2H,A
MOV A,DATA1L
MOV DATA2L,A
M2: RET
;===========================================================================================================
AD: MOV R7,#00 ;A/D轉(zhuǎn)換子程序
MOV R6,#00
MOV R5,#00
SETB ADCS
ACALL ADDL ;ADCS處于高電平,延時(shí)以便進(jìn)入穩(wěn)定狀態(tài)
CLR ADCS
ACALL ADDL ;ADCS處于低電平,延時(shí)以便進(jìn)入穩(wěn)定狀態(tài)
MOV R5,#10
RR0: SETB ADCLK
NOP
CLR ADCLK
DJNZ R5,RR0 ;產(chǎn)生10個(gè)ADCLK周期,從第3個(gè)ADCLK周期開始采樣,一直持續(xù)到第10個(gè)周期
ACALL ADDL ;模擬量轉(zhuǎn)化為數(shù)字量過程
MOV ADTEMP,R7 ;A/D轉(zhuǎn)換的高兩位保存在R7中,數(shù)字量傳輸過程
ACALL CIR
MOV R7,ADTEMP
SETB ADCLK
NOP
CLR ADCLK
MOV ADTEMP,R7
ACALL CIR
MOV R7,ADTEMP
MOV R5,#8 ;A/D轉(zhuǎn)換的低位保存在R6中,數(shù)字量傳輸過程
RR2: SETB ADCLK
NOP
CLR ADCLK
MOV ADTEMP,R6
ACALL CIR
MOV R6,ADTEMP
DJNZ R5,RR2
RET
CIR: CLR C ;將A/D轉(zhuǎn)換的數(shù)字量高位存入C中
MOV C,ADDATA
MOV A,ADTEMP
RLC A ;將A/D轉(zhuǎn)換的數(shù)字量高位左移
MOV ADTEMP,A
RET
ADDL: MOV R2,#24 ;延時(shí)子程序
ADDL1: DJNZ R2,$
RET
;===========================================================================================================
DTV: MOV A,DATA2L ;軟件濾波結(jié)果轉(zhuǎn)化為電壓值子程序
MOV B,#5
MUL AB
MOV R5,A
MOV R4,B
MOV A,DATA2H
MOV B,#5
MUL AB
ADD A,R4
MOV R4,A
MOV R0,#VOLT1
LCALL IBTD
LCALL MODF
RET
IBTD: MOV B,#5 ;雙字節(jié)二進(jìn)制整數(shù)轉(zhuǎn)換成BCD碼子程序
MOV R6,#0
MOV R7,#10
IBTL1: MOV R2,#0
MOV R3,#0
PUSH B
ACALL NDIV
POP B
MOV A,R3
MOV @R0,A
INC R0
DJNZ B,IBTL1
RET
NDIV: MOV A,R3
CLR C
SUBB A,R7
MOV A,R2
SUBB A,R6
JNC NDVE1
MOV B,#16
NDVL1: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV C,F0
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
JB F0,NDVM1
JC NDVD1
NDVM1: MOV R2,A
MOV A,R1
MOV R3,A
INC R5
NDVD1: DJNZ B,NDVL1
CLR F0
RET
NDVE1: SETB F0
RET
MODF: MOV A,VOLT4
MOV B,#2
MUL AB
MOV B,A
CLR C
MOV A,VOLT2
SUBB A,B
MOV VOLT2,A
JNC EXIT
ADD A,#10
MOV VOLT2,A
CLR C
MOV A,VOLT3
SUBB A,#1
MOV VOLT3,A
JNC EXIT
MOV A,VOLT3
ADD A,#10
MOV VOLT3,A
DEC VOLT4
EXIT: RET
;===========================================================================================================
INIT: ;液晶顯示初始化子程序
MOV R1,#30H ;功能設(shè)置,顯示一行,字符點(diǎn)陣字體5×8
LCALL WI
MOV R1,#01H ;清顯示
LCALL BF
LCALL WI
MOV R1,#06H ;設(shè)置輸入模式,完成一個(gè)字符碼傳送后,DDRAM地址指針AC自動(dòng)加1
LCALL BF
LCALL WI
MOV R1,#0CH ;開顯示
LCALL BF
LCALL WI
MOV R7,#16
MOV R0,#DISP0
INIT1: MOV A,#0CH
MOV @R0,A
INC R0
DJNZ R7,INIT1
RET
DISP: MOV DISP5,VOLT4 ;液晶顯示子程序
MOV DISP6,#0AH
MOV DISP7,VOLT3
MOV DISP8,VOLT2
MOV DISP9,VOLT1
MOV DISPA,#0BH
LCALL WDD
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
RET
WDD: MOV R5,#16
MOV R1,#80H ;DDRAM地址設(shè)置,顯示字符碼首地址為80H
MOV R0,#DISP0
ACALL WI
WDD1: MOV A,@R0
ACALL GETSEG
MOV R2,A
ACALL BF
ACALL WD
INC R0
DJNZ R5,WDD1
RET
BF: CLR A ;檢測(cè)忙
MOV DPTR,#0A001H
MOVX A,@DPTR
JB ACC.7,BF
RET
WI: MOV DPTR,#0A000H ;寫指令到指令寄存器
MOV A,R1
MOVX @DPTR,A
RET
WD: MOV DPTR,#0A002H ;寫數(shù)據(jù)到數(shù)據(jù)寄存器
MOV A,R2
MOVX @DPTR,A
RET
GETSEG: MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
DELAY: MOV R7,#00H
MOV R6,#00H
DELAY1: DJNZ R6,DELAY1
NOP
NOP
DJNZ R7,DELAY1
RET
ORG 2000H
TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 2EH,56H,20H
;===========================================================================================================
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -