C51单片机学习(四):ADC和DAC
2015-12-12 14:50
323 查看
DAC
T型电阻网络D/A转换器实现原理
由上图可以知道,每过一个R,电压减少一半,电流减少一半
比如D7~D0 == 11000000,流过的电流为(1/2 + 1/4)I
具体看下图
我板子上的是DAC0832
832内部结构及引脚
关于引脚的说明
总共三种工作方式
1.单缓冲工作方式
此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。
2.双缓冲工作方式
多路D/A转换输出,如果要求同步进行,就应该采用双缓冲器同步方式 。
3.直通工作方式(主要以这种为例)
当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接+5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。
就是只要价格csda和wr位置0,就可以将P0口的信号转换成模拟信号
具体代码
//使P0从0到0xff循环达到灯的渐亮渐灭 #include<reg52.h> sbit csda=P3^2; sbit wr=P3^6; sbit wela=P2^7; int a = 0,flag = 0; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init(){ csda=0; //关键点1 wr=0; //关键点2 a = 0; wela = 1; //注意关掉位选,不然数码管出现许多数字 P0 = 0xff; wela = 0; } void main(){ init(); while(1){ if(flag == 0){ P0 = a ++; delay(20); if(a == 0x100){ flag = 1; a --; } }else{ P0 = a --; delay(20); if(a == -1){ flag = 0; a ++; } } } }
ADC
逐次逼近式ADC的转换原理图个人理解的原理:
1.VIN与10000000转换成相应的模拟电压比较,如果大,就在寄存器置1
2.如果上面成立,寄存器为10000000,接下来第二位置1 VIN比较11000000转换成模拟电压,成立就在寄存器置1,一直比较到最后一位
详细可以参考:ADC0804中文资料
板子上的图:
这里我们只需要控制RD WR和CSAD就可以了,输出的结果账号对应LED的亮灭。
CSAD我的板子中对于P0,只要是P0为全0就好了,WR初始化:由高变低,转换器被清除,低到高则是转换正式开始,RD为0则会在LED灯上显示。至于为什么可以看芯片的时序图,或者郭老师的视频。
具体代码
//通过改变电压通过ADC使得LED灯表现出不同 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit wr=P3^6; sbit rd=P3^7; void delay(uint z) { uint t1,y; for(t1=z;t1>0;t1--) for(y=110;y>0;y--); } void init(); void start(); void main() { init(); while(1) { start(); delay(100); //这里要延迟长点,因为转换时间的原因 rd=0; //控制rd使得LED闪烁,置0输出 delay(50); rd=1; } } void init(){ //CSAD置0 P0=0; } void start(){ //按照说明初始化wr wr=1; wr=0; wr=1; }
相关文章推荐
- 51单片机的中断整理
- 时钟+温度+遥控设置,综合时钟例子
- 温度传感器+I2C+串口+PC上位机(pyserial)例子
- 51单片机中data,idata,xdata,pdata的区别
- 什么叫51单片机最小系统
- 用串口连接GSM手机发送和接收短消息,在应用程序中如何编程实现?
- MCU之心路分享
- 按键led
- 单片机学会释放CPU
- 单片机无线串行接口电路设计
- 单片机无线串行接口电路设计
- 单片机系统中的红外通信接口
- 单片机系统中的红外通信接口
- 单片机实现接收从电脑发送过来的字符串的方法
- 单片机IO口模拟串口程序(发送+接收
- DSP、ARM和单片机的区别
- 转:接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮地
- 单片机存储器之flash,eeprom,sram,dram简介
- 程序状态字(PSW)的动画说明,
- 51单片机