51单片机AD,DA模块寄存器及原理介绍

合集下载

第10章 51单片机的AD和DA通道

第10章 51单片机的AD和DA通道
前一页
10.2 8位并行8通道A/D芯片 ADC0809
10.2.1 ADC0809基础 10.2.2 ADC0809的电路 10.2.3 ADC0809的操作步骤和驱动函数
前一页
首页
10.2.1 ADC0809基础
如下图所示是ADC0809芯片的逻辑结构,其由一个8路模拟开关、一个地址锁存与译码器、一个 A/D转换器和一个三态输出锁存器组成,各个模块的功能说明如下。
1. 采样 (具体内容详见教材) 2. 量化和编码 (具体内容详见教材)
前一页
10.1.2A/D变换的应用电路构成
一个完整的51单片机的A/D转换通道如下图所示,其由传感器、电压调理模块、A/D转换通道 芯片所组成。
前一页
10.1.3A/D变换的保持电路
当模拟信号变化较快时,其取样值vs在脉冲变化器件会有明显的变化,如图10.3(c)中所示, vs的顶部不平,这样就不能得到一个固定的取样值进行量化,因此要利用下图的保持电路对vi进 行保持。
前一页
10.351单片机的D/A输出通道基础
10.3.1D/A转换的过程 10.3.2D/A模块的分类 10.3.3D/A芯片的选择 10.3.4A/D芯片对电源的需求
前一页
首页
10.3.1D/A转换的过程
数字系统内部的数字量是采用0或者1这两个代码按照数位组合起来表示的。对于有权码,D/A转 换就是把每一位的代码都按照其相应权的大小转换为相应的模拟量,然后把转换后的模拟量相加, 即可以得到与数字量成正比的总模拟量,这就是数模转换的思路。 D/A转换的原理如下左图所示,其中 为输入的n为二进制数,是与输入二进制数成正比的输出电 压。
前一页
10.1 51单片机的A/D采集通道基础

51系列单片机寄存器详解

51系列单片机寄存器详解

AUXR:辅助寄存器字节地址=8EH,不可位寻址- - - WDIDLE DISRTO - - DISALEWDIDLE:WTD在空闲模式下的禁止/允许位当WDIDLE=0时,WDT在空闲模式下继续计数当WDIDLE=1时,WDT在空闲模式下暂停计数DISRTO:禁止/允许WDT溢出时的复位输出当DISRTO=0时,WDT定时器溢出时,在RST引脚输出一个高电平脉冲当DISRT0=1时,RST引脚为输入脚DISALE :ALE禁止/允许位当DISALE=0时,ALE有效,发出恒定频率脉冲当DISALE=1时,ALE仅在CPU执行MOVC和MOVX类指令时有效,不访问外寄存器时,ALE不输出脉冲信号AUXR1:辅助寄存器1字节地址A2,不可位寻- - - -- - - DPSDPS:数据指针寄存器选择位当DPS=0时,选择数据指针寄存器DPRT0DPRT1时,选择数据指针寄存器DPS 当=PSW:程序状态字CY——进位标记AC——半进位标记F0——用户设定标记RS1、RS0——4个工作寄存器区的选择位。

VO——溢出标记P——奇偶校验标记PCON:电源控制器及波特率选择寄存器字节地址=87H,不可位寻址SMOD - - POF GF1 GF0 PD IDLSMOD——波特率倍增位GF1、GF0——用户通用标记PD——掉电方式控制位,PD=1时进入掉电模式IDL——空闲方式控制位,IDL=1时进入空闲方式在AT89S51中PCON.4是电源断电标记位POF,上电是为1IE:中断允许控制寄存器EA:中断允许总控制位当EA=0时,中断总禁止。

当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。

