?? liuweiwei.asm
字號(hào):
COM EQU 50H
DAT EQU 51H
E EQU P2.3
RW EQU P2.2
RS EQU P2.1
ORG 0000H
LJMP START
ORG 000BH
LJMP ADC ;50M秒 做一次AD轉(zhuǎn)化
START: MOV TMOD, #01H ;定時(shí)器T0設(shè)為方式1
MOV TH0 , #3CH
MOV TL0 , #80H
MOV TCON, #00H ; 電平觸發(fā)方式
MOV SP,#60H
LCALL SETLCD
MOV IE,#82H ;開(kāi)中斷 , 定時(shí)器T0允許中斷
SETB TR0 ;啟動(dòng)定時(shí)器
LCALL N1
LOOP: MOV A,46H ;46H=AD轉(zhuǎn)換后的數(shù)字量
CJNE A,47H,LOP1 ;不等于跳轉(zhuǎn)
LCALL XS
LJMP LOOP
LOP1: LCALL MUL_BCD
LCALL XS
LJMP LOOP
MUL_BCD: MOV 47H,46H
MOV A,47H
;乘法 加 BCD 轉(zhuǎn)化
MOV B,#196
MUL AB
MOV R7,A
MOV R6,B
NOP
;入口條件:待轉(zhuǎn)換的雙字節(jié)十六進(jìn)制整數(shù)在 R6 、 R7 中。
;出口信息:轉(zhuǎn)換后的三字節(jié)BCD碼整數(shù)在 R3 、 R4 、 R5 中。
;影響資源: PSW 、 A 、 R2 ~ R7 堆棧需求: 2字節(jié)
HB2: CLR A;BCD碼初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù)
HB3: MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到 CY 中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2
ADDC A,R5
DA A ;十進(jìn)制調(diào)整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;雙字節(jié)十六進(jìn)制數(shù)的萬(wàn)位數(shù)不超過(guò)6,不用調(diào)整
DJNZ R2,HB3 ;處理完16bit
NOP ;BCD轉(zhuǎn)化完畢,以下是對(duì)顯示數(shù)據(jù)的處理
;把壓縮BCD碼 變成BCD碼,存入40——43 顯示緩存
MOV A,R3
ADD A,#30H
MOV 40H,A ;個(gè)位
MOV 41H,#0A5H
MOV A,R4
SWAP A
ANL A,#0FH
ADD A,#30H
MOV 42H,A ;小數(shù) 0.
MOV A,R4
ANL A,#0FH ;小數(shù)0.0
ADD A,#30H
MOV 43H,A
MOV A,R5
SWAP A
ANL A,#0FH ;小數(shù)0.00
ADD A,#30H
MOV 44H,A
MOV A,R5
ANL A,#0FH ;小數(shù)0.00
ADD A,#30H
MOV 45H,A
RET
ADC: PUSH A
PUSH 00H
CLR TR0
MOV R0,#70
CLR E
MOV DPTR,#0EFH ;0809地址
MOV A,#0 ;選通道0
MOVX @DPTR,A ; 啟動(dòng)AD轉(zhuǎn)換
LCALL DEL ;等待AD轉(zhuǎn)換
MOVX A,@DPTR ;讀取數(shù)據(jù)
MOV 46H,A
MOV TH0 , #3CH
MOV TL0 , #80H
SETB TR0
POP A
POP 00H
RETI
DEL: DJNZ R0,DEL
MOV R0,#70
RET
DEL1:MOV R7,#250
DEL2:MOV R6,#200
DJNZ R6,$
DJNZ R7,DEL2
RET
SETLCD: MOV COM,#38H ;8位總線,雙行顯示,5×7點(diǎn)陣
LCALL PR1
MOV COM,#01H ;光標(biāo)復(fù)位,清屏
LCALL PR1
MOV COM,#06H ;光標(biāo)右移,字不動(dòng)
LCALL PR1
MOV COM,#0FH;0CH ;開(kāi)顯示,開(kāi)光標(biāo),光標(biāo)閃
LCALL PR1
RET
;從第一行第N個(gè)位置開(kāi)始顯示
N1: MOV COM,#80H ;從第一行第N個(gè)位置開(kāi)始顯示
LCALL PR1
MOV R0,#00H ;顯示字符串
MOV R1,#16
N2: MOV DPTR,#CHAR
MOV A,R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R0
LCALL DEL1
DJNZ R1,N2
;從第2行第N個(gè)位置開(kāi)始顯示
MOV COM,#0C0H
LCALL PR1
MOV R0,#00H ;顯示字符串
MOV R1,#15
N3: MOV DPTR,#CHAR1
MOV A,R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR2
INC R0
LCALL DEL1
DJNZ R1,N3
MOV COM,#0CH ;開(kāi)顯示,開(kāi)光標(biāo),光標(biāo)閃
LCALL PR1
RET
XS: MOV COM,#089H ;從第一行第10個(gè)位置開(kāi)始顯示
LCALL PR1
MOV R1,#40H
LOP5: MOV DAT,@R1
LCALL PR2
INC R1
CJNE R1,#46H,LOP5
RET
PR1: SETB E
MOV p0,#080h ;準(zhǔn)備寫指令
CLR RS
SETB RW
MOV A,P0
CLR E
JB ACC.7,PR1 ;查詢是否為忙 ,等于1跳轉(zhuǎn)
CLR RW
SETB E
MOV P0,COM
CLR E
RET
;寫數(shù)據(jù)
PR2: SETB E
MOV p0,#080h ;查詢是否為忙
CLR RS
SETB RW
MOV A,P0
CLR E
JB ACC.7,PR2
SETB RS
CLR RW
SETB E
MOV P0,DAT ;8位總線,雙行顯示,5×10點(diǎn)陣
CLR E
RET
CHAR: DB "Voltage= ****** " ;定義字符串
CHAR1: DB"DQ-10501-LiuWei"
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -