STC单片机AD转换程序设计

合集下载

STC12C5A60S2中的AD转换

STC12C5A60S2中的AD转换

STC12C5A60S2中的AD转换逐次逼近原理AD 里面包含da,当输入电压Vin时,da的最高位是1,即为0.5Vref与输入信号比较,如果输入大于0.5Vref则比较器输出为1,同时da的最高位为1,反之DA最高位则为0,通过8次比较后得到8个01数据即完成ad转换。

现在说下程序中用到stc12单片机两个寄存器ADC_CONTR;主要用来配置ad启动的工作模式;还有个result的寄存器程序中的注意点:配置完ADC_CONTR后要延时4个时钟周期先把程序附上#include &quot;stc12.h&quot;#include &quot;intrins.h&quot;#include &quot;ad.h&quot;uint ad;#define ADC_POWER 0X80 //ADC最高位给adc部分供电,类似于片选#define ADC_START 0X08 //模数转换启动控制位#define ADC_FLAG 0x10 //ad转换需要时间,这个是转换完成标志位#define ADC_SPEEDLL 0X00 //540 clock#define ADC_SPEEDL 0X20 //360 clock#define ADC_SPEEDH 0X40 //180 clock#define ADC_SPEEDHH 0X60 //90 clockuchar ADCresult(uchar aa) //这里的参数是哪个口来ad转换{P1ASF=0X01; //这里的选择和用哪一个P1口作为ad采样ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|aa;//ADC_CONTR=0X88|aa;_nop_();_nop_();_nop_();_nop_();//设置ADC_CONTR寄存器后需加4个CPU时钟周期的延时,才能保证值被写入ADC_CONTR寄存器while (!(ADC_CONTR & ADC_FLAG)); //等待ADC_CONTR,这里的ADC_FLAG相当于一个常数,不是寄存器里面的某个位//while(!ADC_FLAG);//ADC_FLAG=0;ADC_CONTR &= ~ADC_FLAG; //Close ADC 将标志位清零等待下次硬件置1ad=(ADC_RES<<2)+ADC_RESL; //打开10位AD采集功能如果用8位AD 屏掉这句把下一句改为Vo=(float)(ADC_RESL)*500/256; 即可//ADC_RES结果寄存器的高2位;ADC_RES结果寄存器的低8位ad=(float)(ad)*5*100/1024; //Return ADCresult(为显示整数,这里将电压值扩大了十倍)//10位AD采集即2的10次方满值为1024 这里用1024表示5伏的电压//那么用采集到的数量值除以1024 在乘以5 得到的值就是采集的电压数值//这里又*100 是为了扩大100倍显示小数位//ADC_RES*(5/256)为采集的电压值然后扩大10倍便于计算return ad;}这里只是个ad.c源文件,这里有几个问题想说一下1.怎么知道是10位还是8位的ad结果;你可以在ADCresult(uchar aa)最前面加一条AUXR1&=0x04;什么意思呢,转换结果的低2位放在ADC_RES,高8位ADC_RESL 中2为什么不用//while(!ADC_FLAG);//ADC_FLAG=0;这两条因为ADC_FLAG相当于常量前面用宏定义而头文件里只有ADC_CONTR的地址映射;但是如果在头文件中用sbit ADC_FLAG=ADC_CONTR^4会出现错误,具体原因还不清楚先说到这吧。

单片机程序设计实践教程AD转换PPT学习教案

