Board logo

标题: 请教各位帮忙看一下我的程序 [打印本页]

作者: smq20050308    时间: 2006-4-27 22:20     标题: 请教各位帮忙看一下我的程序

请各位帮忙:

以下是我想想用模下计数器实现定时的程序,可是运行时却没有反应,请帮忙看一下,问题在哪里,谢谢!!



#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */



#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void SYSCLK_Init (void);
void PORTB_Init(void);
void MDC_Init(void);



void main(void)

  SYSCLK_Init();
  PORTB_Init();
  MDC_Init();
  asm
  {
  nop
  }
 EnableInterrupts;
 for(;;)
 {
  }  
}
//时钟初始化
void SYSCLK_Init (void)
 {
  CLKSEL=0x00;         //时钟选择寄存器 关闭锁相环
  PLLCTL=0xe1;         //PLL控制寄存器
  SYNR=2;            //PLL=2*16*(SYNR+1)/(REFDV+1)
  REFDV=1;                     //BUS CLOCK=24M  
  while(!CRGFLG_LOCK);     //等待锁相环时钟达到预期值
  CLKSEL=0x80;         //开启锁相环
    
  PEAR=0x00;        //PE4输出E时钟    时钟E=PLL/2 =24M
  EBICTL_ESTR=0;        //E时钟自由运行
 }
//端口初始化
void PORTB_Init(void)
 {
  DDRB=0xff;   //PORTB 输    出,置一为出
  PUCR|=0x03;   //PORTB 上拉使能
  PORTB=0xff;
 }
//模向下计数器
void MDC_Init(void)
{
 MCCTL=0xC5; //允许中断,模数计数方式,递减允许,4分频
 MCCNT=60000; //定时10ms
 }
 void interrupt MDC_ISR(void)
 {
  static uint counter=0;
  MCFLG_MCZF=1;
  counter++;
 // PORTB=~PORTB;
  if(counter==100)
  {
    PORTB_BIT7=0;
   }
  if(counter==200)
  {
    counter=0;
    PORTB_BIT7=1;
    }
  }


作者: wuyue    时间: 2006-4-29 11:27

两个问题:
1 锁相环开启,但不是马上就可以使用的,需要判定CRGFLG_LOCK位是否为0,可加上如下语句: while(CRGFLG_LOCK==0)
CLKSEL_PLLSEL=1;//选定锁相环时钟
2 中断服务子程序的关键字interrupt是不是该放在void前面。
我也是个新手,呵呵




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0