采用SPI的方式也不行,主主要是等待1241DOUT变为高电平,但读不到啊。
以下是SPI的方式
void MAX1241_Init()
{
//根据其时序,需要拉低SCK,拉低CS,这时DOUT为低电平,等待DOUT 转换成功变为高电平后开始接受SPI的AD数据
DDR_SPI&=~MISO_AD;//将MISO为输入
//PORT_SPI|=MISO_AD;//上拉
DDR_SPI|=CS_AD|SCK_AD;//输出
PORT_SPI&=~SCK_AD;//先拉低SCK
PORT_SPI|=CS_AD;//CS先拉高
_delay_ms(1);
PORT_SPI&=~(CS_AD );//拉低片选和时钟芯片
//DDR_SPI=0x00;//转为输入
while(!(PIN_SPI & 0x40));//等待转换为高电平,
// _delay_ms(8);
}
void SPI_Init()
{
DDR_SPI|=CS_AD|SCK_AD;//输出
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//使能SPI,16分频;MSB在前
PORT_SPI&=~CS_AD;//拉低CS
}
uchar Max1241_AD()
{
uint ad_data;
while(!(SPSR & (1<<SPIF)));//等待中断响应
ad_data=SPDR<<4;
ad_data=ad_data|(SPDR>>3);
// PORT_SPI|=CS_AD;//先拉高
return ad_data;
}
|