智能车制作
标题:
捕捉中断问题
[打印本页]
作者:
fanfankaka123
时间:
2011-2-19 10:41
标题:
捕捉中断问题
程序如下:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include<mc9s12xs128.h>
#define uint unsigned int
#define uchar unsigned char
//锁相环倍频至80MHz 总线频率为40MHz
//fPLLCLK=2*fOSCCLK*(SYNR+1)/(REFDV+1)
void PLL_init(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0xc0 | 0x04; //SYNR=4
REFDV=0x80 | 0x01; //REFDV=1
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV); 2*16*5/2=80M
_asm(nop); //BUS CLOCK=pllclock/2
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
//延时10us以上函数
void Delay1()
{
uchar a,b,c;
for(a=0;a<1;a++)
for(b=0;b<1;b++)
for(c=0;c<8;c++);
}
//延时250ms
void Delay2()
{
uchar a,b,c;
for(a=0;a<250;a++)
for(b=0;b<3;b++)
for(c=0;c<220;c++);
}
void A1output()
{
DDRA_DDRA1=1;//A0口设为输出
PORTA_PA1=1;
Delay1(); //延时10us以上
PORTA_PA1=0;
}
//--------------------定时器0初始化------------------//
void Time0_Init()
{
TIOS=0x00; //通道0输入捕捉
TCTL4=0x03; //上升下降沿均捕捉
TSCR2=0X05; //32分频 总线频率40M
TIE=0x01; //通道0开中断
TSCR1_TEN=1;//启动定时器
}
void main(void)
{
/* put your own code here */
PLL_init();
Time0_Init();
DDRB=0xff;
PORTB=0xff;
for(;;) {
_FEED_COP(); /* feeds the dog */
EnableInterrupts;
A1output();
Delay2();
}
}
//定时器通道0输入捕捉中断
#pragma CODE_SEG NON_BANKED
void interrupt 8 Timer0_interrupt()
{
DisableInterrupts;
PORTB=~PORTB;
TFLG1_C0F=1; //清中断标志位
}
A1脚用杜邦线接至T0脚,如果响应中断的话灯应该一闪一闪的,可是灯一直是灭的,就是说没有进入中断,求大侠指导。谢谢。
作者:
fanfankaka123
时间:
2011-2-19 16:14
知道结果了,闪的太快的原因,从而看不出来。
作者:
海军10291147
时间:
2012-2-12 17:19
肯定不是闪得太快,太快就会一直亮
作者:
欤緈諨侑染
时间:
2012-2-13 14:46
为什么还有个 DisableInterrupts;
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2