STM32F103C8T6与STC89C52单片机的几个区别
//这是ADS7822的C语言版本的驱动程序
unsigned int read_ADS7822()
{
int i;//定义数据读取次数的变量
uint j;//定义采样数据暂存单元
uint dd; //定义采样数据储存单元,16位数据
//初始化
//ad_dclock = 1;
GPIO_SetBits(GPIOB,GPIO_Pin_11);
//开始采集数据
//ad_dclock = 0; //ad_dclock在CS之前设置为低电平
GPIO_ResetBits(GPIOB,GPIO_Pin_11);
//ad_cs = 0; //启动AD转换
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
for(i = 0; i < 15; i++) //读取采样数据,一共15个循环
{
//ad_dclock = 0; //送读取脉冲
GPIO_ResetBits(GPIOB, GPIO_Pin_11);
//j = (uint)(ad_dout); //读取数据
j = (uint)(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10));
dd = dd << 1; //总数据移位
dd = dd | j; //总数据移位后与前面数据相或
//ad_dclock = 1;
GPIO_SetBits(GPIOB, GPIO_Pin_11);
}
//读取数据完毕,恢复初始化工作
//ad_cs = 1; //一次采样完成,片选设置为高电平
GPIO_SetBits(GPIOB, GPIO_Pin_1);
//处理数据
//51单片机是8位系统,int类型是16位的数据
//16位的数据,最高位为0,接着三位没有意义,剩下12位是有效数字
//所以要用下面两行代码除去最高的4位数据。
//现在使用的是32位的stm32系统,int类型的变量有32位
//从AD采集到的数据是16位的,前4位无效,所以要得到有效的12位数据,
//需要向左移动20位,使4位无效数据溢出,然后再右移20位
//这样就可以得到12位有效数据了
dd = dd << (4 + 16);
dd = dd >> (4 + 16);
return dd; //返回采样值,dd个2.5/4096V
}