1. 急求:單片機 0809AD轉換匯編程序
st
equ
p3.7
eoc
equ
p3.6
oe
equ
p3.5
BAI
EQU
30H
SHI
EQU
31H
GEWEI
EQU
32H
org
0000h
MOV
DPTR,#0FEF8H
;AD轉換IN0通道地址
MOV
A,#00H
MOVX
@,A
;啟動AD轉換
START:
clr
st
setb
st
clr
st
jnb
eoc,$
setb
oe
mov
30H,P2
clr
oe
mov
a,30h
mov
b,#100
div
ab
LOOP:
MOV
BAI,A
MOV
SHI,B
MOV
A,SHI
MOV
B,#10
DIV
AB
MOV
SHI,A
MOV
GEWEI,B
MOV
A,BAI
MOV
P1,A
CLR
P3.2
LCALL
DELAY
SETB
P3.2
MOV
A,SHI
MOV
P1,A
CLR
P3.1
LCALL
DELAY
SETB
P3.1
MOV
A,GEWEI
mov
p1,a
CLR
P3.0
LCALL
DELAY
SETB
P3.0
SJMP
START
DELAY:
mov
R6,#5
D1:
MOV
R7,#200
DJNZ
R7,$
DJNZ
R6,D1
RET
end
這是我編的程序,可以用,你只用0通道的話那就把那個通道選擇的三個引腳全接地就是了。
MOV
DPTR,#0FEF8H
;AD轉換IN0通道地址
MOV
A,#00H
MOVX
@DPTR,A
;啟動AD轉換
這個是啟動轉換的語句
以上的程序是實現,電位器調節過程中,數碼管從0到255變化
ADC0809要工作得在單片機的ALE腳上接個四分頻的器件,不然ADC0809是不會工作的。QQ:77254708
2. 請教一個關於AD轉換器的程序問題,必須用匯編語言
給你一個AD轉換子程序,轉換結果注釋了,你自己根據需要改下就行了。
你的模擬圖中,ADS7825的控制腳看不清,你根據自己的仿圖改一下引腳定義就行了。
引腳定義為
BYTE BIT P1.2 ;ADS7825定義引腳
BUSY BIT P1.3
CS BIT P1.4
RC BIT P1.5
轉換子程序如下:
;**********AD轉換子程序**********
ADSConvert: ;通道選擇在R6中
MOV A , #0FCH
ADD A , R6
MOV P1, A ;P1口選擇模擬量輸入通道
CLR CS
CLR RC
SETB RC
JNB BUSY,$ ;等待轉換結束
CLR BYTE ;先讀高8位
MOV adnumh,P0 ;從P0口讀出高8位,放在adnumh中,自己改成30H或32H
SETB BYTE ;後讀低8位
MOV adnuml,P0 ;從P0口讀出低8位,放在adnuml中,自己改成31H或33H
SETB CS
RET ;轉換結束在adnumh,adnumh中
最後要說明一點,ADS7825輸入的模擬電壓范圍是正負10V的,不知你的模擬圖的電壓是多少?
還有,讀出的數據結果是16位的帶符號數,即模擬電壓是負時,轉換的結束是負數。電壓是正時,轉換結果是正數。你要處理好正負數的顯示。
3. 求AD轉換單片機實驗的匯編程序
接線:p3.6接srd
p3.7接swr
p3.0接pin
p3.1接clk
ad0809的clk接脈沖
cs接8000h的解碼電路程序:ad0809 xdata 8000h
org 0000h
ajmp main
org 0030h
main:mov dptr,#8000h
mov a,#01h
movx @dptr,a
call delay
movx a,@dptr
mov r0,a
call disp
call delay
call delay
call delay
ajmp maindisp:mov a,r0
anl a,#00001111b
acall dsend
mov a,r0
swap a
anl a,#00001111b
acall dsend
ret
dsend:mov dptr,#tab
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
ret delay:mov r4,#250
delay1:mov r5,#250
djnz r5,$
djnz r4,delay1
ret
tab:db 03h ;0
db 9fh ;1
db 25h ;2
db 0dh ;3
db 99h ;4
db 49h ;5
db 41h ;6
db 1fh ;7
db 01h ;8
db 09h ;9
db 11h ;滅
db 11h
db 0c1h
db 63h
db 85h
db 61h
db 71h
db 00h
end
4. 51單片機與AD轉換程序
/*
此程序通過對DAC0832操作,實現D/A轉換。按INT1鍵DAC0832輸出電壓變高,按s3鍵DAC0832電壓變低。
輸出介面是"D/A OUT"
*/
#include<reg51.h>
//////////////////////
sbit le1=P1^0;/*ic1 74hc373使能端*/
sbit dac0832_cs=P3^7;
sbit dac0832_wr=P1^1;
sbit int1_k=P3^3;
sbit s3_k=P3^6;
sbit blight=P0^6;
void s_q00();
void s_q01();
void s_q02();
void s_q03();
void s_q04();
void s_q05();
void s_q06();
void s_q07();
void c_q00();
void c_q01();
void c_q02();
void c_q03();
void c_q04();
void c_q05();
void c_q06();
void c_q07();
//void delay1();
void delayms(unsigned int i);
void delay100us() ;
void initi_lcd();
void initi();
void c_rw();
void s_rw();
void c_e();
void s_e();
void c_rs(void);
void s_rs(void);
void display(unsigned int addr,char a);
void out_74ls164(unsigned char i);
unsigned char q1=0;
unsigned char da_out_74ls164=0,pwm1=0;
void d_to_a(unsigned char dat)//DAC0832寫函數。
{
out_74ls164(dat);
//c_q14(); /*片選*/
dac0832_cs=0;
//c_q13(); /*寫數據*/
//s_q13();
dac0832_wr=0;
dac0832_wr=1;
// s_q14();/*禁止轉換*/
dac0832_cs=1;
}
main()
{
unsigned char dat=0;
initi_lcd();
display(0,'o');
display(1,'u');
display(2,'t');
display(3,'p');
display(4,'u');
display(5,'t');
display(6,':');
display(7,0x30+dat/100);display(8,0x30+dat%100/10);display(9,0x30+dat%10);
while(1)
{
if(int1_k==0) {dat++;display(7,0x30+dat/100);display(8,0x30+dat%100/10);display(9,0x30+dat%10);}
if(s3_k==0) {dat--;display(7,0x30+dat/100);display(8,0x30+dat%100/10);display(9,0x30+dat%10);}
blight=1;
d_to_a(dat);
delayms(60);
}
}
void display(unsigned int addr,char a)
{
s_e();
c_rs();
c_rw();
// P0=0x80+i;
out_74ls164(0x80+addr); /*寫地址*/
c_e();
delay100us();
s_e();
s_rs();
//P0=a;
out_74ls164(a);/*寫數據*/
c_e();
delay100us();
s_e();
}
void delayms(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=100;j>0;j--);
}
void initi_lcd()
{
delayms(10);
c_rw();
s_e();
c_rs();
// P0=0x01;
out_74ls164(0x01);
c_e();
delayms(5);
s_e();
c_rs();
// P0=0x38;
out_74ls164(0x38);
c_e();
delayms(5);
s_e();
//P0=0x0f;
out_74ls164(0x0f);
c_e();
delayms(5);
s_e();
// P0=0x04;
out_74ls164(0x04);
c_e();
delayms(5);
s_e();
}
void out_74ls164(unsigned char i)
{
unsigned char j,i_tem;
// s_q27();
for(j=0;j<8;j++)
{
i_tem=i<<j;
if(i_tem&0x80)s_q01();/*74ls164數據*/
else c_q01();
c_q00();/*74ls164時鍾*/
s_q00();
}
}
void s_rs(){s_q05();}
void c_rs(){c_q05();}
void s_rw(){s_q06();}
void c_rw(){c_q06();}
void s_e(){s_q07();}
void c_e(){c_q07();}
void delay100us() { unsigned int i=2; for(;i>0;i--); }
///////////////////////////////////////////////////////
//////////////////////////////////////////////////
/*74hc373擴展介面函數:s表示置1,c表示置0,q1表示ic1 74hc373 ,
q2表示ic2 74hc373 ,僅接著的數字表示相應輸出Q的序號 */
void s_q00(){q1=q1|0x01; P0=q1; le1=1; le1=0; }
void s_q01(){q1=q1|0x02; P0=q1; le1=1; le1=0; }
void s_q02(){q1=q1|0x04; P0=q1; le1=1; le1=0; }
//void s_q03(){q1=q1|0x08; P0=q1; le1=1; le1=0; }
void s_q04(){q1=q1|0x10; P0=q1; le1=1; le1=0; }
void s_q05(){q1=q1|0x20; P0=q1; le1=1; le1=0; }
void s_q06(){q1=q1|0x40; P0=q1; le1=1; le1=0; }
void s_q07(){q1=q1|0x80; P0=q1; le1=1; le1=0; }
void c_q00(){q1=q1&(~0x01); P0=q1; le1=1; le1=0;}
void c_q01(){q1=q1&(~0x02); P0=q1; le1=1; le1=0;}
void c_q02(){q1=q1&(~0x04); P0=q1; le1=1; le1=0;}
//void c_q03(){q1=q1&(~0x08); P0=q1; le1=1; le1=0;}
void c_q04(){q1=q1&(~0x10); P0=q1; le1=1; le1=0;}
void c_q05(){q1=q1&(~0x20); P0=q1; le1=1; le1=0;}
void c_q06(){q1=q1&(~0x40); P0=q1; le1=1; le1=0;}
void c_q07(){q1=q1&(~0x80); P0=q1; le1=1; le1=0;}
一塊實驗板的例子,DA轉換(DAC0832),自己詳細分析一下就可以了