找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1407|回复: 0
打印 上一主题 下一主题
收起左侧

单片机根据加速度数据控制IO口,输出电平不稳定问题求助大家

[复制链接]
跳转到指定楼层
楼主
ID:719801 发表于 2020-4-26 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STC89C52单片机连接了一个加速度模块,根据角度信息控制IO口的电平,设置了串口中断,加速度模块每帧数据25个字节,串口RX读取数据后用来控制其他IO口的电平,连接了几个二极管控制亮灭来观察现象,然后发现IO电平会不断地快速波动,被困住了好几天,想求助大家这个问题是怎么回事。把中断代码和读取代码贴上来请大家指导,谢谢大家。
中断
  1. #include "stc_it.h"
  2. #include "usart.h"
  3. #include "string.h"
  4. //串口中断
  5. void USART_IRQHandler(void)interrupt 4
  6. {
  7. static uint8_t i=0;//

  8. if(RI)//接收完成标志
  9. {
  10.   RI=0;//清中断接收标志
  11.   RX_BUF[i]=SBUF;
  12.   if (i==0&&RX_BUF[0]!=0x5a) return;//检查帧头
  13.     i++;
  14.   if(i==25)                //
  15.     {   
  16.        i=0;                 //
  17.        Receive_ok=1;
  18.     }
  19.   
  20.    }[/i][/font][i]
  21. [font=Tahoma]  }[/font][font=Tahoma][size=5]
  22. 读取
  23. [/size][/font][font=Tahoma]while(1)
  24. {
  25.     if(Receive_ok)//串口接收完毕
  26.   {    Receive_ok=0;
  27.    for(sum=0,i=0;i<(RX_BUF[3]+4);i++)
  28.    sum+=RX_BUF[i];
  29.    count=0;
  30.       if(sum==RX_BUF[i])//校验和判断
  31.    {   
  32.        if(RX_BUF[2]&0x01)   //加速度数据
  33.       count=6;
  34.       if(RX_BUF[2]&0x02)  //陀螺数据
  35.      count+=6;
  36.       if(RX_BUF[2]&0x04)  //磁场数据
  37.       count+=6;
  38.       if(RX_BUF[2]&0x08)  //四元数数据
  39.       count+=8;
  40.       if(RX_BUF[2]&0x10)  //欧拉角数据
  41.       {
  42. //          LED_0=0;        
  43.          rpy[0]=(RX_BUF[4+count]<<8)|RX_BUF[5+count];
  44.          rpy[1]=(RX_BUF[6+count]<<8)|RX_BUF[7+count];
  45.          rpy[2]=(RX_BUF[8+count]<<8)|RX_BUF[9+count];
  46.       
  47.         Y=rpy[0];  //获取角度
  48.        X=rpy[1];
  49.       
  50.        TI=1;  
  51.    
  52.       LED(Y,X);
  53.          count+=6;
  54.       }
  55.    }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表