智能车制作

标题: 为什么采不到脉冲啊,为啥数码管始终显示0 [打印本页]

作者: 过去了的    时间: 2013-10-15 20:08
标题: 为什么采不到脉冲啊,为啥数码管始终显示0
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
const byte LedData[19] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0xce,0x6e} ;
unsigned int counter=0;
unsigned int i,j,first,secend;
/********************************延迟函数****************************************/
void delay(uint num)
{
uint i,j;
num*=100;
for(i=0;i<600;i++)
for(j=0;j<num;j++);
}
/********************************spi初始化*************************************/
void spibegin(void)
{
  //DDRP_DDRP1=1;
  //DDRP_DDRP2=1;
  DDRP=0X06;
  DDRK_BIT1=1;
  PORTK_BIT1=1;
  
}
      

void spiput(uint a)
{
int i;
   
   for(i=0;i<8;i++)
   {
    PTP_PTP2=0;
    if(a%2==1)
    PTP_PTP1=1;
    else
    PTP_PTP1=0;
    PTP_PTP2=1;
    a=a/2;
   }
}

void bitput (uint b)
{
  uint A1,A2,A3,A4,A5;
  A5=b/10000;
  A4=b/1000-b/10000*10;
  A3=b/100-b/1000*10;               spi那段是数码管显示,bitput(5)数码管就显示5
  A2=b/10-b/100*10;
  A1=b%10 ;
  
  if(b<10000&&b>=1000)
  {
   A5=18;  
  }
  if(b<1000&&b>=100)
  {
    A5=18;
    A4=18;
  }
  if(b<100&&b>=10)
  {
    A5=18;A4=18;A3=18;
  }
  if(b<10&&b>=0)
  {
    A5=18;A4=18;A3=18;A2=18;
  }  
    spiput(LedData[A1]);
    spiput(LedData[A2]);
    spiput(LedData[A3]);
    spiput(LedData[A4]);
    spiput(LedData[A5]);
}
/********************************PLL初始化******************************/
void PLL(void)
  {
    CLKSEL=0X00;
    PLLCTL_PLLON=1;
    SYNR=0X02;                 //f(BUS)=8M*2*(2+1)/(1+1)=24M
    REFDV=0X01;
          asm NOP;
          asm NOP;
    while(!(CRGFLG_LOCK==1));
  }
  
/*********************************PWM初始化**************************************/  
  void PWM(void)
  {
    PWMCLK=0X00;
    PWMPRCLK=0X55;
    PWMSCLA=0;
    PWMSCLB=0;
    PWMCAE=0XFF;
    PWMPOL=0X20;
    PWMDTY5=6;
    PWMPER5=2;
  }
  

/***********************************ECT0初始化***************************************/
void ECT0_init(void)                                       
{
  TIOS_IOS0=1;         //0通道设置为输入捕捉
  TCTL4=0x01;          //仅在上升沿捕捉
  TSCR1=0X80;          //开启定时器
  TIE_C0I=1;           //允许0通道中断
  TSCR2=0X06;          //预分频因子为128,主定时器时钟=1/(24000000/128)=5.3us
  ICSYS=0x02;          //输入捕捉缓冲允许
  
}
void PACA_init(void)
{                      //
  PACTL=0X50;
  PACN10=0X00;
}
/***************************************MC9S12D64*******************************/
void main(void)
{ unsigned int i;
  spibegin();          //spi初始化
  PLL();               //PLL初始化
  PWM();               //PWM初始化
  ECT0_init();         //ECT0初始化
  PACA_init();         //16位脉冲累加器A初始化
  PWME_PWME5=1;        //开启PWM通道5,转动风扇
  DDRA_BIT7=1;         //使通道7为输出,灯亮
  PORTA_BIT7=1;        //输出高电平,灯灭
  
  for(;;)
  {
    EnableInterrupts;      //等待中断
  }
   
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED

interrupt 8 void  IC0(void)   //8为定时器通道0的中断标号
{     
      first=TC0-secend;     //两次计数的差值
      secend=TC0;           //将TC0赋值给secend用于下次计算差值
      TFLG1_C0F=1;          //中断发生在0通道对0通道清除标志位  
    if(PAFLG_PAOVF==1)      //如果脉冲累加器A溢出,清除溢出标志
      {
        PAFLG_PAOVF=1;
      }
      
        
        i=PACN32-j;
        j=PACN32;
      
                bitput(first);
                delay(1);
              
        PORTA_BIT7=~PORTA_BIT7;
               
        }  
           

作者: 过去了的    时间: 2013-10-16 10:04
求大神指导啊
作者: 幽蓝の灵魂    时间: 2013-10-16 11:55
不知道你的脉冲累加器 怎么接的,而且你PWM连接的是风扇,你测的是什么呢。




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