|
程序介紹:將ADC0809輸入的兩個(gè)不同電壓(相同電
壓也可相加,只是為舉例說明,所以取不同電壓)所對(duì)應(yīng)
的16進(jìn)制數(shù)相加顯示出來。實(shí)際應(yīng)用例如:取代加法運(yùn)放
電路。
程序操作:程序?qū)懲晟想娺\(yùn)行后,用本機(jī)配帶的鐘表
起微調(diào)圖16所示電位器,輸入兩個(gè)不同電壓,數(shù)碼管會(huì)顯
示兩個(gè)不同的對(duì)應(yīng)16進(jìn)制數(shù),隨后數(shù)碼管會(huì)顯示兩個(gè)16
進(jìn)制數(shù)相加的值。
程序?qū)嵗?SPAN lang=EN-US>add2.asm):
ORG 0000H
MAIN:
ADNUMBER EQU 30H ;AD轉(zhuǎn)換值
ADDNUMBER EQU 31H ;加數(shù)值1
ADL EQU 32H ;//
ADH EQU 33H ;ADL轉(zhuǎn)換高低位值
DISL EQU 34H ;//
DISH EQU 35H ;顯示高低位值
ADDTOTAL EQU 36H ;第一次AD轉(zhuǎn)換值
ADDJW EQU 37H ;加法進(jìn)位數(shù)
ADDHOLD EQU 38H
;賦初值////////////////////////////////////////////
MOV ADDHOLD,#00H
MOV ADDNUMBER,#00H
MOV ADL,#00H
MOV ADH,#00H
MOV DISL,#00H
22
MOV DISH,#00H
MOV ADDJW,#00H
MOV ADDTOTAL,#00H
;//////////////////////////////////////////////////
MAIN1:
ACALL AD ;呼叫AD子程序
ACALL DELAY ;延時(shí)
ACALL CAIFEN ;呼叫AD值拆分為高
低的程序
ACALL DISPLAY ;呼叫顯示子程序
MOV A,ADNUMBER ;取AD值
CJNE A,ADDHOLD,ADD3 ;與上次AD值比
較,不相等,即輸入了新的AD值,去AD3執(zhí)行
AJMP MAIN1 ;是相等的,證
明沒有輸入新的AD值,回去顯示老的AD值
ADD3: MOV A,ADDHOLD
CJNE A,#00H,ADD4
MOV ADDHOLD,ADNUMBER ;有一種情況就
是是第一次進(jìn)來,AD保持值里面是放的初值00,與取的AD值
不同,是這種情況,也返回去
AJM MAIN1
ADD4: MOV ADDNUMBER,ADDHOLD ;是真的輸入
了新的AD值,將上次AD值給加數(shù),為調(diào)加法程序做準(zhǔn)備
MOV ADDHOLD,ADNUMBER ;將這次的AD
值也保持起來。準(zhǔn)備與上一個(gè)AD值相加
;顯示這次輸入的AD值////////////////////////////////
ACALL DELAY
ACALL CAIFEN
23
ACALL DISPLAY
;//////////////////////////////////////////////////
DISPLAY1:
ACALL DELAY ;延時(shí)
ACALL ADD1 ;呼叫加法子程序
ACALL DISPLAY ;顯示
LOOP: AJMP LOOP ;返回主程序
;///////////////////////////////////////AD轉(zhuǎn)換
AD:
MOV DPTR,#7F00H;指向轉(zhuǎn)換地址
MOV A,#03H ;指向轉(zhuǎn)換口
MOVX @DPTR,A ;轉(zhuǎn)換
MOV R1,#64H
D1: DJNZ R1,D1 ;等100微秒轉(zhuǎn)換完
MOVX A,@DPTR ;轉(zhuǎn)換后的值給A
MOV ADNUMBER,A ;轉(zhuǎn)換的值給30H
RET
;//////////////////////////////////////////////////
;拆分AD值程序//////////////////////////////////////
CAIFEN:
MOV A,ADNUMBER
ANL A,#0FH
MOV ADL,A ;取低位
MOV A,ADNUMBER
ANL A,#0F0H
SWAP A
MOV ADH,A ;取高位
MOV DISL,ADL
24
MOV DISH,ADH ;給顯示值
RET
;//////////////////////////////////////////////////
;顯示//////////////////////////////////////////////
DISPLAY:
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
MOV A,ADDJW
MOV DPTR,#SETTAB
MOVC A,@A+DPTR
MOV SBUF,A
D5: JNB TI,D5
CLR TI
MOV SBUF,#00H
D6: JNB TI,D6
CLR TI
RET
;//////////////////////////////////////////////////
25
;加法程序//////////////////////////////////////////
ADD1:
CLR C
MOV A,ADDNUMBER ;取上次AD值
ADDC A,ADDHOLD ;與這次AD值相加
MOV ADDTOTAL,A ;將此次加的值給和
值
JNC ADDJW1 ;有無進(jìn)位?
INC ADDJW ;有進(jìn)位,進(jìn)位值給
ADDJW
ADDJW1: ANL A,#0FH
MOV DISL,A ;加值取低位
MOV A,ADDTOTAL
ANL A,#0F0H
SWAP A
MOV DISH,A ;加值取高位
RET
;//////////////////////////////////////////////////
DELAY: ;延時(shí)
MOV R3,#0AH
DD1: MOV R1,#0FFH
D2 : MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,D2
DJNZ R3,DD1
RET
SETTAB:
DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,
26
0FEH,0F6H
DB 0EEH,3EH,9CH,7AH,9EH,8EH
END |