MSP430 FR5969 LaunchPad 光电模块测速 (直流电机正转)程序,串口显示,速度没有数据是什么原因?求大神指导!! - TI WEBENCH论坛 - 电子技术论坛 - 最好最受欢迎电子论坛!

MSP430 FR5969 LaunchPad 光电模块测速 (直流电机正转)程序,串口显示,速度没有数据是什么原因?求大神指导!!

本帖最后由 ZK1509629967 于 2017-4-28 22:57 编辑

#include
#define uchar unsigned char
//uchar RXdata;
void cesu (void);
void com_process_S(void);   //测速
#define M 10     //测速10次取平均值
unsigned int cap,N1;
long width[10]={0,0,0,0,0,0,0,0,0,0};
char m,k,i=0;
long data,zhuansu=0;
//uchar com_value;          //定义键值全局变量
//unsigned char number[];
//unsigned char digit=0;
int main(void)
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  WDTCTL = WDTPW |WDTHOLD;
  // Configure GPIO
  P2SEL1 |= BIT0 | BIT1;                    // USCI_A0 UART operation
  P2SEL0 &= ~(BIT0 | BIT1);

  // Disable the GPIO power-on default high-impedance mode to activate
  // previously configured port settings
  PM5CTL0 &= ~LOCKLPM5;
  // Startup clock system with max DCO setting ~8MHz
  CSCTL0_H = CSKEY >> 8;                    // Unlock clock registers
  CSCTL1 = DCOFSEL_3 | DCORSEL;             // Set DCO to 8MHz
  CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;// Set ACLK = VLO; SMCLK = DCO/8=1M HZ        
  CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;     // Set all dividers
  CSCTL0_H = 0;                             // Lock CS registers
  // Configure USCI_A0 for UART mode
  UCA0CTLW0 = UCSWRST;                      // Put eUSCI in reset
  UCA0CTLW0 |= UCSSEL__SMCLK;               // CLK = SMCLK
  // Baud Rate calculation
  // 8000000/(16*9600) = 52.083
  // Fractional portion = 0.083
  // User's Guide Table 21-4: UCBRSx = 0x04
  // UCBRFx = int ( (52.083-52)*16) = 1
  UCA0BR0 = 52;                             // 8000000/16/9600
  UCA0BR1 = 0x00;
  UCA0MCTLW |= UCOS16 | UCBRF_1;
  UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI
  UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt
  cesu();
  P1DIR=0xFF;
P3DIR|=BIT0;
P3DIR&=~BIT4;
  //__bis_SR_register(LPM3_bits | GIE);       // Enter LPM3, interrupts enabled
  __no_operation();                         // For debugger
  while (1)
  {
                P1OUT|=BIT3;//P1.3=1
                P1OUT&=~BIT4;//P1.4=0
                //delay_us(1024);
                P3OUT|=BIT0;
      __delay_cycles(10);
       com_process_S();
  }
}

// Timer_B7 Interrupt Vector (TBIV) handler
#pragma vector=TIMER0_B1_VECTOR
__interrupt void Timer0_B1_ISR(void)
{
switch( TB0IV )
{
case 6:
   if(TB0CCTL3&CM1)                        //捕获到下降沿
     {
       width[m++]=65536*N1+TB0CCR3-cap;    //记录下结束时间
       N1=0;
       TB0CCTL3=CM_1+SCS+CAP+CCIE;//+TBCLR;   //改为上升沿捕获:CM1置0,CM0置1
       if(m==M)  
         m=0;
     }
   else if(TB0CCTL3&CM0)                    //捕获到上升沿
     {
     cap=TB0CCR3;
     N1=0;
     TB0CCTL3=CM_2+SCS+CAP+CCIE;//+TBCLR;  //改为下降沿捕获:CM0置0,CM1置1
     }
   break;
   case 14:
     N1++;
     break;
}// 溢出
}
void com_process_S(void)  //测速
{
                //测速10次
  data=0;
  for(k=0;k      data+=width[k];
  data=data/M;
  data=1000000/data;
  zhuansu=data;
                UCA0TXBUF=zhuansu;
                UCA0TXBUF='r';
                 UCA0TXBUF='n';
}
void cesu (void)
{
P3SEL0|=BIT4;                    //P3.4作为捕获模块功能的输入端输入方波
        P3SEL1&=~BIT4;
// TBCCTL0=0;          // 捕获源为P3.4,即CCI0A(也是CCI0B)
TBCCTL3|=CM_1+CCIS_0+SCS+CAP+CCIE;     //上升沿捕获,同步捕获,工作在捕获模式+中断允许
TB0CTL|=TBSSEL_2+MC_2+ TBIE;     //选择时钟SMCLK+连续计数模式+中断允许
       _EINT();
}

0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /7 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-28 14:37 , Processed in 0.586075 second(s), Total 38, Slave 28 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表