首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]HCS08定时器中断问题

[求助]HCS08定时器中断问题

我用的是HCSO8,想要利用定时器TPM,使LED闪烁。
我的程序如下,连接开发板后,没反应,不知道什么地方出问题了,请斑竹和各位高手指教,小弟不甚感激。

#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */




/*********************变量和函数定义*******************************/

void TIMER_INIT(void);

void MCU_INIT(void);

/************************主函数**********************************/

void main(void) {

MCU_INIT();
TIMER_INIT();

EnableInterrupts; /* enable interrupts */
/* include your code here */



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

/*************************定时器中断***************************/
interrupt 7 void TPM_INTERRUPT(void) {

TPMSC_TOF = 0;

PTBD_PTBD7=~PTBD_PTBD7; // toggle Port
PTBD_PTBD6=~PTBD_PTBD6;
}


/************************初始化函数****************************/
void TIMER_INIT(void) {

PTBDD_PTBDD7 = 1; //PTBD7,PTBD6设置为输出,连到LED1,LED2
PTBDD_PTBDD6 = 1;

TPMSC = 0X4E;
//TPMMOD =
TPMMODH = 0XF4;//设置模值
TPMMODL = 0X24;
}

/*********************MCU初始化函数*****************************************/

void MCU_INIT(void) {

ICSTRM = 0X59;//OSC = 32.768*8kHz
ICSC1 = 0X1C;

ICSC2_BDIV1 = 1;//8分频
ICSC2_BDIV0 = 1;

SOPT1=0x42;
SOPT2=0x00;
}
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
设置一下断点,看看有没有进过中断?中断矢量地址对不对?
海纳百川  有容乃大
辛苦了,,我试试。
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
请教斑竹,我找了一个例子程序,连接后,LED1,LED2亮起,但不会闪烁,而且,当我将其复制到我写的程序时,LED1,LED2却不会亮,是什么原因呢,,,,程序如下:
/* TIMER模块例程

HCS908_QG8 单片机开发板

实验介绍:
本程序是TIMER模模块的例程,所用资源为单片机模定时器MTIM,
所接器件为LED灯,其中D2与PTA0,D3与PTA1相连接!
确定你开发板上拨码开关JP4(图片上的9)的1、2位处于on,
而其他位处于远离on!

实验现象:
LED指示灯按照你你所设定的定时器周期闪烁!


author:QGL

any question mail me:)
libing.qu@free-tech.com.cn
*/
/*****************头文件****************************************/

#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

/*********************变量和函数定义****************************/
void TIMER_INIT(void);

void MCU_INIT(void);
/*********************主函数************************************/
void main(void) {

MCU_INIT();
TIMER_INIT();
EnableInterrupts; /* enable interrupts */
/* include your code here */

for(;;) {

__RESET_WATCHDOG(); /* feeds the dog */


} /* loop forever */
/* please make sure that you never leave main */
}

/******************定时器中断***************************************/
interrupt 12 void MTIM_ISR(void) {

MTIMSC_TOF=0; // clear TOF
PTBD_PTBD7=~PTBD_PTBD7; // toggle Port
PTBD_PTBD6=~PTBD_PTBD6;
} /**/

/*******************初始化函数****************************************/
void TIMER_INIT(void) {

ICSC2_BDIV = 3;
PTBDD_PTBDD7 = 1; //PTA7,PTA6设置为输出
PTBDD_PTBDD6= 1;

MTIMCLK_PS = 8; //时钟频率/256
MTIMCLK_CLKS = 0; //定时器时钟为总线时钟
MTIMMOD = 252; //设置模数

MTIMSC = 0x60; //使能定时器中断
}


/***************************MCU初始化函数*******************************/
void MCU_INIT(void){

ICSC1=0x04;
ICSC2=0x40;
ICSTRM=0xa8;

SOPT1=0x42;
SOPT2=0x00;

}
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
清TOF的动作应该是先读MTIMSC,然后对TOF写0。试试看。再检查一下中断矢量地址是否正确。
海纳百川  有容乃大
、、我试了下,好像还是不行!!应该是中断没有产生,、但中断向量地址应该是正确的,我查了下表,有关MTIM的向量地址号只有12.对中断使用了向量号,应该不需要再在.prm文件中修改什么了吧?
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
把整个project打包贴出来看看。
海纳百川  有容乃大
project已上传,辛苦斑竹了。。。。
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
并没有上传。
海纳百川  有容乃大
系统提示我已经上传了,,我把它们贴出来好了。

derivative.h



/*
* Note: This file is recreated by the project wizard whenever the MCU is
* changed and should not be edited by hand
*/

/* Include the derivative-specific header file */
#include
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
#include
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
http://www.myhcs08.com/downmore.aspx?t=资料下载-8位单片机,,QG8DEMO学习板例程2
还是麻烦斑竹亲自下载,有些东西在帖子上发不出去。
荣辱不惊,看庭前花开花落。 去留无意,望天空云卷晕缩。
返回列表