完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 嗨呦 于 2016-7-25 11:00 编辑
(模块与单片机是通过USATR通信)我写了一个关于AHRS的程序用来测量加速度,陀螺仪值,磁场和四元素的值,但是在晃动PCB时Watch窗口的值一直没有更新,不知道为什么,求助大家。(我用的是MPLAB IDE V8.8 编译工具MCC18. 编译通过)。麻烦大家审下代码 #include #include #include #define uchar unsigned char #define uint unsigned int //^^^^^^^^^^^^^^^^^^^^^配置位的软件设置^^^^^^^^^^^^^^^^^^^^^^// #pragma config WDT = OFF //看门狗禁止 #pragma config OSC = HS //晶振 #pragma config LVP = OFF //低电压编程禁止 float Acc[3],Gyr[3],Mag[3],rpy[3],Q[4]; float ROLL,PITCH,YAW; unsigned char Re_buf[11]; unsigned char sign; unsigned char counter=0; void delayms(unsigned char time) //延时函数 { unsigned char i; while(time--) { for(i=0;i<120;i++); } } //^^^^^^^^^^^^^^^^^^^^^单片机串口初始化^^^^^^^^^^^^^^^^^^^^^^// void UartInit(void) { TRISCbits.TRISC7=1; //IO方向初始化RC7口设置为输入、RC6口设置为输出 TRISCbits.TRISC6=0; PIE1bits.RCIE=0; //关闭接收使能RCIE RCSTA=0x00; //关闭串行端口 PIE1bits.RCIE=1; //使能外部中断PEIE PIE1bits.TXIE=1; //串口发送中断 RCSTA=0x90; //使能串行端口,使能连续接收 TXSTA=0x24; //使能发送,高速波特率 SPBRG=51; //设置波特率寄存器X=51,波特率为9600;波特率=Fosc/[16(X+1)] INTCON=0xC0; //全局中断GIE打开;使能外部中断PEIE } //^^^^^^^^^^^字节发送函数^^^^^^^^^^^^^^^^^^^// void UartData(uchar dat) { TXREG=dat; while(TXSTAbits.TRMT==0); } //^^^^^^^^^^^字符串发送函数^^^^^^^^^^^^^^^^^^^// void UartSend(uchar *ptr,unsigned char length) //*s^^^^ptr { int i=0; while(i { UartData(*(ptr+i)); i++; } } //***********************串口中断********************************// void UartReceive() { if(PIR1bits.RCIF) { Re_buf[counter]=RCREG; if(counter==0&&Re_buf[0]!=0x5A&&counter==1&&Re_buf[1]!=0x5A) return; //第0号和1号数据不是帧头 counter++; //如果是帧头则开始计数 if(counter==11) //接收到11个数据 { counter=0; //重新赋值,准备下一帧数据的接收 sign=1; } } } void main(void) { TRISBbits.TRISB3=0; PORTBbits.RB3=1; TRISBbits.TRISB4=0; PORTBbits.RB4=1; UartInit(); delayms(20); while(1) { if(sign) { sign=0; if(Re_buf[0]==0x5A&&Re_buf[1]==0x5A) //检查帧头 { switch(Re_buf[2]) { case 0x15: //三轴加速度 { Acc[0]=((short)(Re_buf[4]<<8|Re_buf[5]))/16383.0; Acc[1]=((short)(Re_buf[6]<<8|Re_buf[7]))/16383.0; Acc[2]=((short)(Re_buf[8]<<8|Re_buf[9]))/16383.0; } break; case 0x25: //陀螺仪数据 { Gyr[0]=((short)(Re_buf[4]<<8|Re_buf[5]))/16383.0; Gyr[1]=((short)(Re_buf[6]<<8|Re_buf[7]))/16383.0; Gyr[2]=((short)(Re_buf[8]<<8|Re_buf[9]))/16383.0; } break; case 0x35: //磁力计数据 { Mag[0]=((short)(Re_buf[4]<<8|Re_buf[5]))/16383.0; Mag[1]=((short)(Re_buf[6]<<8|Re_buf[7]))/16383.0; Mag[2]=((short)(Re_buf[8]<<8|Re_buf[9]))/16383.0; } break; case 0x45: //欧拉角数据 { ROLL=((short)(Re_buf[4]<<8|Re_buf[5]))/16383.0*100; PITCH=((short)(Re_buf[6]<<8|Re_buf[7]))/16383.0*100; YAW=((short)(Re_buf[8]<<8|Re_buf[9]))/16383.0*100; rpy[0]=ROLL; rpy[1]=PITCH; rpy[2]=YAW; } break; } } } } } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11798 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 20:01 , Processed in 0.599556 second(s), Total 68, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号