您的当前位置:首页正文

单片机8051通过74LS373与ADC0809的ABC的八路模拟量输入的巡回监测系统

2024-07-16 来源:意榕旅游网



如图一所示是一个八路模拟量输入的巡回监测系统,采样数据依次存放在RAM30H37H

元中,按图所示的接口电路,P0.0~P0.2通过74LS373ADC0809ABC的八路模拟开关的

地址线相连,请说明图中各路信号的作用,8路模拟量通道地址,编写八路数据采集程序

A0 A7

P0
74LS373A0A1A2

ALE

2

89S51

INT 1

1

1

A

+5V

CLK

B
C
VR

D0

(+)
VR

GND

D7

(-)

IN0

EOC

ADC0809

WR

START

P2.0

1

ALE

IN7

OE

RD

一个八路模拟量输入的巡回监测系统IN0~IN78路模拟量输入端。

D0~D78位数字量输出端。

ABC3位地址输入线,用于选择8路模拟通道中的一路。

ALE:地址锁存允许信号,输入,高电平有效。

STARTA/D转换启动信号,输入,高电平有效。

EOCA/D转换结束信号,输出。

0:正在进行转换;
1:一次转换完成。

OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。

CLK:时钟脉冲输入端。其内部无时钟电路。要求时钟频率不高于640KHZ.

VR+VR-:基准电压输入端。决定输入模拟量的范围。典型值分别为+5V0V8路模拟通道的地址:0000H0007H

汇编语言编程:中断方法
ORG 0000H
LJMP MAIN
ORG 0003H



LJMP INT0

ORG 0100H ;主程序

MAIN MOV R0#30H MOV R2#08H

;设立数据存储区指针
;设置8路采样计数值

SETB IT0 ;设置外部中断0 为边沿触发方式

SETB EA CPU 开放中断

SETB EX0 ;允许外部中断0 中断

MOV DPTR#0000H ;送入口地址并指向IN0

LOOP MOVX @DPTRA ;启动A/D 转换,A 的值无意义

HERE SJMP HERE ;等待中断

ORG 0200H ;中断服务程序

INT0 MOVX A@DPTR ;读取转换后的数字量

MOV @R0A ;存入片内RAM 单元

INC DPTR ;指向下一模拟通道

INC R0 ;指向下一个数据存储单元

DJNZ R2NEXT 8 路未转换完,则继续

CLR EA ;已转换完,则关中断

CLR EX0 ;禁止外部中断0 中断

RETI ;中断返回

NEXT MOVX @DPTRA ;再次启动A/D 转换

RETI ;中断返回

C 语言编程:

#include <reg51.h>

#include <absacc.h> //定义绝对地址访问

#define uchar unsigned char

#define IN0 XBYTE[0x0000] static uchar data x[8];
uchar xdata *ad_adr;
uchar i=0;
void main(void)
{

//定义IN0为通道0的地址
//定义8个单元的数组,存放结果 //定义指向通道的指针

IT0=1; //初始化

EX0=1;

EA=1;

i=0;

ad_adr=&IN0; //指针指向通道0

*ad_adr=i; //启动通道0 转换

for (;;) {;} //等待中断

}

void int_adc(void) interrupt 0 //中断函数

{

x[i]=*ad_adr; //接收当前通道转换结果



i++;
ad_adr++; //指向下一个通道
if(i<8)
{
*ad_adr=i; //8个通道未转换完,启动下一个通道返回}
else
{
EA=0;EX0=0; //8个通道转换完,关中断返回
}
}

显示全文