单片机程序设计实践教程AD转换PPT学习教案
1. 掌握ZLG7290键盘与显示控制芯片的控制和使用方法 ;
2. 掌握ADC0809的工作过程和控制方式; 3. 熟练掌握STC89C52RC与82C55之间在协同工作时
各个控制信号的状态; 4. 理解本项目中给出的C语言源程序的结构和各语句所起
作用; 5. 在达到以上四点目标之后,根据本章“项目扩展任务
第16页/共28页
17
图11-6 A/D转换项目的系统功能图
第17页/共28页
18
因为数据的转换值是相对于参考电压而定的,此处参考电压 的值分别是VREF(+)=VCC(+5V),VREF(-)=GND。所以, 输入的模拟信号都应在0~+5V的参考电压范围内,否则就会超出 量程。开发板上的IN0通道输入连接一个三端电位器(R5)的中心 端输入,最大最小输入信号都在0~+5V之间,不会超出量程。
第22页/共28页
23
(3)、要读取ADC0809转换好的数据信号就必须使ADC0809
的ENABLE信号有效,这个信号由nRD信号和CS0809信号组成
,所以要读取A/D转换数值,必须向ADC0809对应的译码地址发
一个读命令以获取数据线上的数据,程序中的实现如下:
getdata=COM0809;
第11页/共28页
12
图11-5 ADC0809的内部结构图
第12页/共28页
13
ADC0809的各引脚功能解释如下: •IN0~IN7 8路模拟电压输入端,用于输入被转换的模 拟电压。 •D0~D7 A/D转换后的数据输出端,与单片机的P0口 相连。 •ADDA、ADDB、ADDC 模拟通道地址选择端, ADDA为低位,ADDC为高位,其通道选择的地址编码见 表11-1。
在单片机的实时控制和性能测试等应用系统中,往往需要将一 些连续变化的模拟量转换成数字量后,才能输入到计算机中进行处 理,这种完成模拟量转换为数字量的集成电路称为模数(A/D)转 换芯片。ADC0809是价格便宜的逐次比较式8位CMOS模数A/D 转换器,有8个通道,可输入8路模拟信号,芯片内设置了8路模拟 选通开关,以及相应的通道地址锁存及译码电路,因此能对多路模 拟信号进行分时采集与转换。图11-4给出了ADC0809的外部引脚 和实物图。

单片机课程设计AD转换

单片机课程设计AD转换

引言本课题旳任务是对A/D转换电路进行设计,理解A/D转换与单片机旳接口措施,掌握AD0809转换性能及编程措施。

把模拟量转换成数字量旳器件,称为模数转换器,简称为A/D(Anolog to Digit)。

一般旳A/D转换过程是通过采样、保持、量化和编码4个环节完毕旳,这些环节往往是合并进行旳。

当A/D转换结束,ADC输出一种转换结束信号数据。

CPU可有多种措施读取转换成果:①查询方式;②中断方式;③ DMA方式。

通道8位A/D转换器,ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容旳控制逻辑旳CMOS组件。

它是逐次迫近式A/D转换器,可以和单片机直接接口。

ADC0809由一种8路模拟开关、一种地址锁存与译码器、一种A/D转换器和一种三态输出锁存器构成。

多路开关可选通8个模拟通道,容许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D 转换完旳数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完旳数据。

一种实际旳系统中需用传感器把多种物理参数(如压力和温度等)测量出来,并转换为电信号,再通过A/D转换器,传送给微型计算机;微型计算机加工处理后,通过D/A转换器去控制多种参数量。

目录一系统设计原理 (3)二系统设计 (4)三整个系统实现功能 (7)四收获与心得体会 (9)五参照书目 (10)一系统设计原理1 引脚定义:IN0~IN7:8路模拟信号输入端,由地址锁存及译码控制单元旳3位地址A、B、C进行选通切换。

START:A/D转换启动控制信号输入端。

ALE:地址锁存信号输入端,START 和ALE 用于启动A/D转换。

V REF(+)和V REF(-):正、负基准电压输入端。

OE:输出容许控制信号输入端,A/D转换后旳数据进入三态输出数据锁存器,并在OE旳作用下(OE为高电平),通过D0~D7将锁存器旳数据送出。

EOC:A/D 转换结束标志信号。

基于单片机的AD转换电路与程序设计

基于单片机的AD转换电路与程序设计

基于单片机的AD转换电路与程序设计单片机(MCU)是一种集成了处理器核心、内存、输入输出接口和各种外围设备控制器等功能的集成电路。

MCU通常用于嵌入式系统,广泛应用于各个领域,例如家电、工业控制、汽车电子等。

其中,AD转换是MCU中的一个重要模块,用于将模拟信号转换成数字信号。

在应用中,常常需要将外部的温度、湿度、压力或光照等模拟信号进行转换和处理。

AD转换电路一般由模拟输入端、引脚连接、采样保持电路、比较器、取样调节电路、数字输出端等部分组成。

模拟输入端负责接收外部的模拟量信号;引脚连接将模拟输入信号引到芯片的模拟输入端;采样保持电路负责将引脚输入的模拟信号进行采样和保持,保证AD转换的准确性;比较器用于将模拟信号与参考电压进行比较,判断信号的大小;取样调节电路用于调整模拟信号的边界;数字输出端将模拟信号转换成数字信号输出给MCU。

在程序设计方面,MCU通常使用C语言进行编程。

程序设计分为初始化和数据处理两个步骤。

初始化阶段主要包括设置IO口、初始化外设、设置模拟输入通道等工作。

数据处理阶段主要包括数据采样、数值转换、数据处理和输出等工作。

下面以一个简单的温度采集系统为例进行说明。

