实验五实验报告 - 图文

更新时间:2023-12-26 17:49:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学号 14142200283序号 14

单片机原理与接口技术

实验报告

实验项目序号实验五

实验项目名称I2C的DA/ADC转换实验

姓名 彭任远 专业电子信息工程 班级 14-1BF 完成时间2016年 6月1日

关键程序段节选: 第一小题:void main()

{ EX0=1;

IT0=1; EA=1;

sen: erflags=0;

}

void int0_isr(void) interrupt 0 {

if(key1==0) a=c[0]; if(key2==0) a=c[1]; if(key3==0) a=c[2]; if(key4==0) a=c[3]; }

// 外中断0的中断服务函数

Start( );

//发送起始信号

//写寻址字节10010000 ( 写)

SendByte(0x90); cAck( );

//检查应答

if(erflags) gotosen; //无应答,重来 SendByte(0x40); cAck( );

//写入控制字01000000,允许模拟量输出

//检查应答

if(erflags) gotosen; //无应答,重来 while(1) { SendByte(a); cAck( );}

//拨码开关的值作为DAC的输入数据

//检查应答

第二小题: while(1)

{ a=RcvByte( );

Ack( ); ar[0]=a/16;

//发出应答位

ar[1]=a; }

void T0_int(void) interrupt 1 { datauchar k;

TH0=(65536-500)/256;

TL0=(65536-500)%6; oe=1;

k =ar[j];

P0 = table[k];

dx=1; dx=0;

P0=sled_bit[j]; wx=1; wx=0; oe=0; j++;

if(j>=2)j=0; }

第三小题:while(1)

{ a=RcvByte( ); Ack( );

a=(a*5*1000)/256; ar[0]=a/1000; ar[1]=a00/100; ar[2]=a0/10;

ar[3]=a; }

}

void T0_int(void) interrupt 1

// 关闭2个573输出,防止在送数据时相互影响

// 每次显示ar[j]的数据

// 相应显示数字段码

// 锁存段码

// 选择相应数码管位选

// 锁存位码

// 打开2个573三态门,输出段码和位码

// 为下一个显示做准备

//发出应答位

{ datauchar k;

TH0=(65536-500)/256;

TL0=(65536-500)%6;

oe=1; k =ar[j];

P0=table[k];

// 每次显示ar[j]的数据

// 关闭2个573输出,防止在送数据时相互影

if(j==0)P0=table1[k] ; // 相应显示数字段码,table1[ ]数组为带小数点的段码表 else P0=table[k];

dx=1; }

dx=0;

// 锁存段码

// 选择相应数码管位选

P0=sled_bit[j]; wx=1; wx=0; oe=0; j++;

// 锁存位码

// 打开2个573三态门,输出段码和位码

// 为下一个显示做准备

if(j>=4)j=0;

实物测试图:第一小题:(下面三幅图展示了小灯由亮变暗的过程)

第二小题:(用无感起子转动滑动变阻器,数码管数值变化)

第三小题:(转动变阻器,数码管整数和小数部分都变化)

实验五I2C的DA/ADC转换实验

一、实验目的

1、 掌握I2C的DA/ADC芯片与单片机接口方法; 2、 掌握I2C器件编程方法; 3、 掌握DAC和ADC的使用方法。 二、实验前准备

1、 完成作业7;

2、 根据实验内容编写好相关程序,并进行Proteus仿真。 三、实验内容

实验内容为3项,其中第1、2项必做。 1、D/A转换实验。

设置一个一维数组datauchar c[4]={0x00,0xa0,0xaa,0xff};按下K1、K2、K3、K4,分别将c[0]、c[1]、c[2]、c[3] 的值转换成模拟量输出,观察发光二极管D23的亮度。若是仿真,可以通过电压表观察模拟量的电压值。

2、单通道采样与动态显示。

对AIN0通道进行采样,将采样数据在1、2两位动态显示,调节电位器观察显示数据变化。

3、简易电压表实现。

对AIN0通道进行采样,将采样数据转换成4位电压值在1、2、3、4四位动态显示,注意只有1位整数3位小数。调节电位器观察显示数据变化。 四、实验原理图

实验原理图如图3.5所示:

1918171615141312Q0Q1Q2Q3Q4Q5Q6Q774HC573Q0Q1Q2Q3Q4Q5Q6Q7U2LEOE1918171615141312U374HC5731RN11098765432LEOE111+4.99Volts10kD0D1D2D3D4D5D6D723456789111U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD3938373635343332212223242526272810111213141516171095671211D17D18D19K1K2K3K418XTAL29RSTD20293031PSENALEEAR7U4SCLSDAA0A1A2EXTOSCAIN0AIN1AIN2AIN3AOUTVREFAGND1234151413LED-RED20012345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51D23R8100PCF8591

图3.5 IC的DA/ADC转换实验电路原理图

2

电路中,P3.6、P3.4分别连接SCL、SDA,地址引脚A2A1A0=000,PCF8591的特征编码为1001,电路中PCF8591的地址为1001000。4路模拟输入,AIN0连接一个10KΩ电位器的中心抽头,调节电位器可改变AIN0的模拟电压,AIN1连接电源,AIN2、AIN3连接地。

PCF8591的15脚AOUT是DAC输出的模拟量, AOUT引脚通过50Ω电阻、LED与电源连接,输出模拟量越小,LED越亮。注意在HNIST-2型实验装置中,将J16的1、2脚短路。 五、软件设计思想

1、 编程思路

仿照例题编写程序,采用例题的I2C的相关函数。动态显示采用实验四的方法,只将显示数据送人相应显示数组元素。

2、 简易电压表实现

注意在采样数据转换成4位电压值时,中间变量要设置长整形数据类型,并注意小数点设置。 六、实验思考题

23456789D0D1D2D3D4D5D6D7R51kRP950kR61k1、 采用I2C接口的ADC有什么好处?

答:I2C兼容2线接口是功能强大的总线机制,用于连接微控制器或微处理器与低速外设,

基于该总线的最基本的通信方式(即,写入/读取从机寄存器的一个字节)非常直观。并且占用资源少,只用到2根线,占用的IO口少,适用于IO口资源比较紧的场合。

2、 如果通过按K1、K2、K3、K4键分别选择ADC采样0、1、2、3通道,

程序如何处理?

答:用外部中断和位定义,再用if语句判断哪个键按下后进入相应的程序段向PCF8591芯片写入控制字,再发送起始信号和读信号,对控制字中填写的通道进行采样

3、 如何利用芯片的通道自动增量的功能,对AIN0、AIN1、AIN2、 AIN3

通道轮流进行采样。

答:PCF8591控制字的D2位是设置自动增量通道转换的,故设置为1。首先D1、D0都置00,通道自动增量位开始发挥作用有通道0转换至通道1,最后转换至通道3.若不能回到通道0,就重新写入控制字将D0、D1置0.便可进行轮流采样

本文来源:https://www.bwwdw.com/article/vwzx.html

Top