1. 单片机AD采集的C程序
AD0809的采集程序
//---A/D转换---
//-----头文件引用------
#include <Reg51.h>
#include <absacc.h>
#include <intrins.h>
typedef unsigned char BYTE; /*自定义字节类型*/
#define Set_Bit(BIT) (BIT = 1) /*定义置1函数*/
#define Clear_Bit(BIT) (BIT = 0) /*定义清0函数*/
/************************************************************************************/
void Write_Hd7279(BYTE,BYTE); /*定义HD7279写函数*/
BYTE Read_Hd7279(BYTE); /*定义HD7279读函数*/
void Send_Byte(BYTE); /*定义HD7279发送字节函数*/
BYTE Receive_Byte(void); /*定义HD7279接收字节函数*/
void Short_Delay(void); /*定义短延时函数*/
void Long_Delay(void); /*定义长延时函数*/
void Mcu_Init(void); /*定义MCU初始化函数*/
void Delay_200_mS(void); /*定义200ms延时函数*/
sbit Hd7279_Clk=P1^6; /*定义HD7279时钟硬件连接*/
sbit Hd7279_Data=P1^5; /*定义HD7279数据硬件连接*/
sbit cs=P1^7;
void Short_Delay(void) /*短延时函数*/
{
BYTE i;
for(i=0;i<0x08;i++);
}
/************************************************************************************/
void Long_Delay(void) /*长延时函数*/
{
BYTE i;
for(i=0;i<0x30;i++);
}
/************************************************************************************/
void Write_Hd7279(BYTE Command,BYTE Data) /*HD7279写函数*/
{
Send_Byte(Command);
Send_Byte(Data);
}
/************************************************************************************/
void Send_Byte(BYTE Data_Out) /*HD7279发送字节函数*/
{
BYTE i;
cs=0;
Long_Delay();
for(i=0;i<8;i++)
{
if(Data_Out&0x80) Set_Bit(Hd7279_Data);
else Clear_Bit(Hd7279_Data);
Set_Bit(Hd7279_Clk);
Short_Delay();
Clear_Bit(Hd7279_Clk);
Short_Delay();
Data_Out=Data_Out<<1;
}
Clear_Bit(Hd7279_Data);
}
//-----宏声明-----
#define A_DPORT XBYTE[0xFef3]//0809通道0地址
#define uchar unsigned char
//-----变量定义-----
bit bdata bz=0;//定义标志
uchar val;
//-----初始化-----
void first(void)
{
P1=0xff;
P2=0xff;
P3=0xff;
P0=0xff;
Send_Byte(0xa4);
IT1=1;
EX1=1;
EA=1; //INT0 允许
}
//-----中断-----
void int_0(void) interrupt 2
{
val=A_DPORT; //读 A_D 数据
bz=1; //置读数标志
}
//-----主程序-----
main()
{
first(); //初始化
while(1)
{
A_DPORT=val; //启动 A_D
while(bz==0); //等待 A_D 转换结束
// val=~A_DPORT;
//P1=val; //数据输出
Write_Hd7279(0xc8,val&0x0f);
Write_Hd7279(0xc9,val>>4);
Write_Hd7279(0x92,0x00);
Write_Hd7279(0x93,0x00);
Write_Hd7279(0x94,0x00);
Write_Hd7279(0x95,0x00);
Write_Hd7279(0xce,0x0d);
Write_Hd7279(0xcf,0x0a);
bz=0; //清读数标志
}
}
这就是C的程序
http://hi..com/dzkfw/blog/item/4a188216fd986b12c83d6d05.html
不平凡的单片机学习资料,很好的单片机教程,超好用,一个不占内存的教程,有案例。
1、最新版单片机编程宝典下载地址,学习单片机编程必备手册
2、单片机c语言运用例子
3、十天学会单片机c语言和单片机制作,最好的单片机资料
2. 自带ad的单片机如何实现ad采样的
初始化完后,启动AD转换就可以进行AD采样了。
3. 如何用stc单片机内部ad采集多路交流信号
用stc单片机内部ad采集多路交流信号,有两种办法:
一、用两个AD转换芯片,两路模拟量分别接一个。用单片机控制两个AD芯片同时启动转换,这样基本可以实现采集到同一时刻的两路模拟量值。
二、用两个采样保持器(LF398),来暂时保存模拟量的瞬时值。两个保持器后面接模拟多路转换器,模拟多路转换器后面接一个AD转换器。过程是这样的:要采集之前先给两个采样保持器一个保持信号,紧接着选择多路开关通道,紧接着启动AD转换器。分别选择多路开关的两个通道,来取得两路模拟量的值。因为有采样保持器的存在,可以保证采集到的模拟量是同一时刻的。
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
4. 单片机A/D采样
假设一个系统使用12位的ADC,每秒输出一个温度值(1Hz)。为了将测量分辨率增加到16位,我们按下式计算过采样频率:
因此,如果我们以fs=256Hz的采样频率对温度传感器进行过采样,我们将在所要求的采样周期内采集到足够的样本,对这些样本求均值便可得到16位的输出数据。为此,我们先累加(将256个连续样本加在一起),然后将总和除以16(或将总和右移4位)。这样的过程通常被称为抽取。这样得到的结果是16位的有用数据,所做的操作被称为累加和抽取。一旦我们计算得到由256个样本(对本例而言)所产生的结果,我们将对数据进行保存或处理,然后开始为下一个输出字采集样本。
注:用于累加过采样数据和进行除法运算的存储器单元所占的字节数必须足够多,以免发生溢出或产生截断错误。
5. 单片机的ad采样电路
A/D转换,顾名思义要从模拟信号输入端采集信号(通常为电流),所以要加一个采集电阻,将电流信号转换成电压信号,送到单片机或者A/D转换芯片的输入口(这两个器件只识别到电压信号);至于保持电路就是跟A/D转换芯片或者单片机的转换采集频率有关(它们转换也需要时间),采样信号的频率越高,留给它们数字化处理的时间越短,所以保持电路的作用是将采集回来的信号保持一定时间直到转换器转换完成为止..................
第二个问题答案是:在模拟输入端采集回来的是电压值的话就可以不用采样电路了,不过保持电路还是要,另外如果采集回来的电压值是mV级的,就要另外加放大电路(通常是升压稳压电路或者是三极管放大电路),最后送到单片机端或者是AD端
6. 单片机的AD采样的步骤,求解
设置好外部硬件连接,触发AD开始转换,等待AD转换完毕,AD转换完毕后读取数据。
7. 单片机AD采样如何采样功率
那就是同时采集电流和电压信号。然后像一二楼说的那样根据P=UI计算。需要多个AD输入。
采集电压信号很简单。
采集电流有两种方法,如果知道电流在一定范围内,可以用串联一个阻值较小的电阻,读它两端的电压差,所以最好用如AD0832之类的带差动输入的AD芯片读这个值,然后根据电阻值可计算出流过电阻的电流。第二种采电流方法是用线性霍尔传感器,接一个I/V电路来采集线性霍尔传感器的信号,这个方法用的电流范围广一点。
补充:输出功率也可以像输入功率那样计算。最好是用电流互感器或者用霍尔传感器来采集电流。
8. PIC单片机 16F883 AD采样程序出现错误
设置好ADC通道,在启动ADC转换之前应该加采用延时。ADGODONE置1后应该会自动清零。但有些有问题的型号(比如有些芯片的早期版本)不会自动清零,需要软件在延时一段时间之后用软件去清零。具体你用的这个型号,可以去官网上查一下它的Errata,看看它的早期版本是否有这样的问题。你的883芯片的正面有一个7位数字加字母的追踪码,前四位数字是生产的年份和周数,如果是比较早期的产品,可能是有这个BUG的。