EX0( EX1):外部中断允许控制位当EX0( EX1)=0 禁止外中断当EX0( EX1)=1 允许外中断ET0(EX1):定时/计数中断允许控制位当ET0(ET1)=0 禁止定时(或计数)中断当ET0(ET1)=1 允许定时(或计数)中断ET2:定时器2中断允许控制位,在AT89S52、AT89C52中ES:串行中断允许控制位当ES=0 禁止串行中断当ES=1 允许串行中断IP:中断优先级控制寄存器PX0——外部中断0优先级设定位PT0——定时中断0优先级设定位PX1——外部中断1优先级设定位PT1——定时中断1优先级设定位PS——串口中断优先级设定位优先级设定位2PT2——定时器SCON:串行口控制寄存器SM0、SM1:串行口工作方式选择位SM2:多机通信控制位REN:允许/禁止串行口接收的控制位TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。

基于51单片机的AD和DA

基于51单片机的AD和DA

基于51单片机的AD和DA本讲内容:介绍AD/DA芯片PCF8591,通过例程讲解AD和DA过程。

AD和DA的概念:AD转换的功能是把模拟量电压转换为数字量电压。

DA转换的功能正好相反,就是讲数字量转换位模拟量。

分辨率的概念:一位数字量所表示的电压值。

对于5V的满量程,采用8位的DAC 时,分辨率为5V/256=19.5mV。

PCF8591简介:PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个模拟输出和一个串行IIC总线接口。

3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至IIC总线而不需要额外硬件。

