ADS8685驱动,添加到工程即可使用,亲测无误!
单片机源程序如下:
- #include "ads8685.h"
- #include "delay.h"
- void Ads8685_RESET(void)
- {
- ADS8685_RST=0;
- delay_ms(30);
- ADS8685_RST=1;
- delay_ms(30);
- }
- void Ads8685_WriteData(u8 data)
- {
- u8 index=0;
- ADS8685_SCLK =0;
- delay_us(2);
- for(index=0;index<8;index++)
- {
- if(data&0x80)
- {
- ADS8685_SDI=1;
- }
- else
- {
- ADS8685_SDI=0;
- }
- ADS8685_SCLK =1;
- delay_us(2);
- ADS8685_SCLK =0;
- delay_us(2);
- data=data<<1;
- }
- ADS8685_SCLK =0;
- delay_us(2);
- }
- void Ads8685_WriteReg(u8 reg,u16 data)
- {
- u16 retry=0;
- ADS8685_CS=0;
- while(ADS8685_RVS)//此引脚为低电平才可以操作ADS8685
- {
- retry++;
- if(retry>=0xfffe)
- {
- break;
- }
- }
- Ads8685_WriteData(0xd0);//input command ,datesheet P43
- Ads8685_WriteData(reg);
- Ads8685_WriteData(data>>8);//写高8位
- Ads8685_WriteData((u8)(data&0xff));//写低8位
- ADS8685_CS=1;
- }
- void Ads8685_Init(void)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB,PE端口时钟
-
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //LED0-->PB.5 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
-
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //LED0-->PB.5 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- ADS8685_SCLK=0;
- ADS8685_RST=0;
- Ads8685_RESET();
- Ads8685_WriteReg(0x14,0x000b);//使用内部参考电压源并且设置输入电压范围为0~5.12V 1.5*Vref 内部参考电压4.096V
- }
- u16 Ads8685_Readdata(void)
- {
- u16 retry=0;
- u8 index=0;
- u32 read_data=0;
- delay_us(10);
-
- ADS8685_CS=1;
- retry=0;
- while(!ADS8685_RVS)
- {
- retry++;
- if(retry>=0xfffe)
- {
- break;
- }
- }
-
- ADS8685_CS=0;
- retry=0;
- while(ADS8685_RVS)
- {
- retry++;
- if(retry>=0xfffe)
- {
- break;
- }
- }
-
- for(index=0;index<32;index++)
- {
- delay_us(2);
- ADS8685_SCLK=1;
- delay_us(2); //时间大于15ns即可
-
- read_data = read_data << 1;
- if(ADS8685_SDO_0) //串行通信 数据输出0 读SD0_0,如果有数据1,则加到read_data末尾
- {
- read_data=read_data+1;
- }
- ADS8685_SCLK=0;
- delay_us(1);
- }
- delay_us(2);
- ADS8685_CS=1;
-
- return (read_data>>16);
- }
复制代码
所有资料51hei提供下载:
ads8685驱动.zip
(1.64 KB, 下载次数: 78)
|