首先,在初始化阶段,需要设置IO口和外设,以及设置模拟输入通道。

具体步骤如下:1.设置IO口:根据具体需要配置MCU的引脚功能和工作模式。

2.初始化外设:根据需要初始化ADC模块,包括设置采样频率、参考电压等参数。

3.设置模拟输入通道:选择需要转换的模拟输入通道。

接下来,在数据处理阶段,需要进行数据采样、数值转换和数据处理。

具体步骤如下:1.数据采样:使用ADC模块进行模拟信号的采样,将采样结果保存到寄存器中。

2.数值转换:将采样结果转换成数字信号,可以使用如下公式进行转换:数字信号=(ADC采样结果/采样最大值)*参考电压3.数据处理:根据具体需求进行数据处理,例如计算平均值、最大值或最小值,也可以进行滤波或校正。

stc单片机电池点焊机程序代码

stc单片机电池点焊机程序代码

STC单片机电池点焊机程序代码概述本文将详细介绍STC单片机电池点焊机的程序代码设计。

点焊机是一种常用于电池组装的设备,通过将电池片与电池引线进行点焊,实现电池的连接。

STC单片机是一种常用的微控制器,具有低功耗、高性能和易于编程的特点。

通过编写合适的程序代码,可以实现电池点焊机的自动化控制。

程序框架为了实现电池点焊机的自动化控制,我们需要设计一个程序框架,包括初始化设置、电池检测、点焊控制等功能。

下面是程序框架的详细说明:1. 初始化设置•设置IO口方向:将控制点焊机的IO口设置为输出,用于控制点焊动作的触发。

•设置ADC:配置模拟数字转换器(ADC),用于检测电池电压。

•设置定时器:使用定时器控制点焊机的点焊时间,以确保焊接质量。

2. 电池检测•读取电池电压:使用ADC模块读取电池电压,根据电压值判断是否满足点焊条件。

•判断电池状态:根据电池电压判断电池是否正常,如果电压过低或过高,则停止点焊。

3. 点焊控制•控制IO口输出:根据电池检测结果,控制IO口输出高电平触发点焊动作。

•启动定时器:启动定时器开始计时,控制点焊时间。

•等待定时器中断:等待定时器中断,表示点焊时间到达。

•停止点焊:将IO口输出低电平,停止点焊动作。

程序代码实现下面是STC单片机电池点焊机的程序代码实现示例:#include <reg51.h>// 定义IO口和ADC引脚sbit weldPin = P1^0;sbit adcPin = P2^0;// 定义定时器相关变量unsigned char TH0_value, TL0_value;// ADC初始化函数void ADC_Init(){// 设置ADC引脚为输入模式adcPin = 1;}// ADC读取函数unsigned int ADC_Read(){unsigned int adcValue;// 设置ADC转换开始信号ADC_CONTR = 0x80;// 等待ADC转换完成while (ADC_CONTR & 0x10);// 读取ADC转换结果adcValue = ADC_RES;// 返回ADC值return adcValue;}// 定时器初始化函数void Timer_Init(){// 设置定时器0为工作方式1,16位定时器/计数器 TMOD = 0x01;// 设置定时器0的初值TH0_value = 0xFC;TL0_value = 0x67;// 装载定时器0初值TH0 = TH0_value;TL0 = TL0_value;// 启动定时器0TR0 = 1;}// 定时器中断服务函数void Timer_Interrupt(void) interrupt 1{// 停止定时器0TR0 = 0;// 清除定时器0溢出标志TF0 = 0;// 设置IO口输出低电平,停止点焊weldPin = 0;}// 主函数void main(){// 初始化设置ADC_Init();Timer_Init();while(1){// 电池检测unsigned int batteryVoltage = ADC_Read();if (batteryVoltage < 200 || batteryVoltage > 400) {// 电池电压异常,停止点焊weldPin = 0;continue;}// 点焊控制weldPin = 1;// 等待定时器中断while(!TF0);// 清除定时器溢出标志TF0 = 0;}}结论通过以上的程序代码,我们实现了STC单片机电池点焊机的自动化控制。

基于单片机的AD转换电路与程序设计

基于单片机的AD转换电路与程序设计

