各大神,有没atmega16 atmega8 adc使用其中ADC功能的程序,我很有必要参考下,神爷给我么?

ATMEGA16 ADC模数转换示例程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
ATMEGA16 ADC模数转换示例程序
上传于||暂无简介
大小:7.22KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢有没有人用atmega16调过mpu6050?求大神指点_avr吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:4,034贴子:
有没有人用atmega16调过mpu6050?求大神指点收藏
有没有人用atmega16调过mpu6050?求大神指点#include&iom16v.h&#include&macros.h&#include &math.h& #define uchar unsigned char #define uint unsigned int //****************************************// 定义MPU6050内部地址//****************************************#defineSMPLRT_DIV0x19//陀螺仪采样率,典型值:0x07(125Hz)#defineCONFIG0x1A//低通滤波频率,典型值:0x06(5Hz)#defineGYRO_CONFIG0x1B//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#defineACCEL_CONFIG0x1C//加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)#defineACCEL_XOUT_H0x3B#defineACCEL_XOUT_L0x3C#defineACCEL_YOUT_H0x3D#defineACCEL_YOUT_L0x3E#defineACCEL_ZOUT_H0x3F#defineACCEL_ZOUT_L0x40#defineTEMP_OUT_H0x41#defineTEMP_OUT_L0x42#defineGYRO_XOUT_H0x43#defineGYRO_XOUT_L0x44#defineGYRO_YOUT_H0x45#defineGYRO_YOUT_L0x46#defineGYRO_ZOUT_H0x47#defineGYRO_ZOUT_L0x48#definePWR_MGMT_10x6B//电源管理,典型值:0x00(正常启用)#defineWHO_AM_I0x75//IIC地址寄存器(默认数值0x68,只读)#defineSlaveAddress0xD0//IIC写入时的地址字节数据,+1为读取//****************************************//定义类型及变量//****************************************uchar dis[6];//*******************************************//函数声明//*******************************************//延时函数void DelayMs(uint i);void delay_us(uint n);//整数转字符串void lcd_printf(uchar *s,int temp_data);//端口初始化void port_init(void);//i2c函数声明void i2c_init();void i2c_start();void i2c_wrdata(uchar i2c_data);uchar i2c_redata();uchar i2c_redataack();void i2c_stop();void i2c_wrbyte(uchar i2c_add,uchar i2c_data);void i2c_wrpage(uchar *i2c_data,uchar i2c_add,uchar i2c_nub);uchar i2c_rebyte(uchar i2c_add);void i2c_rese(uchar *i2c_data,uchar i2c_add,uchar i2c_nub);//uart函数声明void Usart_init(void);void Usart_Transmit(unsigned char i);unsigned char Usart_Receive(void);//初始化MPU6050void InitMPU6050();//合成数据int GetData(uchar REG_Address);//发送转换后数据void send_data(int value);//*******************************//延时函数//*******************************//延时函数1Ms级void DelayMs(uint i) {while(i--){
for(j=1;j&=613;j++) ; } }//us延时函数void delay_us(uint n) //8*0.125=1us{int i,j;for(j=0;j&8;j++){for (i=0;i&n;i++) NOP();} }//**************************//端口初始化//**************************void port_init(void){DDRA =0X00;PORTA=0XFF;DDRB =0XFF;PORTB=0XFF;//DDRC =0X00;//PORTC=0XFF;DDRD ^=0XFE; //RXD输入,TXD输出DDRD |=0X02; //RXD输入,TXD输出PORTD|=0X01;//DDRD = 0XFF;//PORTD = 0X7F;}//*******************************************//i2c程序//*******************************************//初始化void i2c_init(){PORTD&=~0x80;//DDRC|=(1&&6);//PORTC&=~(1&&6); //WP 使能TWBR=0x01 ; //速率=16M/(16+2*16)=33.3kTWSR=0x01 ; //分频因子=4}//开始信号void i2c_start(){//TWCR=0xa4 ;//while(!(TWCR&0x80)); TWCR = (1&&TWINT)|(1&&TWSTA)|(1&&TWEN);while(!(TWCR & (1&&TWINT)));}//写数据void i2c_wrdata(uchar i2c_data){TWDR=(i2c_data);TWCR = (1&&TWINT) | (1&&TWEN);//TWCR=0x84 ;//while(!(TWCR&0x80));while(!(TWCR & (1&&TWINT)));}//读数据noackuchar i2c_redata(){uchar i2c_TWCR=0x84 ;//TWCR = (1&&TWINT) | (1&&TWEN);//while(!(TWCR&0x80));//while(!(TWCR & (1&&TWINT)));//执行到这里卡住了,TWINT位就是不置1了&&&---亲 就是停在这了i2c_data=TWDR ;return(i2c_data);}//读数据ackuchar i2c_redataack(){uchar i2c_TWCR=0xc4 ;//while(!(TWCR&0x80));while(!(TWCR & (1&&TWINT)));i2c_data=TWDR ;return(i2c_data);}//停止信号void i2c_stop(){TWCR=0x94 ;TWCR = (1&&TWINT)|(1&&TWEN)|(1&&TWSTO);}//i2c的写字节子程序void i2c_wrbyte(uchar i2c_add,uchar i2c_data){do {i2c_start();i2c_wrdata(0xa0);}while((TWSR&0xf8)!=0x20); //判断总线是否可以操作i2c_wrdata(i2c_add);i2c_wrdata(i2c_data);i2c_stop();}//i2c的页写子程序//参数1:要写入的数组指针//参数2:写入的首地址//参数3:数组的单元数void i2c_wrpage(uchar *i2c_data,uchar i2c_add,uchar i2c_nub){do {i2c_start();i2c_wrdata(0xa0);}while((TWSR&0xf8)!=0x20);//判断总线是否可以操作i2c_wrdata(i2c_add);for(i=0;i&i2c_i++){i2c_wrdata(*i2c_data++);}i2c_stop();}//i2c读一个字节子程序uchar i2c_rebyte(uchar i2c_add){uchar i2c_do {i2c_start();i2c_wrdata(0xa0);}while((TWSR&0xf8)!=0x20);//判断总线是否可以操作i2c_wrdata(i2c_add);i2c_start();i2c_wrdata(0xa1);i2c_data=i2c_redata();//这句话有问题!!!!i2c_stop();return(i2c_data);}//i2c连续读子程序//参数1:16位地址//参数2:读取字节数 注:&=64//读出的数据只能从全局数组变量获得void i2c_rese(uchar *i2c_data,uchar i2c_add,uchar i2c_nub){do {i2c_start();i2c_wrdata(0xa0);}while((TWSR&0xf8)!=0x20);//判断总线是否可以操作i2c_wrdata(i2c_add);i2c_start();i2c_wrdata(0xa1);for(i=0;i&(i2c_nub-1);i++) //少循环一次,留给最后发出no ack信号{*i2c_data=i2c_redataack();i2c_data++;}*i2c_data=i2c_redata(); //最后一个字节发出no ack信号i2c_stop();}//*******************************************//uart程序//*******************************************/*-----------------------------------------------------------------函数名称: void Usart_init(void)函数功能: 串口初始化倍速/%/8bit/1停止位/无奇偶校验参 数: 返 回 值: 无-----------------------------------------------------------------*/void Usart_init(void){UBRRH = 0x00; UBRRL = 0x33; /*设置波特率:fosc/(16*(UBRR+1)) 9600*/ UCSRB|=(1&&RXEN)|(1&&TXEN)|(1&&RXCIE); /*接收使能发送使能4,3,7*/UCSRC|=(1&&UCSZ1)|(1&&UCSZ0)|(1&&URSEL);/*设置帧格式:8位数据,1位停止位USBS=1时2位),无校验位*/ }/*-----------------------------------------------------------------函数名称: void Usart_Transmit(unsigned char i)函数功能: 查询方式,发送数据参 数: 返 回 值: 无-----------------------------------------------------------------*/void Usart_Transmit(unsigned char i){while(!(UCSRA&(1&&UDRE))); //判断UDR是否为空UDR=i; //发送数据}/*-----------------------------------------------------------------函数名称: void Usart_Receive(void)函数功能: 查询方式,接收数据参 数: 返 回 值: 无-----------------------------------------------------------------*/unsigned char Usart_Receive(void) //定义返回值类型,否则出错{while(!(UCSRA&(1&&RXC))); //判断是否有数据未读出return UDR; //获取并返回接收数据}//**************************************//初始化MPU6050//**************************************void InitMPU6050(){i2c_wrbyte(PWR_MGMT_1, 0x00);//解除休眠状态i2c_wrbyte(SMPLRT_DIV, 0x07);i2c_wrbyte(CONFIG, 0x06);i2c_wrbyte(GYRO_CONFIG, 0x18);i2c_wrbyte(ACCEL_CONFIG, 0x01);}//**************************************//合成数据//**************************************int GetData(uchar REG_Address){uchar H,L;H=i2c_rebyte(REG_Address);L=i2c_rebyte(REG_Address+1);return (H&&8)+L; //合成数据}//****************************************//整数转字符串//****************************************void lcd_printf(uchar *s,int temp_data){if(temp_data&0){temp_data=-temp_*s='-';}else *s=' ';*++s =temp_data/;temp_data=temp_data%10000; //取余运算*++s =temp_data/;temp_data=temp_data%1000; //取余运算*++s =temp_data/100+0x30;temp_data=temp_data%100; //取余运算*++s =temp_data/10+0x30;temp_data=temp_data%10; //取余运算*++s =temp_data+0x30;}//***********************//发送转换后数据void send_data(int value){lcd_printf(dis, value);//转换数据显示for(i=0;i&6;i++){Usart_Transmit(dis[i]);delay_us(50);}delay_us(50);}void main(){//delay_us(2000);port_init();delay_us(100);i2c_init(); //初始化Usart_init();delay_us(50);Usart_Transmit(1);DelayMs(100);delay_us(100);InitMPU6050();delay_us(100);while(1){//temp=Usart_Receive(); //接收来自PC的数据//PORTB=~ //将数据显示在LED上Usart_Transmit(1);delay_us(100);Usart_Transmit(2);delay_us(100);DelayMs(1000); PORTB=0XF0;DelayMs(1000);PORTB=0XFF;DelayMs(1000);Usart_Transmit(' ');delay_us(50);send_data(GetData(ACCEL_XOUT_H));Usart_Transmit(' ');delay_us(50);send_data(GetData(ACCEL_YOUT_H));Usart_Transmit(' ');delay_us(50);send_data(GetData(ACCEL_ZOUT_H));Usart_Transmit(' ');delay_us(50);send_data(GetData(GYRO_XOUT_H));Usart_Transmit(' ');delay_us(50);send_data(GetData(GYRO_YOUT_H));Usart_Transmit(' ');delay_us(50);send_data(GetData(GYRO_ZOUT_H));Usart_Transmit(' ');delay_us(50);Usart_Transmit(0x0a);DelayMs(1000); PORTB=0X0F;DelayMs(1000);PORTB=0XFF;DelayMs(1000);}}执行到中间的iic程序就死循环了 求助!!!!谢谢!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或atmega16上的程序在atmega8上能用吗? 比如iic和adc串口这些_百度知道
atmega16上的程序在atmega8上能用吗? 比如iic和adc串口这些
提问者采纳
其他的没什么问题,16只是多了PA口而已。还有像延时这类的函数要根据晶振频率做些调整,中断向量基本没多大区别(16比8的多2个中断向量)。编译的时候记得把头文件换成16的,中断你可以看看8和16的芯片手册,初始化一样的8的程序移植16直接就可以用
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁拜师拜师 有没有大神adc收下我_英雄联盟吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:7,011,238贴子:
拜师拜师 有没有大神adc收下我
找一名adc 。脾气好的长...
一张图,不说话
lz女汉子一枚 0.0 真心...
讲一下小技巧和gank时机...
自己镇楼! 网通五区 止...
ad的符文是什么?一开始...
二楼上图!
白金adc菜鸡 最近觉得遇到瓶颈了 寻求师傅一名
可以有交易哦
忧伤是嵌在心里不可名状的灼热,不可言说。能说出来的就不叫忧伤了
以前不懂,看帖总是不回。一直没升级和增加经验,现在我明白了。反正回帖15字就可以升级,还可以赚经验。升级又需要经验,于是我把这句话复制下来。遇贴就回,捞完就闪。
有没有大神带带我
老师问:“小明,如果有人想刺杀老师,你会怎么办?”小明说:“看情况。”老师问:“什么情况?”“刺着和没刺着。”“为什么?”小明:“如果没刺着,给他瓶脉动。”“为什么?”老师奇怪的问“关键时刻不在状态,来瓶脉动!”“……那要刺到了呢?”“那就来片炫迈吧”老师……给的再多不如懂我
贴吧热议榜
使用签名档&&
保存至快速回贴请高手帮我看一个程序,主要解释一下sbi()函数的作用 这是用atmanavr给atmega16编程_百度知道
请高手帮我看一个程序,主要解释一下sbi()函数的作用 这是用atmanavr给atmega16编程
Waiting for ADC conversion completed loop_until_bit_is_set(ADCSRA;/ sbi(ADCSRA; // Start ADC conversion sbi(ADCSRA; / return ADCW, ADIF);&#47unsigned int read_adc(unsigned char adc_input){ / ADMUX |= adc_input, ADSC), ADIF); Set ADC input ADMUX &= 0xE0
我有更好的答案
&&#47: sbi(PORTA; #define cbi( #define gbi(pin ,0),0): gbi(PINA;//example,bit) ( pin & (1&example,0);bit) ) /sbi(DDRA;&lt,bit) ( io &= ~(1&lt: cbi(PORTA#define sbi(cbi(DDRA,0);bit) ) &#47,0);bit) ) /&lt,bit) ( io |= (1&lt
其他类似问题
为您推荐:
atmega16的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 atmega16 adc程序 的文章

 

随机推荐