PCF8591管脚图:PCF8591接口电路图:PCF8591的控制寄存器:例程:AD程序/**********************AD转换**********************单片机型号:STC89C52RC*开发环境:KEIL*功能:IIC协议 PCF8591 AD转换**************************************************/#include<reg52.h>#include <intrins.h>#define LCD_Data P0#define Busy 0x80#define uchar unsigned char#define delay0;_nop_();#define AddWr 0x90#define AddRd 0x91sbit RST=P2^4;sbit Sda=P2^0;sbit Scl=P2^1;sbit LCD_RS=P1^0;sbit LCD_RW=P1^1;sbit LCD_E =P2^5;bit ADFlag;uchar code table0[]={" SL-51A "};uchar code table1[]={" AD CONVERT "};uchar code table2[]={"CH1: . V"};uchar code table3[]={"CH2: . V"};uchar code table4[]={"CH3: . V"};uchar code table5[]={"CH4: . V"};uchar TempData[8];void Delay5Ms(void);void delay(int In,int Out); void WriteDataLCD(unsigned char WDLCD);void WriteCommandLCD(unsigned char WCLCD,BuysC);uchar ReadDataLCD(void);uchar ReadStatusLCD(void);void LCDInit(void);void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData);void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData);void Init_Timer1(void);void Start(void);void Stop(void);void Ack(void);void NoAck(void);void Send(unsigned char Data);uchar Read(void);void DAC(unsigned char Data);uchar ReadADC(unsigned char Chl);void info_disp(void);/**********5ms延时函数***************************/void Delay5Ms(void){unsigned int TempCyc=3552;while(TempCyc--);}/********************延迟函数********************/void delay(int In,int Out) {int i,j;for(i=0;i<In;i++){for(j=0;j<Out;j++){;}}}/*------------------------------------------------初始化定时器1------------------------------------------------*/void Init_Timer1(void){TMOD|=0x10;TH1=0xff;TL1=0x00;EA=1;ET1=1;TR1=1;}/*------------------------------------------------启动IIC总线------------------------------------------------*/void Start(void){Sda=1;delay0;Scl=1;delay0;Sda=0;delay0;Scl=0;}/*------------------------------------------------停止IIC总线------------------------------------------------*/void Stop(void){Sda=0;delay0;Scl=1;delay0;Sda=1;delay0;Scl=0;}/*------------------------------------------------应答IIC总线------------------------------------------------*/void Ack(void){Sda=0;delay0;Scl=1;delay0;Scl=0;delay0;}/*------------------------------------------------非应答IIC总线------------------------------------------------*/void NoAck(void){Sda=1;delay0;Scl=1;delay0;Scl=0;delay0;}/*------------------------------------------------发送一个字节------------------------------------------------*/ void Send(unsigned char Data){uchar BitCounter=8;uchar temp;do{temp=Data;Scl=0;delay0;if((temp&0x80)==0x80){Sda=1;}else{Sda=0;}Scl=1;temp=Data<<1;Data=temp;BitCounter--;}while(BitCounter);Scl=0;}/*------------------------------------------------读入一个字节并返回------------------------------------------------*/ uchar Read(void){uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;do{Scl=0;delay0;Scl=1;delay0;if(Sda){temp=temp|0x01;}else{temp=temp&0xfe;}if(BitCounter-1){temp1=temp<<1;temp=temp1;}BitCounter--;}while(BitCounter);return(temp);}/*------------------------------------------------写入DA数模转换值------------------------------------------------*/ void DAC(unsigned char Data){Start();Send(AddWr);Ack();Send(0x40);Ack();Send(Data);Ack();Stop();}/*------------------------------------------------读取AD模数转换的值,有返回值------------------------------------------------*/ uchar ReadADC(unsigned char Chl){uchar Data;Start();Send(AddWr);Ack();Send(0x40|Chl);Ack();Start();Send(AddRd);Ack();Data=Read();Scl=0;NoAck();Stop();return Data;}/*******************写数据函数*******************/ void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD();LCD_Data=WDLCD;LCD_RS=1;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}/*******************写指令函数*******************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) {if(BuysC)ReadStatusLCD();LCD_Data=WCLCD;LCD_RS=0;LCD_RW=0;LCD_E=0;LCD_E=0;LCD_E=1;}/*******************读数据函数*******************/unsigned char ReadDataLCD(void){LCD_RS=1;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;return(LCD_Data);}/*******************读状态函数*******************/unsigned char ReadStatusLCD(void){LCD_Data=0xFF;LCD_RS=0;LCD_RW=1;LCD_E=0;LCD_E=0;LCD_E=1;while (LCD_Data&Busy);return(LCD_Data);}/********************LCD初始化*******************/void LCDInit(void){LCD_Data=0;WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0C,1);}/********************清屏函数********************/void LCD_Clear(void){WriteCommandLCD(0x01,1);Delay5Ms();}/**************按指定位置显示一个字符*************/void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData) {Y&=0x1;X&=0xF;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X, 0);WriteDataLCD(DData);}/**************按指定位置显示一串字符*************/void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData) {unsigned char ListLength;ListLength=0;Y&=0x1;X&=0xF;while(DData[ListLength]>=0x20){if(X<=0xF){DisplayOneChar(X, Y, DData[ListLength]);ListLength++;X++;}}}/********************系统初始化*******************/void sys_init(void){LCDInit();delay(5,100);Init_Timer1();DisplayListChar(0,0,table0);DisplayListChar(0,1,table1);}/*------------------------------------------------显示------------------------------------------------*/void info_disp(void){DisplayListChar(0,0,table2);DisplayOneChar(4,0,(0x30+TempData[0]));DisplayOneChar(6,0,(0x30+TempData[1]));DisplayListChar(8,0,table3);DisplayOneChar(12,0,(0x30+TempData[2]));DisplayOneChar(14,0,(0x30+TempData[3]));DisplayListChar(0,1,table4);DisplayOneChar(4,1,(0x30+TempData[4]));DisplayOneChar(6,1,(0x30+TempData[5]));DisplayListChar(8,1,table5);DisplayOneChar(12,1,(0x30+TempData[6]));DisplayOneChar(14,1,(0x30+TempData[7]));}/*------------------------------------------------主程序------------------------------------------------*/void main(){uchar num;uchar ADtemp;sys_init();delay(100,1000);LCD_Clear();while(1){DAC(num);num++;delay(5,100);if(ADFlag){ADFlag=0;ADtemp=ReadADC(0);TempData[0]=(ReadADC(0))/50;TempData[1]=((ReadADC(0))%50)/10; ADtemp=ReadADC(1);TempData[2]=(ReadADC(1))/50;TempData[3]=((ReadADC(1))%50)/10; ADtemp=ReadADC(2);TempData[4]=(ReadADC(2))/50;TempData[5]=((ReadADC(2))%50)/10; ADtemp=ReadADC(3);TempData[6]=(ReadADC(3))/50;TempData[7]=((ReadADC(4))%50)/10; info_disp();}}}/*------------------------------------------------定时器中断程序------------------------------------------------*/void Timer1_isr(void) interrupt 3 using 1{static unsigned int j;TH1=0xfb;TL1=0x00;j++;if(j==200){j=0;ADFlag=1;}}DA程序/******************DA转换LED输出*******************单片机型号:STC89C52RC*开发环境:KEIL*功能:此程序通过IIC协议对DAAD芯片操作, 并输出模拟量,用LED亮度渐变指示***************************************************/#include<reg52.h>#include <intrins.h>#define delay0; _nop_();#define uchar unsigned char#define AddWr 0x90#define AddRd 0x91sbit RST=P2^4;sbit Sda=P2^0;sbit Scl=P2^1;sbit Fm=P2^3;sbit LE1=P2^6;sbit LE2=P2^7;bit ADFlag;uchar code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; data uchar Display[8];/*------------------------------------------------延时程序------------------------------------------------*/void mDelay(uchar j){unsigned int i;for(;j>0;j--){for(i=0;i<125;i++){;}}}/*------------------------------------------------初始化定时器1------------------------------------------------*/void Init_Timer1(void){TMOD|=0x10;TH1=0xff;TL1=0x00;EA=1;ET1=1;TR1=1;}/*------------------------------------------------启动IIC总线------------------------------------------------*/void Start(void){Sda=1;delay0;Scl=1;delay0;Sda=0;delay0;Scl=0;}/*------------------------------------------------停止IIC总线------------------------------------------------*/ void Stop(void){Sda=0;delay0;Scl=1;delay0;Sda=1;delay0;Scl=0;}/*------------------------------------------------应答IIC总线------------------------------------------------*/ void Ack(void){Sda=0;delay0;Scl=1;delay0;Scl=0;delay0;}/*------------------------------------------------非应答IIC总线------------------------------------------------*/ void NoAck(void){Sda=1;delay0;Scl=1;delay0;Scl=0;delay0;}/*------------------------------------------------发送一个字节------------------------------------------------*/ void Send(uchar Data){uchar BitCounter=8;uchar buffer;do{buffer=Data;Scl=0;delay0;if((buffer&0x80)==0x80)Sda=1;else Sda=0;Scl=1;buffer=Data<<1;Data=buffer;BitCounter--;}while(BitCounter);Scl=0;}/*------------------------------------------------读入一个字节并返回------------------------------------------------*/ uchar Read(void){uchar buffer=0;uchar buffer1=0;uchar BitCounter=8;Sda=1;do{Scl=0;delay0;Scl=1;delay0;if(Sda)buffer=buffer|0x01;else buffer=buffer&0xfe;if(BitCounter-1){buffer1=buffer<<1;buffer=buffer1;}BitCounter--;}while(BitCounter);return(buffer);}/*------------------------------------------------写入DA数模转换值------------------------------------------------*/ void DAC(uchar Data){Start();Send(AddWr);Ack();Send(0x40);Ack();Send(Data);Ack();Stop();}/*------------------------------------------------读取AD模数转换的值,有返回值------------------------------------------------*/ uchar ReadADC(uchar Chl){uchar Data;Start();Send(AddWr);Ack();Send(0x40|Chl);Ack();Start();Send(AddRd);Ack();Data=Read();Scl=0;NoAck();Stop();return Data;}void fmg(void){Fm=1;}void cmg(void){LE1=1;P0=0x00;LE1=0;LE2=1;P0=0x00;LE2=0;RST=0;}/*------------------------------------------------主程序------------------------------------------------*/ void main(){uchar num;uchar ADbuffer;Init_Timer1();cmg();fmg();while(1){DAC(num);num++;mDelay(20);if(ADFlag){ADFlag=0;ADbuffer=ReadADC(0);Display[0]=Datatab[(ReadADC(0))/50]|0x80;Display[1]=Datatab[((ReadADC(0))%50)/10];ADbuffer=ReadADC(1);Display[2]=Datatab[((ReadADC(1))/50)]|0x80;Display[3]=Datatab[((ReadADC(1))%50)/10];ADbuffer=ReadADC(2);Display[4]=Datatab[((ReadADC(2))/50)]|0x80;Display[5]=Datatab[((ReadADC(2))%50)/10];ADbuffer=ReadADC(3);Display[6]=Datatab[((ReadADC(3))/50)]|0x80; Display[7]=Datatab[((ReadADC(3))%50)/10]; }}}。