目录摘要 (1)ABSTRACT (2)0文献综述 (3)1引言 (3)1.1任务分析与方案确定 (4)1.2单片机的系统分析 (4)1.3A/D转换器的选取 (7)1.4传感器的数据采集 (8)1.5显示与键盘分析 (10)2 系统硬件设计 (13)2.1A/D转换的一般步骤 (13)2.2ADC0809内部功能与引脚介绍 (13)2.3ADC0809与MCS-51系列单片机的接口方法 (16)2.4控制器、振荡源和复位电路 (18)2.5键盘与显示电路 (19)3 软件设计 (21)3.1A/D转换 (21)3.2标度变换 (24)3.3数制转换 (25)3.4键盘程序 (26)3.5LED显示程序 (27)4结论 (28)参考文献 (29)致谢 (30)基于单片机的A/D转换电路与程序设计XXX西南大学工程技术学院,重庆400716摘要:A/D转换是指将模拟信号转换为数字信号,这在信号处理、信号传输等领域具有重要的意义。

常用的A/D转换电路有专用A/D集成电路、单片机ADC模块,前者精度高、电路复杂,后者成本低、设计简单。

基于单片机的A/D转换电路在实际电路中获得了广泛的应用,论文对这一电路结构进行了详细的研究。

关键词:单片机;AD转换器;电路Based on SCM A/D Circuit and Program DesignTANG XiaolingCollege of Engineering and Technology, Southwest University, Chongqing 400716, ChinaAbstract:A/D conversion refers to analog signals into digital signals, which in signal processing, signal transmission fields has the vital significance. Commonly used A/D circuit has dedicated A/D IC chip, high precision, the former ADC module circuit, the complex, low cost, simple design. Based on SCM A/D circuit in practical circuit has been widely used in the circuit, this paper makes A detailed study of the structure.0文献综述数据采集系统(用于将模拟信号转换为计算机可以识别的数字信号。

10 STC15F2K60S2系列单片机的AD转换器 例题

10 STC15F2K60S2系列单片机的AD转换器 例题
MOV R2,#249
DELAY_LOOP:
DJNZ R2,DELAY_LOOP
DJNZ R3,DELAY_LOOP1
DJNZ R4,DELAY_LOOP0
POP 04;恢复现场
CPL A
MOV P3, A;低8位送P2口LED灯显示
MOVADC_CONTR,#89H;重新启动A/D转换
RETI
DELAΥ:
PUSH 02;将寄存器组0的R2、R3、R4入栈
PUSH 03
PUSH 04
MOV R4,A;取最外循环的循环次数
DELAY_LOOP0:
MOV R3,#200
DELAY_LOOP1:
汇编语语言参考程序如下:
$INCLUDE(STC15F2K60S2.INC)
;包含STC15F2K60S2单片机寄存器定义文件,若无现成的STC15F2K60S2.INC文件,
;则可以用“EQU”和“DATA”直接对A/D转换用到的新增特殊功能寄存器进行定义
ADC_DATAEQU 30H;定义A D转换结果保存单元
ADC_CONTR=0x81;//清A/D转换结束标志位
adc_data=ADC_RES;//保存A/D转换结果
P2=~ADC_RES;//送P2口LED灯显示
}
}
例10.2编程实现利用STC15F2K60S2单片机ADC通道1采集外部模拟电压信号,10位精度,·采用中断方式进行转换,并将转换结果保存于30H和31H单元中,并送P3和P2口LED灯显示(低电平驱动),P3口LED灯显示最高2位,P2口LED灯显示低8位。设时钟频率为18.432MHz。
MOV ADC_DATA,A;保存A/D转换结果
CPL A

单片机实现5v电压ad数模转换

单片机实现5v电压ad数模转换

Stc12c5a60s2系列单片机的A/d数模转换模块实验摘要:与时间成连续函数的物理量,一般都称之为模拟量。

人们在工业生产及科研过程中遇到的被测量绝大部分是模拟量。

例如:电压,电流,温度,压力,位移,速度等。

计算机技术是测量与控制自动化与智能化的关键,是现代测控技术的核心技术之一。

现代计算机是数字计算机,它无法直接处理模拟信号,因此欲实现基于计算机的测量与控制,必须具备将连续变化的模拟信号转变成计算机能够识别及处理的数字信号的手段。

为此模/数转换技术应运而成,并成为现代测控技术中的重要组成部分。

将模拟量转换为一定码制的数字量称为模/数转换。

Stc12c5a60s2系列单片机作为微型控制芯片的一种,其自身自带a/d装换口:P1(p1.0-p1.7),可实现数模转换功能。

实验目的:以Stc12c5a60s2单片机以及1602液晶显示屏做一个简易的”电压测量器“,测量线性稳压电源提供的直流电压,精度0.01v,通过调节电位器,将输入的电压转换为数字量实时显示在1602lcd上。

