Board logo

标题: 请教一个关于MC9S12XEP100的小灯翻转程序 [打印本页]

作者: arthur2009    时间: 2009-11-15 15:15     标题: 请教一个关于MC9S12XEP100的小灯翻转程序

请教MC9S12XEP100程序:定时500ms实现PORTB_PB0管脚的小灯翻转,我在按下面的程序调试后发现小灯只亮,而没有实时翻转,请问是什么原因呢?不胜感激!

#include <hidef.h>      /* common defines and macros */
#include <MC9S12XEP100.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xep100"
#include "CRG_Init.h"
#include "PIT_Init.h"
unsigned char Flag;
void Delay(unsigned int Time)
{
    unsigned char i;
    for(i=0; i<125; i++)
        for( ; Time>0; Time--);
}
void main(void) {
  /* put your own code here */
  EnableInterrupts;
  DDRB=0xff;
  PORTB=0xff;
  
  for(;;) {
  
     if(Flag==1){
      
        Flag=0;
        Delay(50000);
        PORTB_PB0=~PORTB_PB0;
     }
  } /* wait forever */
  /* please make sure that you never leave this function */
}
#pragma  CODE_SEG   NON_BANKED
interrupt void PIT0_Timeout()    //interrupt function when Time0 out 20ms
{
   PITTF &= 0x01;           // Clear the timer0-out flag  
   Flag = 1;
}
作者: strongchen    时间: 2009-11-16 15:08

你的延时是用函数Delay(5000)实现的,与中断没有关系。这个函数的延时时间是500ms吗?你可以用示波器看一下PTB0脚上的波形,是完全没有翻转,还是翻转太快以致肉眼看不出来。
作者: whc1223    时间: 2009-11-17 10:15

都用延时了还开什么中断..要么延时要么中断
作者: chiusir    时间: 2009-11-17 21:59

这个问题咋回答呢?还是用示波器看看吧。
作者: autolyric    时间: 2010-9-12 19:15

看你头文件包含了很多初始化程序,但是main里面又没有用,你用到了定时器终端服务程序,但是又没定时器的初始化程序,很费解呢,感觉应该是定时器初始化没有定好,导致不能进入终端,可以设个断点看下程序进了终端程序没有,倘若没有进入终端程序的话,那么flag就一直为0,当然不会在for循环中改变状态了啊




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