智能车制作

标题: RE: 关于定时器中断,和看门狗之间冲突问题,导致单片机复位,怎么解决? [打印本页]

作者: hi棠    时间: 2014-3-1 21:08
标题: RE: 关于定时器中断,和看门狗之间冲突问题,导致单片机复位,怎么解决?

一个简单的定时器 程序  想 通过中断 读一些 数据和清一些标志位 ,但是 奇葩的事情 就这样发生了 ,当在中断中 清标志位 或给全局变量赋值时 单片机就自动复位。调了 两天还是不知何解,求帮助!

主函数
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "sci.h"  
#include "TIM.h"




void main(void) {
  /* put your own code here */
  
//  SCIInit();
   initPIT();
   DDRB = 0xff;
        EnableInterrupts;


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

定时器中断
#include "TIM.h"
#include "sci.h"



extern  uint8 tempR = 0;
extern  uint8 tempL = 0;
static  uint8 counflag = 0;


//initPIT:X128定时器0初始化函数------------------------------------------*
//功 能: *
//    8位计数器分频1us的时基                                              *
//参 数:无 * //返 回:无                                                   *
//说 明:                                                                  *
// 最大定时时间为65535us
//------------------------------------------------------------------------*
void initPIT(void)
{
        
//    PITCFLMT|= 0x83;                     /*0x83=1(PITE)000 0011(PFLMT[1:0])ITE:使能PITPFLMT强制加载8位计数器值*/
    PITCFLMT_PITE = 0;                      //关闭PIT模块
    PITCE |= 0x01;                       /*使能定时器0,开始定时*/
    PITMUX &= 0xfe;                      /*定时器0对应8位计数器0*/
    PITMTLD0 = 8-1;                     //设定8-bit MICRO Timer0寄存器,它每次从40降到0,花费时间为40*0.025=1us
    PITLD0 =TIMING*1000-1;               //定时周期=TIMING ms
    PITINTE|= 0x01;                      /*使能定时器0的time-out中断*/
    PITFLT |=0x01;                       //强制加载   16定时器的值
    PITCFLMT_PITE = 1;                      //关闭PIT模块

}




/*定时器0超时中断函数*/
#pragma CODE_SEG NON_BANKED

void interrupt 66 PIT0_RE(void)
{
static  uint8 tempew ;
  
  PACTL_PAEN=0;                                     // 输入脉冲计数禁止
//   PORTB=PACNT;
//  tempL = PACNT;
//  tempR = PORTA;

  PHELCONRST = 1;

  PACNT=0X00;                                     // 脉冲数据寄存器清零
  PACTL_PAEN=1;                                     // 输入计数允许
   PITTF_PTF0 = 1;                                  /*清除中断标志位      必须清      */
  PHELCONRST = 0;   
  counflag = 1;

}[attach]56323[/attach]
    怎么冲突的没有分析明白 ?希望有人能解决[attach]56323[/attach]

作者: LIANZI    时间: 2014-3-11 15:07
也遇到过相似的问题,我写的用PT7口采集编码器的脉冲程序,不接编码器可以运行,但只要将编码器的A相接到PT7口,程序就复位,不知道是个什么情况!





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