智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1380|回复: 7
打印 上一主题 下一主题

全局变量在128的PIT中断服务程序中无法累加

[复制链接]

18

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1178
威望
603
贡献
343
兑换币
360
注册时间
2013-4-27
在线时间
116 小时
跳转到指定楼层
1#
发表于 2014-7-2 17:52:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在128中定义了一个全局变量为sum,然后在PIT中断服务程序中加一个值比如为10,按理说应该是没来一次中断sum就该加10,但是,通过串口助手查看后发现 sum一直为10,这是为什么呢????????????
回复

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
威望
219
贡献
123
兑换币
132
注册时间
2013-11-13
在线时间
44 小时
毕业学校
杭州电子科技大学
2#
发表于 2014-7-2 19:18:28 | 只看该作者
局部变量的生命周期是定义变量到该函数结束
回复 支持 反对

使用道具 举报

10

主题

1956

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
10144

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章论坛元老奖章

威望
4669
贡献
2699
兑换币
2876
注册时间
2013-10-2
在线时间
1388 小时
3#
发表于 2014-7-2 19:20:52 | 只看该作者
你不会每一次PIT加之前都先清零了吧。
回复 支持 反对

使用道具 举报

18

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1178
威望
603
贡献
343
兑换币
360
注册时间
2013-4-27
在线时间
116 小时
4#
 楼主| 发表于 2014-7-2 21:42:51 | 只看该作者
竹音清影 发表于 2014-7-2 19:20
你不会每一次PIT加之前都先清零了吧。

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#include "PLL.h"
#include "ADC.h"
#include "PIT.h"
#include "SCI.h"
#include "scope.h"
#include "hubulvbo.h"
#include "io.h"

float g_ACC_Z=0;

float temp;

float CAR_angle=0; //初始角度 /*******************就是这个值。。。。在中断里没有累加********、***/
float CAR_acc_z=0; //加速度采样值
float CAR_gyro=0;  //陀螺仪采样值

/***AD采集**/
void Getinfo(void)
{
        while(!ATD0STAT2_CCF0);//0通道转换完成前等待
  CAR_gyro=ATD0DR0;
       
        while(!ATD0STAT2_CCF1);//1通道转换完成前等待
  CAR_acc_z=ATD0DR1;
}

void main(void)
{
  /* put your own code here */

   /*模块初始化*/
   PLL_init();
   PIT_Init();
   ADC_init();
   IO_init();  
   UART0_Init();

   /***********/
        EnableInterrupts;


  for(;;)
  {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}



#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 66 PIT(void)
{
  PITTF_PTF0=1;
  Getinfo(); //陀螺仪和加速度的采集
  /*正确归一化*/
  CAR_acc_z=((CAR_acc_z-Zmin)*Acc_RATIO)-160;        //加速度计归一化后的值,160为设定参考值
  CAR_gyro =((Gyro_Zero-CAR_gyro)*Gyro_RATIO);  //陀螺仪所测角速度
  /************/
  //互补滤波
  CAR_angle=CAR_angle+CAR_gyro*DETA_T;
  CAR_angle=CAR_angle*FILTER_RATIO;

  g_ACC_Z=(1-FILTER_RATIO)*CAR_acc_z;
  CAR_angle=CAR_angle+g_ACC_Z;
  /********/


  /**发送到虚拟示波器**/
    OutData[0] = CAR_gyro;
    OutData[1] = CAR_acc_z;
    OutData[2] = CAR_angle;
    OutData[3] = 0;//CAR_angle+(CAR_gyro-350)*0.02;

    OutPut_Data();


}
/*********************************/
请各大神帮忙看看
我已经看了调了N久了





回复 支持 反对

使用道具 举报

10

主题

1956

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
10144

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章论坛元老奖章

威望
4669
贡献
2699
兑换币
2876
注册时间
2013-10-2
在线时间
1388 小时
5#
发表于 2014-7-2 21:46:43 | 只看该作者
你先发这个变量g_ACC_Z看看是不是0,如果是0就说明是这个式子的问题 g_ACC_Z=(1-FILTER_RATIO)*CAR_acc_z;
回复 支持 反对

使用道具 举报

1

主题

373

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
14252

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
6571
贡献
4551
兑换币
4005
注册时间
2012-1-8
在线时间
1565 小时
6#
发表于 2014-7-2 22:39:01 | 只看该作者
好复杂的式子
回复 支持 反对

使用道具 举报

18

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1178
威望
603
贡献
343
兑换币
360
注册时间
2013-4-27
在线时间
116 小时
7#
 楼主| 发表于 2014-7-2 22:42:49 | 只看该作者
红树的破芯片!!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

18

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1178
威望
603
贡献
343
兑换币
360
注册时间
2013-4-27
在线时间
116 小时
8#
 楼主| 发表于 2014-7-2 23:06:44 | 只看该作者
laughtianxia 发表于 2014-7-2 22:39
好复杂的式子

为了找错误 就把互补滤波给拆了  。。。红树的破128害我白白浪费了两个晚上来调程序。。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 19:26 , Processed in 0.050999 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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