8051 c n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
第十一章 8051 数据采集的 C 编程 PowerPoint Presentation
Download Presentation
第十一章 8051 数据采集的 C 编程

Loading in 2 Seconds...

play fullscreen
1 / 31

第十一章 8051 数据采集的 C 编程 - PowerPoint PPT Presentation


  • 210 Views
  • Uploaded on

第十一章 8051 数据采集的 C 编程. 11.1 8 位 A/D 芯片 ADC0809 11.2 12 位 A/D 芯片 ADC574 11.3 V/F 变换芯片 AD650 11.4 频率量的测量. 11.1 8 位 A/D 芯片 ADC0809. 11.1.1 ADC0809 的结构和引脚. 一个 8 位逐次逼近式 A/D 转换器、 8 路模拟转换开关、 3-8 地址锁存译码器和三态输出数据锁存器。. 2 、引脚功能. IN0—IN7 : 8 通道模拟量输入端 D0—D7 : 8 位数字量输出端

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '第十一章 8051 数据采集的 C 编程' - tamah


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
11 1 8 a d adc0809 11 2 12 a d adc574 11 3 v f ad650 11 4
11.1 8位A/D芯片ADC0809

11.2 12位A/D芯片ADC574

11.3 V/F变换芯片AD650

11.4 频率量的测量

11 1 8 a d adc0809
11.1 8位A/D芯片ADC0809

11.1.1 ADC0809的结构和引脚

一个8位逐次逼近式A/D转换器、8路模拟转换开关、3-8地址锁存译码器和三态输出数据锁存器。

slide4

2、引脚功能

IN0—IN7:8通道模拟量输入端 D0—D7: 8位数字量输出端

ADDC、ADDB、ADDA:

接地址锁存器的低三位地址

ALE: 地址锁存允许控制信号

START:清0内寄存器,启动转换

OE: 允许读A/D结果,高有效

CLK:时钟输入端,应≤640KHz

EOC:转换结束时为高

Vcc:+5V

Vref+:参考电压,+5V

Vref-:0V

IN3 IN2

IN4 IN1

IN5 IN0

ADC0809

IN6 ADDA

IN7 ADDB

EOC ALE

D3 D7

OE D6

CLK D5

VCC D4

Vref+ D0

GND Vref-

D1 D2

11 1 2 adc0809 8051
11.1.2 ADC0809与8051的接口

锁存器74LS373

89C51单片机

ADC 0809

口地址可以为:0FE00~0FE07H 也可为:0FEF0~ 0FEF7H

D0-D7

ADDA

P0.0-P0.7

8D

Q0

Q1

ADDB

ALE

G

+5V

Q2

ADDC

EA

2

OE

30Px2

CLK

WR

START

≥1

ALE

P2.0

6MHz

EOC

≥1

OE

INT1

RD

CK Q

图中的2分频电路可用D触发器实现

D /Q

slide7

#include<absacc.h>

#include<reg51.h>

#define uchar unsigned char

#define IN0 XBYTE[0xFEF8] /*设置ADC0809的通道0地址*/

sbit ad_busy=P3^3; /*即EOC状态*/

void ad0809(uchar idata * x) /*采样结果放指针中的A/D采集函数*/

{ uchar i;

uchar xdata * ad_adr;

ad_adr=&IN0;

for(i=0;i<8;i++) /*处理8通道*/

{ *ad_adr=0; /*启动转换*/

i=i; /*延时等待EOC变低*/

i=i;

while(ad_busy==0); /*查询等待转换结束*/

x[i]=*ad_adr; /*存转换结果*/

ad_adr++; /*下一通道*/

}

}

void main(void)

{ static uchar idata ad[10];

ad0809(ad); /*采样ADC0809通道的值*/

}

11 2 12 a d adc574
11.2 12位A/D芯片ADC574

11.2.1 ADC574的结构和引脚

AD574是一种快速的12位逐次比较式A/D转换芯片,片内有两片双极型电路组成的28脚双插直列式芯片,无需外接元器件就可独立完成A/D转换功能。内部设有三态数据输出锁存器。一次转换时间为25μs。芯片引脚如图所示。

slide9

2、AD574的引脚定义

REOUT:内部参考电源输出(+10 V);

REFIN:参考电压输入;

BIP:偏置电压输入;

10VIN:±5 V或0~10 V模拟输入;

20VIN:±10 V或0~20 V模拟输入;

DB0~DB11:数字量输出

STS:工作状态指示端。

STS=1时表示转换器正处于转换状态,

STS返回到低电平时,表示转换完毕。

slide10

12/-8:变换输出字长选择控制端,在输入为高电平时,变换字长输出为12位,在低电平时,按8位输出;12/-8:变换输出字长选择控制端,在输入为高电平时,变换字长输出为12位,在低电平时,按8位输出;

CS、CE:片选信号。当CS=0、CE=1同时满足时,AD574才能处于工作状态。

R/C:数据读出和数据转换启动控制;

A0:字节地址控制。它有两个作用:

在启动AD574(R/-C=0)时,用来控制转换长度。A=0时,按完整的12位A/D转换方式工作,A=1时,则按8位A/D 转换方式工作。

