急求大神指教,求解下面程序

2019-07-15 16:40发布

怎么把这些代码改成MSPF169的版本?改时钟部分也行



#include <msp430F5438A.h>  
#include <stdio.h>  
#include <stdint.h>
#define CPU_F ((double)8000000)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define false 0
#define true 1

//这些变量是全局的,因为它们是在中断服务程序中使用!

  unsigned int rate[10];                    // 数组来保存最后十个IBI值
  unsigned int amp = 120;                   // 用于保存脉冲波形的振幅,发送
  unsigned int temp =0 ;            //温度
  unsigned int BPM=600;                   // 用于保存脉冲速率
  unsigned int  IBI = 600;             // 持有次之间的时间
  unsigned int Peak =512;                      //初始化 心跳峰值
  unsigned int Trough = 512;                     //用来寻找脉搏波最小值,发送
  unsigned int thresh = 512;                //初始化 心跳最小值
  _Bool Pulse = false;     //脉冲波高,真。假时,低
  _Bool firstBeat = true;        // 用于启动 发送速率数组
  _Bool secondBeat = false;      // 用于启动 发送速率数组
  _Bool QS = false;        // 为真时,发现了一拍心跳节拍。
  unsigned int  Signal;                // 持有传入的原始数据
  unsigned long sampleCounter = 0;          // 当前时间
  unsigned long lastBeattime = 0;           // 上个心跳时间
  unsigned long time;        //用于记录时间

// p6.0  a1;
  // 时钟默认情况  
// FLL时钟      FLL选择 XT1  
// 辅助时钟     ACLK选择 XT1          32768Hz  
// 主系统时钟   MCLK选择 DCOCLKDIV    8000000Hz  
// 子系统时钟   SMCLK选择 DCOCLKDIV   8000000Hz  
// TA1选择ACLK,最大计数值为32768,中断频率为1HZ  

void select_xt1(void)  
{  
    // 启动XT1  
    P7SEL |= 0x03;                             
    UCSCTL6 &= ~(XT1OFF);                       
    UCSCTL6 |= XCAP_3;                          
    do  
    {  
        UCSCTL7 &= ~XT1LFOFFG;                  
    }while (UCSCTL7&XT1LFOFFG);               
}  
void dco_config(void)  
{  
    __bis_SR_register(SCG0);                    
    UCSCTL0 = 0x0000;                        
    UCSCTL1 = DCORSEL_5;                       
    UCSCTL2 = FLLD_1 + 243;                    

    __bic_SR_register(SCG0);                    // 使能FLL功能   
    __delay_cycles(250000);  

    do  
    {  
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);  

        SFRIFG1 &= ~OFIFG;                     
    }while (SFRIFG1&OFIFG);                  
}  
void init_clock(void)  
{  
    WDTCTL = WDTPW + WDTHOLD;                   // 停止看门狗  
    select_xt1();                               // 选择XT1  
    dco_config();                              

}  
void init_UART(void)  
{  
    P3SEL = 0x30;                               // 选择P3.4和P3.5的复用功能  

    UCA0CTL1 |= UCSWRST;                        
    UCA0CTL1 |= UCSSEL__SMCLK;                     
    UCA0BR1 = 0X00;                                
    UCA0BR0 = 0X45;                                //
    UCA0MCTL |= UCBRS_3 + UCBRF_0;              //  
    UCA0CTL1 &= ~UCSWRST;                       //  
    UCA0IE |= UCRXIE;                          
}  

void init_adc12(void)  
{  
  P6SEL = 0x01;                                 
  ADC12CTL0 &=~ ADC12ENC;  
  ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_0;
  ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1+ADC12SSEL1 ;
  ADC12MCTL0 |= ADC12INCH_0+ADC12MSC;
  ADC12IE = 0x03;                              
  ADC12CTL0 |= ADC12ENC;                             
}  
void init_TA1()
{
    TA1CCTL0 = CCIE;                           
    TA1CCR0 =16000;  
    TA1CTL = TASSEL_2 + MC_1 + TACLR;         
}

int U0putchar(int ch)  
{  
    UCA0TXBUF = ch;  
    while(!(UCA0IFG & UCTXIFG));  
    return ch;  
}
void Uart0Sends_p(char *s)
{
  while(*s!='')
  {

    UCA0TXBUF=*s;
    while (!(UCA0IFG&UCTXIFG));  //查询发送是否结束

    UCA0IFG&=~UCTXIFG; //清除发送一标志位
    s++;
  }
  UCA0TXBUF=' ';while(!(UCA0IFG & UCTXIFG));  
  UCA0TXBUF=' ';
}
void Uart0Sends(char i,unsigned int number)
{
  UCA0TXBUF=i;
  char s[12];
  sprintf(s,"%d",number);
  s[11]='0';
  Uart0Sends_p(s);

}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
武力戡乱
1楼-- · 2019-07-15 17:50
   UCA0CTL1 |= UCSSEL__SMCLK;                     
    UCA0BR1 = 0X00;                                
    UCA0BR0 = 0X45;  
这个没细看
void dco_config(void)  这个和2系类还有1系类不一样

一周热门 更多>