PLC中AD、DA模块说明

PLC中AD、DA模块说明
号号 送 高低 标 位位 志
块块 结 检检 束 验验 码 码码 高低
位位
2. 通信命令代码
RCS 读单个接点 WCS 写单个接点 RCP 读多个接点 WCP 写多个接点 RCC 以字为单位读接点信息 WCC 以字为单位写接点信息 SC 在接点区以字为单位预置数 RD 读数据区 WD 写数据区 SD 数据区预置 RS 读定时/计数预置值 WS 写定时/计数预置值
RK WK MC WD MG RR WR RT RP WP RM AB
读定时计数经过值 写定时计数经过值 监视器接点记录/复位 监视器数据记录/复位 监视器执行 读系统监视器 写系统监视器 读PLC状态 读程序 写程序 RUN/PROG方式切换 发送无效
三、FP1与计算机通信的实现
F20 +, WX11, DT0
F32 %, DT0, K3, WY12
(ED)
第5节 FP1通信系统
一、 FP1的通信功能 1.一台计算机与一台PLC通信(1:1方式)
个人 计算机
RS-232C
FP1 控制器
通过FP1控制器RS-232C口连接
个人 计算机
RS-232C RS422/ RS-422 RS232C
CH0:WY9(Y90~Y9F)
CH1:WY10(Y100~Y10F)
当开关置于右边时,该模块设为No.1,其I/O 通道分配如下:
CH0:WY11(Y110~Y11F)
CH1:WY12(Y120~Y12F)
内部数据为K0~K1000,对应的输出信号范围为 0~5VDC,0~10VDC,0~20mADC可选则。
No.414寄存器为 RS-232C串口通信波特率设 置。
设置内容为:K0~K6分别代表波特率19200、 9600、4800、2400、1200、600和300bps。

