📄 ad7791.txt
字号:
我要写一个程序,是通过SPI口读取AD7791的转换结果,但是我读出来的结果一直都不对,不知程序错在那里了,请各位高手帮忙
急等着用,希望各位帮忙找错,在此先谢过了
/*SPI初始化*/
void spi_init(void)
{
unsigned char temp;
DDRB |= 0x17; //MISO=input and MOSI,SCK,SS = output,PB4输出用于片选AD7791
PORTB |= 0xF8; //1111 1000 MISO上拉电阻有效,PB4位为高电平
SPCR = 0x59; //SPI允许,主机模式,MSB,极性方式10,1/16系统时钟速率
SPSR = 0x00;
temp = SPSR; //清空SPIF标志
temp = SPDR;
}
unsigned char spi_tran(unsigned char data) //发送的同时接受数据
{
unsigned char clear;
SPDR=data;
while(!(SPSR&0x80));
clear=SPSR;
clear=SPDR;
return clear;
}
unsigned long read_ad(void) //读AD芯片数据
{ unsigned long addata;
unsigned long data[3];
unsigned char temp;
PORTB&=~0x10; //片选
spi_tran(0x10); //写通讯寄存器表明下一步写模式寄存器(不管写AD中任何寄存器前必须先给
通讯寄存器写数据,再决定下一步是读或写那个寄存器)
spi_tran(0x82); //通过写模式寄存器配置AD芯片为单次转换,有缓冲器(一旦配置完成就开始
进行一次模数转换)
do //等待一次转换结束(芯片中状态寄存器的最高位变为0表示转换结
{ 束,为了读状态寄存器必须先写通讯寄存器)
temp=spi_tran(0x08);
temp=spi_tran(0x00);
}
while(temp==0x8C);
data[0]=(unsigned long)spi_tran(0x00); //开始连续读出24位转换结果
data[1]=(unsigned long)spi_tran(0x00);
data[2]=(unsigned long)spi_tran(0x00);
addata=(data[0]<<8);
addata=(addata<<8);
addata|=(data[1]<<8);
addata|=data[2];
PORTB|=0x10; //片选
return addata;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -