求教一个单片机ADC0808或者0809的AD转换C语言程序,如果可以和PC机通信就非常感谢了

求教一个单片机ADC0808或者0809的AD转换C语言程序,如果可以和PC机通信就非常感谢了,第1张

//------------------------------------------------------------

// ADC0809模数转换

//ADC0809采样通道3输入的模拟量,转换后结果显示在数码管上

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

//ADC0809引脚定义

sbit OE=P1^0

sbit EOC=P1^1

sbit ST=P1^2

sbit CLK=P1^3

//延时

void Delayms(uint ms)

{

uchar i

while(ms--)for(i=0i<120i++)

}

//显示转换结果

void Display_Result(uchar d)

{

P2=0xf7

P0=LEDData[d%10]

Delayms(5)

P2=0xfd

P0=LEDData[d%100/10]

Delayms(5)

P2=0xfd

P0=LEDData[d/100]

Delayms(5)

}

// 主程序

void main()

{

TMOD=0x02

TH0=0x14

TL0=0x00

IE=0x82

TR0=1

P1=0x3f//选择ADC0809通道3(0111)

//高4位设通道地址为0111

while(1)

{

ST=0ST=1ST=0//启动转换

while(EOC==0) //等待转换结果

OE=1 //允许输出

Display_Result(P3) //显示A/D转换结果

OE=0 //关闭输出

}

}

//T0定时器中断给ADC0809提供时钟信号

void Timer0_INT() interrupt 1

{

CLK=!CLK//ADC0809时钟信号

}

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

@DPTR,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

0000H和000BH是固定的,000BH是中断入口地址

那个0100H应该是根据程序的长短来定的,要看你单片机的程序存储器有多大,还有程序的前面要放多少东西了。7FF8H

这个是0809AD转换器的地址,51单片机的P2口默认为十六位地址的高八位地址,要根据是不是有其它的外围设备来定地址,如果没接的话,可以随便来定!!MOVX

@DPTR,A这句是用来启动0809,不用知道A里放的是什么东西,有这句的话0809就会被启动了

HERE

SJMP

HERE

这句无限循环

应该是用来等待中断的

end的话程序会被终止,中断程序也不会再被执行了

LED那个你需要知道LED的结构很简单,网上很容易找

硬件地址的分配是看你接的那几根线了,原则上只要不重复应该都可以

有一些

是电路直接与单片机I/0口连接,而没有经过AD转换,请问什么“情况下可以进行这样的处理,也就是说,单片机I/0口可以接多大的电流或者电压?”这句电压的话一般是5V,但是那个AD不是因为电压不匹配才接的,单片机要的是数字量,AD是将模拟两转换成数字量的!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11009306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存