智能车制作

标题: 一个简单程序,但输不出预期结果,烦请哪位帮忙看一下 [打印本页]

作者: 共和国之辉    时间: 2009-2-13 16:26
标题: 一个简单程序,但输不出预期结果,烦请哪位帮忙看一下
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

void main(void) {
  
  
DDRB=0xFF;//PORTB设定为输出
PORTB=0xf0;//PORTB初始化为全高
  
TSCR1=0x90;//定时器使能且TFLG1能被自动清除
TSCR2=0x07;//定时器预分频系数设定  Prescale Factor=128
TIE=0x01;//定时器通道0使能
TIOS_IOS0=1;//定时器通道0设定为输出比较
TCTL1=0X00;
TCTL2=0X03 ;
TC0=0x0100;  
  EnableInterrupts;//开中断
  for(;;) {} /* wait forever */
  /* please make sure that you never leave this function */
}
/*
***************************************************************************
*语法格式:interrupt void Timer(void)
*实现功能:
*程序描述:
**************************************************************************/

void  interrupt   Timer(void) //8为定时器通道0的中断标号
{
DisableInterrupts;  //关中断

PORTB=0b11110011;//
EnableInterrupts;//

}
结果无法进入中断程序
作者: lucev    时间: 2009-2-13 21:03
应该将中断程序放进中断向量表吧。
打开.prm文件【如果用BDM就打开它对应的PRM】,在最后一行加上VECTOR ADDRESS 0xFFEE Timer
再试试吧!
还有,B口全高该是00吧,打错了?
作者: yanghu20    时间: 2009-2-14 11:50
/*****************/
//说明:利用定时器输出比较功能产生定时中断,

/**********变量定义***********/
static unsigned int waittime = 0;

/*********初始化函数***********/
/*时钟初始化*/
void PLL_Init(void)   //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
  REFDV=1;            //总线时钟=48/2=24MHz
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;
}
/*定时器初始化*/
void ECT0_Init(void)
{
  TIOS_IOS0=1;    //定时器通道0设置为输出比较
  TCTL2=0x02;     //输出低电平  
  TSCR2_TOI=0;    //溢出中断禁止
  TSCR2_PR=6;     //24M/64=2.67微秒,计一个数用2.67微秒
  TC0=0x00FF;     //给输出比较通道0赋初值,当TCNT从0计数到此值时第一次进入中断
  //TSCR1_TFFCA=1;  //定时器标志快速清零
  TIE_C0I=1;      //通道0输出比较中断允许
  TSCR1_TEN=1;    //使能定时器
}
/*******主函数********/
void main(void)
{
  PLL_Init();
  ECT0_Init();
  DisableInterrupts;
  DDRB=0xff;
  PORTB=0x00;
  //PTT_PTT0=0;
  for(;;)
  {
    EnableInterrupts;
  }
}
/********中断函数处理***********/
#pragma CODE_SEG NON_BANKED
void interrupt 8 Timer0_ISR(void) //8为定时器通道0的中断标号
{
  unsigned int m;
  TFLG1_C0F=1;//清中断标志位
  DisableInterrupts;
  m=TCNT;
  TC0=m+37500; //定时时间100毫秒后进入中断, 8/3*375=1000微秒  3750--10毫秒 37500--100毫秒
  waittime++;
  if(waittime>=200)
  {
    waittime=0;
  }
  PORTB=waittime;
}


看看这个吧
作者: 共和国之辉    时间: 2009-2-14 17:12
多谢两位,新手上路,在此谢过了!
作者: 共和国之辉    时间: 2009-2-14 18:39
我试了,还是不行,不过我按照楼下的格式修改了一下,可以通过。 2# lucev




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2