在AD574处于数据读出工作状态(R/-C=1)时,A0和12/8成为输出数据格式控制。

slide11

CE

CS

R/ C

12/ 8

A0

功能说明

1

0

0

×

0

启动12位转换

1

0

0

×

1

启动8位转换

1

0

1

+5V

×

12位输出

1

0

1

0

高8位输出

1

0

1

1

低4位输出

表11-1 AD574控制信号状态表

slide17

# include < absacc.h >

# inlucde < reg51.h >

# define uint unsigned int

# define ADCOM XBYTE[ 0xff7c ] /* 使A0=0 ,R/C=0, CS=0 */

# define ADLO XBYTE [ 0xff7f ] /* 使 R/C =1,A0=1, CS=0 */

# define ADHI XBYTE [ 0xff7d ] /* 使R/C=1,A0=0,CS =0 */

sbit r = P3 ^ 7 ;

sbit w = P3 ^ 6 ;

sbit adbusy = P1 ^ 0 ;

slide18

uint ad574 ( void ) /* AD574转换器 */

{ r = 0 ; /* 产生CE=1 */

w = 0 ;

ADCOM = 0 ; /* 启动转换 */

while ( adbusy = =1 ) ; /* 等待转换 */

return ( ( uint )(ADHI<<4 )+( ADLO &0x0f ) ); /* 返回12位采样值 */

}

main ( )

{ uint idata result ;

result =ad574 ( ) ; /* 启动AD574进行一次转换,得转换结果 */

}

11 3 v f ad650
11.3 V/F变换芯片AD650

压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。

采用V/F变换的数据采集的特点:

(1) 接口简单,容易实现信号的隔离。

(2)性价比较高。

(3)频率信号抗干扰能力强。

(4)容易实现远程传输。

slide22
11.4 频率量的测量

定时

输入脉冲

< T

11.4.1 测量频率法

测量频率法的最简单的接口电路,可将频率脉冲直接连接到MCS-51的T1端,将8031的T/C0用作定时器,T/C1用作计数器。在T/C0定时时间里,对频率脉冲进行计数。T/C1的计数值便是单位定时时间里的脉冲个数。

slide24

测量T/C定时时间为500 ms,这样长的时间定时,先由T/C0定时100 ms,之后软件5次中断后的时间即为5×100 ms=500 ms。中断次数的计数值在msn中。

T/C0定时100 ms的计数初值:3CB0H。计数器1采用16位计数。设T/C0为高优先级,允许计数中断过程定时中断,即定时时间到就中止计数。tf为500 ms定时时间到标志。程序如下:

slide25

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define A 5 /*500 ms 的中断次数*/

sbit P1_0=P1^0;

sbit P1_1=P1^1;

uchar msn=A;

bit idata tf=0; /*500 ms时间到标志*/

slide26

uint count(void)

{

P1_0=0 ; P1_0=1; /*产生清零用负脉冲*/

TMOD=0x59 ;

TH1=0x00; TL1=0x00; /* T/C1计数器 */

TH0=0x3c ;TL0=0xb0; /* T/C0定时器100 ms */

TR0=1;TR1=1;PT0=1;ET0=1;ET1=1;EA=1; /*启动T/C,开中断*/

P1_1=0 ; P1_1=1 ; /* 产生启动正脉冲 */

while (tf!=1 ) ; /* 等待500 ms定时到 */

P1_0=0 ; P1_0=1 ; /* 产生负脉冲,封锁G2 */

TR0=0 ; TR1=0 ; /* 关T/C */

return (TH1*256+TL1) ; / 返回计数值*/

}

slide27

void timer0( void ) interrupt 1 using 1 /* 100 ms定时中断服务 */

{ TH0=0x3c ; /* 重置初值 */

TL0=0xb0 ;

msn - - ;

if ( msn = = 0) { msn=A ; tf=1 ; } /* 500 ms定时时间到设标志 */

}

void timer 1 (void ) interrupt 3 { }

void main ( void )

{

float rate ;

rate=( 10/A )* count( ) ; /* 得每秒的计数率 */

}

slide30

测量周期的程序举例。

设fosc = 6 MHz,机器周期为2 μs,测周期的测量值为计数值乘以2。用C语言编写的程序如下:

  • #include<reg51.h>
  • #define uint unsigned int
  • sbit P1_0=P1^0;
  • uint count ,period;
  • bit rflag=0; / * 周期标志 */
      • void control (void)
      • {
  • TMOD=0x09; /*定时器/计数器0为方式1*/
  • IT0=1;TR0=1;
  • TH0=0;TL0=0;
  • P1_0=0;P1_0=1; /*触发器清零*/
  • TR0=1;ET0=1;EA=1; /*启动T/C0开中断*/
  • }
slide31

void int_0(void)interrupt 0 using 1 /* INT0 中断服务*/

{

EA=0;TR0=0;

count=TL0+TH0*256; /* 取计数值 */

rflag=1; /* 设标志 */

EA=1;

}

void main(void)

{

contro1( );

while(rflag==0); /* 等待一周期 */

period=count*2; /* fosc=6 MHz,2 μs计数增1,周期值单位μs */

}