智能车制作

标题: 全局变量在128的PIT中断服务程序中无法累加 [打印本页]

作者: Mr.Zombatar    时间: 2014-7-2 17:52
标题: 全局变量在128的PIT中断服务程序中无法累加
在128中定义了一个全局变量为sum,然后在PIT中断服务程序中加一个值比如为10,按理说应该是没来一次中断sum就该加10,但是,通过串口助手查看后发现 sum一直为10,这是为什么呢????????????

作者: 愚人船    时间: 2014-7-2 19:18
局部变量的生命周期是定义变量到该函数结束
作者: 竹音清影    时间: 2014-7-2 19:20
你不会每一次PIT加之前都先清零了吧。
作者: Mr.Zombatar    时间: 2014-7-2 21:42
竹音清影 发表于 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久了






作者: 竹音清影    时间: 2014-7-2 21:46
你先发这个变量g_ACC_Z看看是不是0,如果是0就说明是这个式子的问题 g_ACC_Z=(1-FILTER_RATIO)*CAR_acc_z;
作者: laughtianxia    时间: 2014-7-2 22:39
好复杂的式子
作者: Mr.Zombatar    时间: 2014-7-2 22:42
红树的破芯片!!!!!!!!!!!!!!!!
作者: Mr.Zombatar    时间: 2014-7-2 23:06
laughtianxia 发表于 2014-7-2 22:39
好复杂的式子

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





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2