智能车制作
标题:
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