📄 adc0834code.txt
字号:
ADC0832-2应用程序-ADC0832,C语言,KEIL C,51单片机基础知识C语言
//==============================================================================
//2005-03-28...2005-03-29
//ADC0834模块的C51程序源文件
//File Name=ADC083X.c
//==============================================================================
#include
#include "DELAY_S.h"
#include "ADC083X.h"
//外部全局变量的预定义
//*******************************************************
//序号:
// HD_ADC083X_S01
//功能:
// 端口初始化
//输入:
// 无
//输出:
// 无
//********************************************************
void adc083x_init(void)
{
SET_ADC083X_CS; //不选片
SET_ADC083X_DO; //默认是高
CLR_ADC083X_CLK; // 时钟默认是低
#if TYPE_VAL >=ADC0832
SET_ADC083X_DI;
#endif
#if TYPE_VAL >=ADC0834
SET_ADC083X_SARS;
#endif
}
//*******************************************************
//序号:
// HD_ADC083X_S02
//功能:
// 读出AD数据字节
//输入:
// chanel 通道号以及单、双端设置选择,它的值被类型值限制!
// 即有效值是select分别取最低4、3、2位或不使用
// 具体的值参见pdf文档!
//输出:
// AD转换的结果字节
//********************************************************
亲爱的:CHANEL(通过CHANEL的值的2.1.0三位组合选择模拟通道1/2/3/4)数值代表选择转换的通道哦
uchar adc083x_do_one_change(uchar chanel)
{
uchar data ad_val;
uchar data i;
//转换前的初始化
SET_ADC083X_CS;
CLR_ADC083X_CLK;
SET_ADC083X_DO;
CLR_ADC083X_CS;
//SARS引脚非必要时可以不使用,以节省引脚资源!
#if (TYPE_VAL==ADC0838)
//chanel_.3.2.1.0=0000 通道0+_通道1-,=001 通道2+_通道3-,(双端方式)
亲爱的(TYPE_VAL==ADC0838)表示片子是ADC0838的,8个通道(chanel的后四位选择通道 包括单端方式,就是输入电压一个接地一个接CHANEL模拟输入通道哦)差分方式就是两端分别接通道如CH1和CH2通过输入端的电压差来作为输入电压信号,等待芯片的转换。
// SGL(单端)/DIF差分 ODD/SIGN SELECT SELECT =0010 通道4+_通道5-,=011 通道6+_通道7-,(双端方式)
// =0100 通道0-_通道1+, =0101 通道2-_通道3+,(双端方式)
// =0110 通道4-_通道5+,=0111 通道6-_通道7+,(双端方式)
// =1000 通道0+, =1001 通道2+,(单端方式)
// =1010 通道4+, =1011 通道6+,(单端方式)
// =1100 通道1+, =1101 通道3+,(单端方式)
// =1110 通道5+, =1111 通道7+,(单端方式)
//引脚/SE可以接地,不使用其控制反响字节的输出延时功能!
chanel |=0x10; //附加起始位
for(i=0; i<5; i++)
{
if( (chanel &0x10)!=0)
{
SET_ADC083X_DI;
}
else
{
CLR_ADC083X_DI;
}
SET_ADC083X_CLK;
CLR_ADC083X_CLK;
chanel <<=1;
}
#elif
(TYPE_VAL==ADC0834)//chanel_.2 .1.0 =000 通道0+_通道1-,=001 通道3-,(双端方式)
// SGL/DIF ODD/SIGN SELECT=010 通道0-_通道1+, =011 通道2-_通道3+,(双端方式)
// =100 通道0+, =101 通道2+,(单端方式)
// =110 通道1+, =111 通道3+,(单端方式)
亲爱的(TYPE_VAL==ADC0838)表示片子是ADC0838的,8个通道(chanel的后四位选择通道 包括单端方式,就是输入电压一个接地一个接CHANEL模拟输入通道哦)差分方式就是两端分别接通道如CH1和CH2通过输入端的电压差来作为输入电压信号,等待芯片的转换。
选择通道:
chanel=4//通道0+(单端方式)
chanel=5//通道1+(单端方式)
chanel=6//通道2+(单端方式)
chanel=7//通道3+(单端方式)
chanel |=0x08; //附加起始位
for(i=0; i<4; i++)
{
if( (chanel &0x08)!=0) //如果第四位是1
{
SET_ADC083X_DI; //DI=1就是如果第四位为1就传1如果是0就传0。然后左移位,把要发的数据都移位到第四位上发出。
}
else
{
CLR_ADC083X_DI;
}
SET_ADC083X_CLK; //时钟=1 数据传到DI 线上
CLR_ADC083X_CLK; //时钟=0 ADC0834保存DI得到的数据
chanel <<=1; //发完一位,左移一位发下面的位
}
//以下是ADC0832的通道命令传输,与我们,没有关系哦
#elif (TYPE_VAL==ADC0832)
//chanel_.1.0=00 通道0+_通道1-, =01 通道0-_通道1+,(双端方式)
// SGL/DIF ODD/SIGN =10 通道0+, =11 通道1+, (单端方式)
chanel |=0x04; //附加起始位
for(i=0; i<3; i++)
{
if( (chanel &0x04)!=0)
{
SET_ADC083X_DI;
}
else
{
CLR_ADC083X_DI;
}
SET_ADC083X_CLK;
CLR_ADC083X_CLK;
chanel <<=1;
}
#else //缺省时为ADC0831
SET_ADC083X_CLK;
CLR_ADC083X_CLK;
#endif
SPI总线是通过两个单向线DI和DO线和AD0834等芯片进行通信哦,DI是单片机向AD0834输出控制信号(单片机先要告诉AD0834现在要转换的是哪个通道,是单端还是差分输入,DI传输必须以一个“1“作为起始位,必须使CHANEL第四位为1,所以chanel |=0x08;//附加起始位其余三位2,1,0位代表SGL/DIF ,ODD/SIGN ,SELECT = 010)然后就把这4位以先传第四位然后第三位,这样4次传完。选择通道和方式(单端方式/差分方式),ADC0832就知道了需要把你想要转换的通道数据转换并开始从DO口一位一位的数据传输,因为是8位的数据输出,(ADC0838是12位的,所以需要指出是先传8位还是先传4位/SE来决定先传12位还是先传4位)而ADC0834不用这一位控制。所以时序就是单片机传CHANEL命令给ADC0834,然后单片机就可以通过时钟和DO来进行8次移位操作来接收数据,然后保存在ad_val中,供单片机调用,要查询两个通道可以通过分别输入输入不同的CHANEL命令来进行操作)
//亲爱的念儿,命令传完了,转换就开始了,并且开始从DO口输出数据了,ADC0834在CLK高电瓶的时候,把数据传到DO线上,然后SCLK低电平时单片机保存存在缓冲区的数据哦,并且允许DO线上的数据变化;下面的程序单片机通过SPI总线在从这儿开始要接收数据了哦,
SET_ADC083X_CLK; //数据接收前的转换位
CLR_ADC083X_CLK; //CLK总在开始为低
for(ad_val=0, i=0; i<8; i++)
{
ad_val <<=1; //
SET_ADC083X_CLK;
ad_val +=(JUDGE_ADC083X_DO ==1? 1:0);//如果数据收到的数据为1,那么返回值ad_val加1然后右移一位,如果为0加0右伊,不断在低位加1,首先接收到的是最高位MSB哦最后得到的是最低位LSB哦
CLR_ADC083X_CLK; //低电平用许数据变化
}
//对非ADC0831的型号而言,后续波形没有使用!
SET_ADC083X_CS;
return(ad_val);
}
//=============================================================================
//End Of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -