|
程序?qū)嵗?SPAN lang=EN-US>ad25dis.asm):
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP DIN1
MAIN:
64
;定義頻率200和300//////////////////////////////////
F2H EQU 30H
F2L EQU 31H
F3H EQU 32H
F3L EQU 33H
;//////////////////////////////////////////////////
DISFLAG EQU 34H ;顯示標(biāo)志
DISL EQU 35H ;顯示低位
DISH EQU 36H ;顯示高位
ADNUMBER EQU 37H ;AD值
DISADL EQU 38H ;顯示AD低位
DISADH EQU 39H ;顯示AD高位
;定義頻率保持初值//////////////////////////////////
MOV R1,#100
MOV R2,#02H
;//////////////////////////////////////////////////
MOV ADNUMBER,#00H ;AD轉(zhuǎn)換數(shù)初值
;顯示高低位初值///////////////////////////////
MOV DISADL,#00H
MOV DISADH,#00H
;//////////////////////////////////////////////////
;顯示賦初值////////////////////////////////////////
MOV DISFLAG,#00H
MOV DISL,#00H
MOV DISH,#00H
;//////////////////////////////////////////////////
;頻率賦初值////////////////////////////////////////
MOV F2H,#0F6H
65
MOV F2L,#3BH
MOV F3H,#0F8H
MOV F3L,#2FH
;//////////////////////////////////////////////////
CLR P1.0 ;在P1.0口產(chǎn)生一
個(gè)低電平,一個(gè)脈沖是由一個(gè)高電平和一個(gè)低電平組成的
MOV TMOD,#00010000B;定時(shí)器工作于方
式1
MOV TH1,F2H
MOV TL1,F2L ;200HZ輸出
SETB EA ;開(kāi)總中斷
SETB TR1 ;開(kāi)定時(shí)器1運(yùn)行
SETB ET1 ;開(kāi)定時(shí)器1允許
ADDIS:
ACALL AD ;呼叫AD子程序
;將轉(zhuǎn)換的數(shù)字量屏蔽高位低位送DISADL保存////////////
MOV A,ADNUMBER
ANL A,#0FH
MOV DISADL,A
;//////////////////////////////////////////////////
;將轉(zhuǎn)換的數(shù)字量屏蔽低位,將高位送DISADH保存////////
MOV A,ADNUMBER
ANL A,#0F0H
SWAP A
MOV DISADH,A
;//////////////////////////////////////////////////
DISPLAY:
MOV A,DISADL
66
MOV DPTR,#SETTAB
MOVC A,@A+DPTR
MOV SBUF,A
D1: JNB TI,D1
CLR TI
MOV A,DISADH
MOV DPTR,#SETTAB
MOVC A,@A+DPTR
MOV SBUF,A
D2: JNB TI,D2
CLR TI
MOV A,DISL
MOV DPTR,#SETTAB
MOVC A,@A+DPTR
MOV SBUF,A
D3: JNB TI,D3
CLR TI
MOV A,DISH
MOV DPTR,#SETTAB
MOVC A,@A+DPTR
MOV SBUF,A
D4: JNB TI,D4
CLR TI
ACALL DELAY
AJMP ADDIS
LOOP: AJMP LOOP
DIN1:
PUSH ACC
67
CPL P1.0 ;取反P1.0口,實(shí)際是為了
不斷的將p1.0的電平關(guān)系轉(zhuǎn)換,即產(chǎn)生了頻率
;頻率保持時(shí)間//////////////////////////////////////
DJNZ R1,RE
MOV R1,#100
DJNZ R2,RE
MOV R2,#02H
;//////////////////////////////////////////////////
INC DISFLAG
MOV ` A,DISFLAG
CJNE A,#0AH,FF
MOV DISFLAG,#00H
INC DISL
MOV A,DISL
CJNE A,#0AH,FF
MOV DISL,#00H
INC DISH
;//////////////////////////////////////////////////
FF: MOV A,F2H
CJNE A,F3H,XIA ;頻率高位到300HZ的高位
了嗎?
AJMP JIA
;頻率高位沒(méi)到300HZ的高位值,直接將低位值加1///////
XIA: INC F2L
MOV A,F2L
CJNE A,#00H,RE
INC F2H
MOV A,F2H
68
CJNE A,F3H,RE
;//////////////////////////////////////////////////
;頻率高位加到300HZ的高位值了,低位加一,到300HZ的低
位值了嗎,沒(méi)到出去,到了關(guān)定時(shí)器///////////////////
JIA:
INC F2L ;到了將200HZ頻率的低位
加1
MOV A,F2L
CJNE A,#F3L,RE
CLR TR1
;//////////////////////////////////////////////////
RE:
MOV TH1,F2H
MOV TL1,F2L
POP ACC
RETI
AD: MOV DPTR,#7F00H ;指向轉(zhuǎn)換地址
MOV A,#03H ;指向轉(zhuǎn)換口
MOVX @DPTR,A ;轉(zhuǎn)換
MOV 40H,#64H
D6: DJNZ 40H,D6 ;等100微秒轉(zhuǎn)換完
MOVX A,@DPTR ;轉(zhuǎn)換后的值給A
MOV ADNUMBER,A ;轉(zhuǎn)換的值給30H
RET
DELAY:
MOV R3,#0FFH
D5: DJNZ R3,D5
RET
69
SETTAB:
DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,
0FEH,0F6H
DB 0EEH,3EH,9CH,7AH,9EH,8EH ;數(shù)顯代碼
END |