51單片機(jī)驅(qū)動(dòng)ADC0808電路圖C51及匯編程序
void ad3(void)
{
WA=0; //通道1
WB=1;
WC=0;
START=1;
START=0; //啟動(dòng)轉(zhuǎn)換
while(EOC==0); //轉(zhuǎn)換結(jié)束信號(hào),為0則說(shuō)明轉(zhuǎn)換結(jié)束
OE=1; //輸出允許信號(hào),為真,可以輸出
data6=P0; //P0口的測(cè)量值送到TVDATE
OE=0; //關(guān)輸出允許
}
void main(void)
{
data1=0X01;
data3=0X02;
data5=0X03;
ad1();
ad2();
ad3();
loop:
ledxianshi();
ad1();
if ((data7-data2)>0)
{
data2=data7;
ad2();
ad3();
csh();
goto loop ;
}
else
goto loop ;本文引用地址:http://www.biyoush.com/article/201611/323982.htm
}
----------------------------------------------------------------------------------
A51匯編程序:
;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA1 DATA 60H
DATA2 DATA 61H
DATA3 DATA 62H
DATA4 DATA 63H
DATA5 DATA 64H
DATA6 DATA 65H
DATA7 DATA 66H
DATA8 DATA 67H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LDATA DATA 54H
;;;;;;;;;;;;;;;;;;;;;;;
EOC BIT P3.7 ;接口定義
ST BIT P3.6
OE BIT P3.5
WC BIT P3.4
WB BIT P3.3
WA BIT P3.2
K1 BIT P2.4
K2 BIT P2.5
K3 BIT P2.6
K4 BIT P2.7
ORG 0000H
AJMP SEND
ORG 0030H
SEND: MOV TMOD,#20H ;串口初始化
MOV TH1,#0F3H ;傳輸波特率2400
MOV TL1,#0F3H
MOV SCON,#50H
MOV PCON,#00H
SETB TR1
MOV DATA1,#01H ;識(shí)別碼定義,每個(gè)識(shí)別碼對(duì)應(yīng)一個(gè)數(shù)據(jù)
MOV DATA3,#02H
MOV DATA5,#03H
LP1: CLR WB ;AD口選擇:000位通道0數(shù)據(jù)
CLR WA
CLR WC
CLR ST
SETB ST
CLR ST
JNB EOC,$
SETB OE
MOV DATA2,P0 ;將臨時(shí)存儲(chǔ)器上的數(shù)據(jù)送給數(shù)據(jù)1
LP2: CLR WC ;AD口選擇:001位通道1數(shù)據(jù)
CLR WB
SETB WA
CLR ST
SETB ST
CLR ST
JNB EOC,$
SETB OE
MOV DATA4,P0 ;將檢測(cè)的數(shù)據(jù)送給數(shù)據(jù)2
CLR OE
LP3: CLR WC ;AD口選擇:010位通道2數(shù)據(jù)
SETB WB
CLR WA
CLR ST
SETB ST
CLR ST
JNB EOC,$
SETB OE
MOV DATA6,P0 ;將檢測(cè)的數(shù)據(jù)送給數(shù)據(jù)3
CLR OE
LCALL TT0 ;調(diào)用串口數(shù)據(jù)傳輸程序
LP: LCALL LEDSHOW ;調(diào)用顯示程序
CLR WC
CLR WB
CLR WA
CLR ST
SETB ST
CLR ST
JNB EOC,$
SETB OE
MOV LDATA,P0 ;將通道0的檢測(cè)數(shù)據(jù)送送給臨時(shí)存儲(chǔ)器
CLR OE
MOV A,LDATA
CJNE A,DATA2,DADA ;數(shù)據(jù)1不等于臨時(shí)數(shù)據(jù),跳轉(zhuǎn)到數(shù)據(jù)比較,
AJMP LP ;如果相等,執(zhí)行這條指令;
DADA:JC XIXI ;臨時(shí)數(shù)據(jù)小于數(shù)據(jù)1,跳轉(zhuǎn)到小值指令;
AJMP LP1 ;臨時(shí)數(shù)據(jù)大于數(shù)據(jù)1,跳到重新判斷三個(gè)數(shù)據(jù)值
XIXI:AJMP LP ;數(shù)據(jù)1小于臨時(shí)數(shù)據(jù),執(zhí)行這條指令,繼續(xù)判斷;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TT0: MOV SBUF,DATA1 ;編碼1送入串口SBUF
SENT0: JBC TI,SENWT1 ;判斷發(fā)送是否完成,完成則跳到SENWT1,沒(méi)有完成,執(zhí)行下一條指令
LCALL LEDSHOW ;調(diào)用數(shù)據(jù)顯示程序
SJMP SENT0 ;返回繼續(xù)檢測(cè)發(fā)送完成指令
SENWT1: CLR TI ;關(guān)閉發(fā)送
MOV SBUF ,DATA2;將數(shù)據(jù)1送入串口SBUF
SENWT2: JBC TI,SENWT3 ;判斷發(fā)送是否完成,完成則跳到SENWT3,沒(méi)有完成,執(zhí)行下一條指令
LCALL LEDSHOW ;
AJMP SENWT2 ;返回繼續(xù)檢測(cè)發(fā)送完成指令
SENWT3: CLR TI ;關(guān)閉發(fā)送
;以下程序相同功能,發(fā)送另外兩組數(shù)據(jù)
TT0_2: MOV SBUF,DATA3 ;
SENT0_2: JBC TI,SENWT1_2;
LCALL LEDSHOW ;
SJMP SENT0_2 ;
SENWT1_2: CLR TI ;
MOV SBUF ,DATA4;
SENWT2_2: JBC TI,SENWT3_2;
LCALL LEDSHOW ;
AJMP SENWT2_2 ;
SENWT3_2: CLR TI ;
;
TT0_3: MOV SBUF,DATA5 ;
SENT0_3: JBC TI,SENWT1_3;
LCALL LEDSHOW ;
SJMP SENT0_3 ;
SENWT1_3: CLR TI ;
MOV SBUF ,DATA6;
SENWT2_3: JBC TI,SENWT3_3;
LCALL LEDSHOW ;
AJMP SENWT2_3 ;
SENWT3_3: CLR TI ;
RET ;數(shù)據(jù)發(fā)送完成,退出子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;數(shù)據(jù)顯示
LEDSHOW: MOV R1,#60H
MOV P2,#0F0H
LEDSHOW_1:
MOV A,@R1
MOV B,#16
DIV AB
LCALL LED
INC P2
MOV A,B
LCALL LED
INC P2
INC R1
MOV A,R1
CJNE A,#66H,LEDSHOW_1
RET
;;;;;;;;;;;;;;數(shù)碼管顯示
LED: MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
RET
TABLE:
DB 0C0H ;"0"
DB 0F9H ;"1"
DB 0A4H ;"2"
DB 0B0H ;"3"
DB 99H ;"4"
DB 92H ;"5"
DB 82H ;"6"
DB 0F8H ;"7"
DB 80H ;"8"
DB 90H ;"9"
DB 0C8H ;"A"
DB 083H ;"B"
DB 0C6H ;"C"
DB 0A1H ;"D"
DB 086H ;"E"
DB 08EH ;"F"
DB 0BFH ;"-"
DELAY1:
MOV R7,#10
L1: MOV R6,#50
DJNZ R6,$
DJNZ R7,L1
RET
DELAY:
MOV R5,#250
D1: MOV R6,#200
D2: DJNZ R6,D2
DJNZ R5,D1
RET
END
評(píng)論