⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads7816.c

📁 12位ads7816的两种读取方式:SPI方式和手动方式
💻 C
字号:
//SPI初始化
void ads7816_init(void)
{
    PORTB = 0b11111111;//打开MISO的内部上拉电阻
    DDRB  = 0b11110111;//SS,SCK,MOSI设置为输出,MISO(Dout)设置为输入
    //SPCR = 0x11010011;//SPI中断允许,SPI允许,高位在先,主机模式,f/128
    //SPSR = 0x00;//单倍速模式
}

//一次AD采样
uint ads7816(void)
{
    uchar i,data;
    uint out= 0;
    PORTB |=  _BV(CS);
    PORTB |=  _BV(CLK);

    PORTB &= ~_BV(CS);	//CS拉低,开始采样

    PORTB &= ~_BV(CLK);
    PORTB |=  _BV(CLK);

    PORTB &= ~_BV(CLK);
    PORTB |=  _BV(CLK);

    PORTB &= ~_BV(CLK);
    PORTB |=  _BV(CLK);

    for (i=0;i<12;i++)
    {
        PORTB &= ~_BV(CLK);
        data = PINB;
        if (data & 0b00001000)
        {
            out |= (0x0800>>i);
        }
        PORTB |=  _BV(CLK);
    }
    PORTB |=  _BV(CS);
    return out;
}
*/

//ADS7816操作严格按照时序进行
//SPI初始化
void ads7816_init(void)
{
    //SPI初始化,ADS7816
    PORTB = 0b11111111;//打开MISO的内部上拉电阻
    DDRB  = 0b11110111;//SS,SCK,MOSI设置为输出,MISO(Dout)设置为输入
    SPCR  = 0b01010000;//SPI允许,高位在先,主机模式,f/4
    SPSR = 0x00;//单倍速模式
}

uint ads7816(void)
{
    uint c=0;
    uint out= 0;
    PORTB |=  _BV(CS);
    //开始采样
    PORTB &=  ~_BV(CS);
    SPDR = 0x00;
    loop_until_bit_is_set(SPSR,7);
    c = SPDR&(0b01111111)&(0b10111111);//前三位无效,从第四位开始B11,B10...
    out = c;//第一次取得5个有效位
    out = out<<7;

    SPDR = 0x00;
    loop_until_bit_is_set(SPSR,7);
    c = SPDR;//第二次取得7个有效位

    out += (c>>1);
    //结束采样
    PORTB |=  _BV(CS);
    return out;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -