智能车制作
标题:
mc9s12xs128 pit中断进不了
[打印本页]
作者:
blueskywsh
时间:
2012-7-29 23:04
标题:
mc9s12xs128 pit中断进不了
初学飞思卡尔,想用定时器控制led灯,但是好像它没有进中断!求指教啊!
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define led PORTB_PB0
#define led1 PORTB_PB1
void SetBusCLK_64M(void)
{
CLKSEL=0X00; //解除锁相环时钟disengage PLL to system
PLLCTL_PLLON=1; //打开锁相环(turn on PLL)
SYNR =0xc0 | 0x04;
REFDV=0x80 | 0x04;
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
while(!(CRGFLG_LOCK==1)); //当锁相环稳定时使用(when pll is steady ,then use it);
CLKSEL_PLLSEL =1; //启用锁相环时钟(engage PLL to system);
}
void delay()
{
unsigned char j,jj;
for(j=0;j<100;j++)
{
for(jj=0;jj<250;jj++)
{
;
}
}
}
void pit_init()
{
PITCFLMT_PITE=0; //禁用PIT模块
// PITFLT=0X01;
PITCE=0X01; //PIT定时器通道0使能
PITMUX=0X00; //16位定时器使用微定时基准0计数
PITMUX_PMUX0=0;
PITMTLD0=250; //PIT微定时器初值
PITLD0=60000; //PIT装载寄存器
PITINTE=0X01; //PIT定时器超时中断使能
PITCFLMT_PITE=1;
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT_ISR(void)
{
PITTF=0X01;
delay();
delay();
led=~led;
}
#pragma CODE_SEG DEFAULT
void main(void) {
/* put your own code here */
SetBusCLK_64M();
DDRB=0XFF;
led=0 ;
led1=0;
for(;;)
{
led1=~led1;
delay();
delay();
delay();
delay();
delay();
delay();
delay();
delay();
//led=1;
}
EnableInterrupts;
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
作者:
nst11305
时间:
2012-7-29 23:04
应该是PIT中断标志位没有清除,程序就一直卡在那里。‘给你个链接
http://www.znczz.com/thread-56088-1-1.html
还有一种方法,就是在PIT终端里面,先禁用PIT,再开启PIT,就可以清除标志位了
作者:
blueskywsh
时间:
2012-8-3 09:15
我已经请教高手解决了!谢谢
作者:
xc229876115
时间:
2012-8-17 10:20
怎么解决的啊。楼主分享呀。谢谢
作者:
wkhuahuo
时间:
2012-12-2 11:37
xc229876115 发表于 2012-8-17 10:20
怎么解决的啊。楼主分享呀。谢谢
把pittf=0x01改成pittf=0x00;就行啦~
中断标志位没有至零。所以不会让led产生闪烁了。
作者:
736421469
时间:
2013-1-6 08:49
先看一下
作者:
可欣
时间:
2013-3-20 21:00
学习啦
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2