单片机学习-_AD及DA工作原理及应用

单片机学习-_AD及DA工作原理及应用

3、绝对精度和相对精度 、 绝对精度(简称精度)是指在整个刻度范围内, 绝对精度(简称精度)是指在整个刻度范围内,任 一输入数码所对应的模拟量实际输出值与理论值之 间的最大误差。绝对精度是由DAC的增益误差(当 的增益误差( 间的最大误差。绝对精度是由 的增益误差 输入数码为全1时,实际输出值与理想输出值之差)、 输入数码为全 时 实际输出值与理想输出值之差)、 零点误差(数码输入为全0 DAC的非零输出 零点误差(数码输入为全0时,DAC的非零输出 )、非线性误差和噪声等引起的 绝对精度( 非线性误差和噪声等引起的。 值)、非线性误差和噪声等引起的。绝对精度(即 最大误差)应小于1个 最大误差)应小于 个LSB。 。 相对精度与绝对精度表示同一含义, 相对精度与绝对精度表示同一含义,用最大误差相 与绝对精度表示同一含义 对于满刻度的百分比表示。 对于满刻度的百分口 6.1.2 DAC0832芯片及其与单片机接口
DAC0832是使用非常普遍的8 D/A转换器, DAC0832是使用非常普遍的8位D/A转换器,由于其片 是使用非常普遍的 转换器 内有输入数据寄存器,故可以直接与单片机接口。 内有输入数据寄存器,故可以直接与单片机接口。 DAC0832以电流形式输出 当需要转换为电压输出时, 以电流形式输出, DAC0832以电流形式输出,当需要转换为电压输出时,可 外接运算放大器。属于该系列的芯片还有DAC0830 DAC0830、 外接运算放大器。属于该系列的芯片还有DAC0830、 DAC0831,它们可以相互代换。DAC0832主要特性 主要特性: DAC0831,它们可以相互代换。DAC0832主要特性: 分辨率8位; 分辨率8 电流建立时间1μS; 电流建立时间1μS; 数据输入可采用双缓冲、单缓冲或直通方式; 数据输入可采用双缓冲、单缓冲或直通方式; 输出电流线性度可在满量程下调节; 输出电流线性度可在满量程下调节; 逻辑电平输入与TTL电平兼容; TTL电平兼容 逻辑电平输入与TTL电平兼容; 单一电源供电(+5V~+15V); (+5V~+15V 单一电源供电(+5V~+15V); 低功耗,20mW。 低功耗,20mW。

51单片机原理及应用

51单片机原理及应用

51单片机原理及应用51单片机是一种常见的微控制器,以其高性能和广泛应用而受到广大工程师的青睐。

本文将介绍51单片机的原理和应用。

51单片机的原理可以从其硬件结构和工作流程两方面来讲解。

首先是硬件结构。

51单片机包括中央处理器(CPU),存储器(包括存储器管理单元、内部RAM和ROM),输入/输出端口(I/O口),定时器/计数器,串行通信接口等。

CPU是整个系统的核心,负责指令的执行和数据的处理。

存储器用于存储程序和数据,其中ROM存储程序代码,RAM用于暂存数据。

I/O口用于与外部设备进行信息交互。

定时器/计数器用于产生精确的时间延迟和计数操作。

串行通信接口用于与其他设备进行数据传输。

其次是工作流程。

51单片机的工作流程一般包括初始化、输入/输出控制和运算处理三个阶段。

初始化阶段主要是对各个模块的配置和初始化,例如设置时钟频率、串口波特率等。

输入/输出控制阶段通过读取输入设备(如按键、传感器等)的状态,控制外部设备(如LED灯、马达等)的状态。

运算处理阶段通过执行指令,对数据进行处理和计算。

至于应用方面,51单片机具有广泛的应用领域。

主要应用包括控制系统、嵌入式系统、通信系统、工业自动化等。

在控制系统中,51单片机可以用于控制家电、机器人、机械设备等。

在嵌入式系统中,51单片机可以应用于智能家居、智能交通、智能仪表等。

在通信系统中,51单片机可以用于电话、网络和无线通信设备等。

在工业自动化中,51单片机可以用于工厂生产线控制、仪器仪表控制等。

总结起来,51单片机的原理和应用都是非常重要的。

通过了解其硬件结构和工作流程,可以更好地理解其工作原理。

而了解其应用领域,则可以为工程师在实际项目中的选择和设计提供参考。

51单片机(AD及DA转换器)

51单片机(AD及DA转换器)

时,LE 1 …=0
则数据被锁存
当 WR2 和 XFER 均为低电平时,LE2=1,此时允许D/A转换,否则 LE2
=0,将数20据21锁/3/1存1 于DAC寄存器中
9
DAC 0832 常 见 的 几 种 用 法
(a): DAC寄存器直通方式 (b): 输入寄存器直通方式
(c)2:021/两3/11个寄存器同时选通及锁存方式
2021/3/11
DAC0832
CS
WR1 AGND
D3 D2 D1
D0 Vref Rfb DGND
VCC
ILE WR2 XFER D4 D5
D6 D7 Iout2 Iout1
20 PIN DIP封装
5
DAC0832 内部结构框图
D0—D7:8位数字量输入端 /CS: 片选端,低有效 ILE: 数据锁存允许,高有效 /WR1: 写控制信号1,低有效 /WR2: 写控制信号2,低有效 /XFER: 数据传送控制信号 Iout1: 电流输出端1 LE Iout2: 电流输出端2 Rfb: 内置反馈电阻端 Vref: 参考电压源,-10~+10V DGND:数字量地 AGND:模拟量地 Vcc: +5~+15V单电源供电端
10
DAC0832 常见的几种用法
D7
输 入


D0

ILE 1 &
LE1 1
CE 0
1
WR1 0 ≥1
WR2 0
1
XFER 0 ≥1
Vref
DAC
D/A Iout2
寄 存
转 换
Iout1


Rfb LE2
LE=1,Q 跟随 D LE=0,Q 锁存 D

51单片机原理

51单片机原理

51单片机原理51单片机是一种常用的微控制器,广泛应用于各种电子设备和嵌入式系统中。

它具有成本低、性能稳定、易于编程等特点,因此备受工程师和电子爱好者的青睐。

本文将介绍51单片机的原理及其应用。

首先,我们来了解一下51单片机的基本结构。

51单片机是一种8位的微控制器,它由CPU、RAM、ROM、I/O口、定时器/计数器、串行通信接口等部分组成。

其中,CPU是单片机的核心,负责执行指令和控制整个系统的运行;RAM用于临时存储数据;ROM则存储程序代码和常量;I/O口用于与外部设备进行数据交换;定时器/计数器用于产生精确的时间延迟和计数功能;串行通信接口则实现单片机与外部设备的数据通信。

其次,我们来了解一下51单片机的工作原理。

在单片机系统中,CPU从ROM 中读取程序指令,并根据指令控制其他部件的工作。

当系统上电后,CPU会从指定的地址开始执行程序,不断地取指令、分析指令、执行指令,直到程序结束。

在执行过程中,CPU会根据需要从RAM中读取数据,并将处理结果写回RAM或者输出到外部设备。

同时,定时器/计数器可以产生精确的时钟信号,用于控制系统的时序和定时功能。

另外,51单片机的应用非常广泛。

它可以用于各种电子设备中,如家用电器、工业控制、通信设备、汽车电子等。

在这些设备中,单片机可以实现各种功能,如控制、监测、通信、显示等。

同时,由于单片机具有较强的可编程性,因此可以根据具体的应用需求进行灵活的定制和开发。

总的来说,51单片机作为一种常用的微控制器,具有成本低、性能稳定、易于编程等优点,因此在各种电子设备和嵌入式系统中得到了广泛的应用。

通过本文的介绍,相信读者对51单片机的原理和应用有了更深入的了解,希望能够对大家的学习和工作有所帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STC15系列单片机内部AD/DA模块介绍
时间:2015/04/13 22:00
为什么要用AD和DA:模拟信号只有通过A/D转化为数字信号后才能用软件进行处理,这一切都是通过A/D转换器(ADC)来实现的。

与模数转换相对应的是数模转换,数模转换是模数转换的逆过程。

数模转换(D/A):将数字量转换为模拟电量(电压或电流),使输出的模拟电量与输入的数字量成正比。

(1) 转换速度
转换速度是指完成一次D/A转换所用的时间。

转换时间越长,转换速度就越低。

(2) 分辨率
D/A转换器的分辨力用可用输入的二进制数码的位数来表示。

位数越多,则分辨力也就越高。

常用的有8位、10位、12位、16位、24位、32位等。

(3) 转换精度
转换精度定义为实际输出与期望输出之比。

以全程的百分比或最大输
出电压的百分比表示。

理论上D/A转换器的最大误差为最低位的1/2,10位D/A转换器的
分辨率为1/210,约为0.1%,它的精度为0.05%。

如10位D/A转换器的满程输出为10V,则它的最大输出误差为10V
×0.0005=5mV。

模数转换(A/D):将时间连续、幅值也连续的模拟信号转换为时间离散、幅值也离散的数字信号
分辨率:采样值的位数的选取需要满足一定的动态范围及数字部分处理精度的要求,一般分辨率80dB的动态范围要求下不能低于12位。

转换速率:完成一次由模拟转换成数字所需时间的倒数。

采样时间:两次转换之间的间隔。

采样速率要小于等于转换速率,但很多情况下采样速率不能太低。

转换精度:指转换后所得二进制数的位数。

相关寄存器详细信息请参见以下介绍
实际应用请配合开发板原理图及相关例程。

谢谢!由于水平有限,文档难免有误,还请指教以上资料部分来自于官方数据手册及百度网,仅做整理,特此声明!。

相关文档
最新文档