实现过程:1.理论学习:(1)在掌握1602lcd工作原理及使用方法的基础上,查阅Stc12c5a60s2单片机数模转换模块应用介绍,弄清楚a/d转换器的结构,了解a/d转换器是如何工作的。

(2)理解与a/d转换器相关的寄存器的设置,会根据实际需要设置相关的寄存器。

(3)了解如何配置a/d转换口,如何取出转换结果。

以十位结果为例,计算公式如下:Vcc即单片机实际工作电压,我们用单片机工作电压做模拟参考电压,则输出的实际电压vin=result(结果寄存器中的值)×vcc(单片机工作电压5v)/1024。

2.需注意的问题:(1)Stc12c5a60s2单片机的参考电压源是输入的工作电压vcc,所以一般不用外接参考电压源,如果单片机是采用电池供电,电池电压会在一定范围内漂移,所以vcc就不固定,这时候就需要在8路a/d转换的一个通道外接一个稳定的参考电压源,来计算此时的工作电压vcc,再计算出其他几路a/d转换通道的电压。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
b A c1G J+j p h L0ADC_CONTR &= 0xF7; //1111,0111令ADC_START = 0,关闭A/D转换,电子爱好者社区V q3O.I Z T
return (ADC_DATA); //返回A/D转换结果
Z ^ R#E$h0}
X1x A n,f I*L"R+q L9M0电子爱好者社区!L U)X O z M \ w `
//断开P1.0,P1.1内部上拉电阻
8W | K N q;K R? ?1{&E0while(1)电子爱好者社区8L-[;t [9R v
{电子爱好者社区5b L r h O }4B
get_AD_result(0);
7q4` p [*u x ~ I0delay(200);电子爱好者社区6K s)@ X:] F
void main()
F C'l4H \+u!F;L k v0{
M [:h W ?1m @)y x0P1 = P1 | 0x03; // 0000,0011,P1.0,P1.1为A/D转换,即通道0与1
&E R5x#c G v)m @0P1_ADC_EN = 0x03; //0000,0011, P1的P1.0,P1.1设置为A/D转换输入脚电子爱好者社区P;i s V0o c m\ w
$O Q#N/`#l:E&K I0#define uint unsigned int ;
6D5Y t C(j m%b d7n3b ? w0void delay(uchar delay_time) //延时函数电子爱好者社区:^2L+n Y T7w5?*[
{
R"r%v K)]*h l \ i2h0uchar n;
sfr ADC_DATA = 0来自C6; //A/D转换结果寄存器
f/j V d:g8l J0sfr P1M0=0x91;电子爱好者社区$K"r.e,v y q
sfr P1M1=0x92;电子爱好者社区:h(l3x w I%v*C | q4M
#define uchar unsigned char ;
get_AD_result(1);电子爱好者社区5L M/L0{8v,N1R8]
delay(200);
\6` ~-u h A G Y q%a w0}
V M l H5y H z o8z n0}
#include <reg52.H>电子爱好者社区,@3s w)[%N a
#include <intrins.H>电子爱好者社区+[$o2C r R M F W f6o
sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器
] _ f+Q w1Z0sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器电子爱好者社区z8N K M A S |
电子爱好者社区(Q _4t#x&m O c ?
uchar get_AD_result(uchar channel)电子爱好者社区3O p8~ ] { K _
{电子爱好者社区p z K2^ n'p
uchar AD_finished = 0; //存储A/D转换标志电子爱好者社区0` R:?,y;A N/}.k q z
E&S.X G:t V0uint m;
P,s { z q j0for (n=0;n<delay_time;n++)电子爱好者社区+i/Q D/X!C+u"E*A Z
{
t m y m X I+b0for(m=0;m<10000;m++);
0d p v x O O k+u B0}
p/k(j _5` g+e.k0}电子爱好者社区,v o N [3e l9_
ADC_DATA = 0;电子爱好者社区K5f [ x {-q Y$S%}0S+L2v
ADC_CONTR = channel; //选择A/D当前通道电子爱好者社区c$M2F w#a e Y
delay(1); //使输入电压达到稳定
%B2}+})Q1i L1i n'_/Z0ADC_CONTR |= 0x08; //0000,1000令ADC_START = 1,启动A/D转换电子爱好者社区5@ w(~!Y r2t u"B
AD_finished = 0;电子爱好者社区d l d W+Q2s xh)M
while ( AD_finished == 0 ) //等待A/D转换结束
z m @ b q b$J a0{电子爱好者社区z g [&p,y/l K F
AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否电子爱好者社区Y K+`/]'R-I
相关文档
最新文档