标题:
ATMEGA16单片机+AD7715采集陀螺仪的驱动程序
[打印本页]
作者:
ltj0107
时间:
2019-4-27 21:43
标题:
ATMEGA16单片机+AD7715采集陀螺仪的驱动程序
,用ATMEGA16编写,使用AD7715做AD采集,16BIT精度
单片机源程序如下:
#include<avr/io.h>
#include<stdio.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define RDY (PINA&_BV(5))
#define RES_1 PORTA|=_BV(5)
#define RES_0 PORTA&=~_BV(5)
static uint g_aAdValue[100]; //A/D 转换缓冲区
unsigned long int results=0;
uint jiaodu,zhong;
uint adc;
int vjiao;
long fx;
/*----------------------------------------------------------------------------
延时一些时间
------------------------------------------------------------------------------*/
void delay10ms(unsigned int x)
{
unsigned char i,j,k;
for(i=0;i<x;i++)
for(j=0;j<10;j++)
for(k=0;k<120;k++);
}
void delay(unsigned int x)
{
while(x--)
{;}
}
/*----------------------------------------------------------------------------
初始化IO口
------------------------------------------------------------------------------*/
void IoInit(void)
{
DDRA=0X0F;
PORTA=0Xff;
//DDRD=0Xff;
//PORTD=0Xff;
}
void InitS() //初始化串口
{
UBRRL=51;//设置波特率为9600
UCSRB|=_BV(RXEN)|_BV(TXEN);//允许串口接受
// UCSR1B|=_BV(RXCIE);//允许串口中断
}
void SPI_SET(void) //SPI初始化
{
DDRB=0XBE; //DRDY接PB1,设置PB1为输入口
PORTB=0XFF;
PORTB=0XEF&PORTB; //复位接PB4,此处为拉低PB4
SPCR=0X5c; //设置SPI使能,工作于主机状态,
//并设CPOL=0,CPHA=1,SPR1=0,SPR2=0
//SCK为对11.0592晶振的1/4分频
}
void WRITE_DATA(uchar i) //SPI发送数据
{
uchar CLEAR;
SPDR=i;
while(!(SPSR&0X80));
CLEAR=SPSR;
CLEAR=SPDR;
}
uchar READ_DATA(void) //SPI接收数据
{
uchar data,clear;
SPDR=0x00;
while(!(SPSR&0x80));
clear=SPSR;
data=SPDR;
return(data);
}
void putbyte(uchar x)
{
while( !(UCSRA & (1<<UDRE)) );
UDR=x;
}
////////////////////////////////////////////////////////////////////////////////
uchar num(uchar x)
{
switch(x)
{
case 0:x='0';break;
case 1:x='1';break;
case 2:x='2';break;
case 3:x='3';break;
case 4:x='4';break;
case 5:x='5';break;
case 6:x='6';break;
case 7:x='7';break;
case 8:x='8';break;
case 9:x='9';break;
}
return x;
}
uint AD(void)
{
uint result1,result2,ad;
RES_1;
while(RDY);
WRITE_DATA(0x38);
while(RDY);
result1=READ_DATA();
result2=READ_DATA();
RES_0;
ad=(result1<<8)+result2;
return ad;
}
void InitTLY(void)
{
uchar i;
for(i=0;i<200;i++)
{
results+=AD();
}
zhong=results/200;
}
//****************************************************************************//
// //
// 主函数 //
// //
//****************************************************************************//
int main(void)
{
uchar i;
IoInit();
InitS();
SPI_SET();
while(1)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
陀螺仪.zip
(11.63 KB, 下载次数: 10)
2019-4-27 21:42 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-4-27 22:27
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1