新闻中心

EEPW首页>嵌入式系统>设计应用> AVR单片机驱动高精度AD芯片ADS1256的C程序

AVR单片机驱动高精度AD芯片ADS1256的C程序

作者: 时间:2016-11-30 来源:网络 收藏

/*************************************************************************************/
unsigned long int ads_sum(unsigned char data)//读A/D数据。
{
unsignedlongint aa=0;
if((data>=0)&&(data<=7))
{
ad_write(01,0x80+data); //第几通道为选通
ads_senddata(0xf0); //自校准
aa=ad_read(); //读24位A/D数据。
}
return aa;
}

volatile unsigned charsum=0; //定义全局的指令变量

//设置串口的参数
void USART_Init( unsigned int baud )
{
/* 设置波特率9600*/
UBRRH = 0;
UBRRL = 47;
/* 接收器与发送器使能*/
UCSRB = (1< /* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1< }

void USART_Transmit( unsigned char data )
{PORTD|=(1< /* 等待发送缓冲器为空 */
while ( !( UCSRA & (1< ;
/* 将数据放入缓冲器,发送数据 */
UDR =data;
}

unsigned char USART_Receive( void )
{
/* 等待接收数据*/
while ( !(UCSRA & (1< ;
/* 从缓冲器中获取并返回数据*/
return UDR;
}

SIGNAL (SIG_UART_RECV) //接收中断
{sum=UDR;}

SIGNAL (SIG_UART_TRANS) //发送结束中断
{PORTD&=~(1<
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~配置SPI~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void SPI_MasterInit(void) //配置SPI为主机
{
/* 设置MOSI 和SCK 为输出,其他为输入 */
DDRB|=(1< DDRB&=~(1< PORTB|=(1< /* 使能SPI 主机模式,设置时钟速率为fck/16 */
SPCR = 0x52; //7e 高位首发,SPI使能,主机模式,SCK空闲保持为低电平,数据在上升沿采样,速率为1:64(FOSC/128)
SPSR = 0x01; //使能倍速1:32
}

//--------------------------------------------------------------------------------------------//

void port (void)
{
DDRD|=(1< PORTD&=~(1< DDRB|=(1< PORTB&=~(1< }


//主函数
main(void)
{
unsignedlongint d=0,p[12],n=0,m=0;
unsigned char aa=0,a=0,b=0,c=0,i=0;
port(); //端口初始化
SPI_MasterInit(); //SPI端口初始化
USART_Init(1); //串口初始化
ADS1256(); //初始化ADS1256
sei();

while(1)
{
aa=sum;
if(aa<=10)
{sum=15;
a=0;b=0;c=0;n=0x400000;m=0;
for (i=0;i<12;i++)
{
p[i]=ads_sum(aa);//读A/D数据。通道地址0~7 0、1、2、3、4、5、6、7
if(n>p[i])
n=p[i];
if (m m=p[i];
d=d+p[i];
}
d=(d-n-m)/10;
a=d%256;
d=d>>8;
b=d%256;
d=d>>8;
c=d%256;
USART_Transmit(c);
USART_Transmit(b);
USART_Transmit(a);

}
}
}


上一页 1 2 下一页

评论


技术专区

关闭