智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1848|回复: 1
打印 上一主题 下一主题

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

[复制链接]

5

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
威望
237
贡献
155
兑换币
149
注册时间
2013-9-12
在线时间
40 小时
跳转到指定楼层
1#
发表于 2014-3-1 21:08:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

主函数
#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;

}
    怎么冲突的没有分析明白 ?希望有人能解决

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

2

主题

12

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1425
威望
738
贡献
455
兑换币
452
注册时间
2013-11-17
在线时间
116 小时
2#
发表于 2014-3-11 15:07:46 | 只看该作者
也遇到过相似的问题,我写的用PT7口采集编码器的脉冲程序,不接编码器可以运行,但只要将编码器的A相接到PT7口,程序就复位,不知道是个什么情况!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-7 00:24 , Processed in 0.045338 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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