STM32F103C8T6与STC89C52单片机的几个区别

时间:2025-03-07 20:15:46
//这是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 }