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),自己详细分析一下就可以了