⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f135pro.txt

📁 MSP430F135的一些C源代码子程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include  <msp430x13x.h>
#include <stdio.h>
#include <math.h>

#include "s0607jl.h"






//__interrupt void rxd_485(void);
//__interrupt void txd_485(void);
//void send_process(void);

/*位置1*/
uint bitset(uint var,uchar bitno)
{
 return (var)|=(1<<(bitno));
}             


/*位清0*/
uint bitclr(uint var,uchar bitno)
{
return (var)&=~(1<<(bitno));
}


/*位测试*/
uchar bittest(uint var,uchar bitno)
{
 if((var>>bitno)&0x01==1)return 1;
 else return 0;
}
     
/*系统延时子程序1us*/	
void delay_1us(void)
{
 asm("nop");
}

/*系统延时子程序us*/
void delay_us(uint n)
{
 uint i=0;
 for(i=0;i<n;i++)
 delay_1us();
}

/*系统延时子程序1ms*/
void delay_1ms(void)
{
 uint i;
 for(i=1;i<(XTAL*143-2);i++)
  ;
}

/*系统延时子程序ms*/
void delay(uchar time)											
{
 uchar tt;
 for(tt=0;tt<time;tt++)
 delay_1ms();
}


void load_info(void)
{
 uchar i,sum;
 uint t;
 char *Flash_ptr;                       // Flash pointer
 
 FCTL2 = FWKEY + FSSEL0 + FN0;         // MCLK/2 for Flash Timing Generator
 FCTL3=FWKEY;                          // Clear Lock bit 
 
 Flash_ptr = (char *) 0x1000;          // Initialize Flash pointer SegA
 
 for(i=0,sum=0;i<=9;i++)
 { 
  t=FCTL3; 
  while(bittest(t,0)){t=FCTL3;}        //测试BUSY位 
  adjust[i]=*Flash_ptr++ ;             // Read value from flash
  
  if(i<9)sum+=adjust[i];
  else   
  {
   if(sum!=adjust[9]){for(t=0;t<=9;i++)adjust[t]=0;}
 
  }
    
 }
 
 
 
 
 
 FCTL3 = FWKEY + LOCK;                  // Reset LOCK bit
  
 
}

void save_info(void)
{
 uchar i,sum;
 uint t;
 char *Flash_ptr;                      // Flash pointer
 
 
 _DINT();
  
 WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
         
 FCTL2 = FWKEY + FSSEL0 + FN0;         // MCLK/2 for Flash Timing Generator 
 
 Flash_ptr = (char *) 0x1000;          // Initialize Flash pointer SegA
  
 
 FCTL3=FWKEY;                          // Clear Lock bit 
 
 t=FCTL3; 
 while(bittest(t,0)){t=FCTL3;}        //测试BUSY位
 
 FCTL1 = FWKEY + ERASE;               // Set Erase bit
 *Flash_ptr = 0;                      // Dummy write to erase Flash segment
 
 t=FCTL3; 
 while(bittest(t,0)){t=FCTL3;}        //测试BUSY位 
 
 
 
 
 FCTL1 = FWKEY + WRT;                 // Set WRT bit for write operation                   
  
 for(i=0,sum=0;i<=9;i++)
 {
  t=FCTL3; 
  while(bittest(t,0)){t=FCTL3;}        //测试BUSY位
  
  sum+=adjust[i];
  if(i==9)
  {sum=sum-adjust[9];*Flash_ptr++ = sum;}
  else
  {*Flash_ptr++ = adjust[i];}           // Write value to flash
  
 }
 
 t=FCTL3; 
 while(bittest(t,0)){t=FCTL3;}         //测试BUSY位
 
 FCTL1 = FWKEY;                         // Clear WRT bit
 FCTL3 = FWKEY + LOCK;                  // Reset LOCK bit
 
 //WDTCTL = WDT_ARST_1000;                // WDT 8ms, ACLK, interval timer
 
 _EINT();
 
}




#pragma vector=TIMERA1_VECTOR
__interrupt void timer()
{ //uint t;
  
  //t=TAIV;
  TACTL&=~(MC1+TAIFG); 
  
  ticks++;
  if(ticks>=6024)
  {
  ticks=0;
  seconds++;  
  LED_count++;
                        
  if((LED_count>0x50)&&(LED_count<0xA0))   //系统运行灯
    P5OUT |=0x08;                         //P5.3 LED ON
  if(LED_count==0xA0)
  {
    P5OUT &=0xF7;                         //P5.3 LED OFF
    LED_count=0;
  }
  
  if(seconds>=60)
   {
    seconds=0;minutes++;
    if(minutes>=60){minutes=0;}
   }
  
  
 }
  
  if(!ad_begin)
  {
  ADC12CTL0 &=~ENC;
  ADC12CTL0 |=ENC+ADC12SC;
  }
  
  TAR=1328;                              //166us
  TACTL|=MC1; 
   
}

uchar read_fl()
{
  uchar fl;
  fl=P2IN;
  return fl;
}

uchar read_k()
{
  uchar k;
  k=P4IN;
  return k;
}

uchar read_z()
{
  uchar z;
  z=P5IN;
  return z&0x07;
}

#pragma vector=UART0RX_VECTOR

__interrupt void rxd_485(void)
{
  uint t;

    t=U0RXBUF;
    
   

      switch(rec_step)			//检查接收帧是否完整
      {
        case 0:
               
               if(t==txd_adr)		//地址为01则进入串口中断,否则不进入中断
               {
                 rec_step=1;
                 U0RCTL &= ~URXWIE;     //clear URXWIE=0, RX Wake up interrupt enable with data
                 rec_sum=t;
                 rec_count=0;
                 rec_buf[rec_count++]=t;

                 }
               break;

        case 1:
               rec_buf[rec_count++]=t;	//第一位正确,接收全部数据,并检验
               rec_sum+=t;
               if(com_flag)
               {
               if(rec_count>=6)//检验正确,进入发送数据处理子程序
               {
                 rec_step=0;
                 U0RCTL |=URXWIE;       //set URXWIE=1, RX Wake up interrupt enable with adddress
                 rec_sum=rec_sum-t-rec_buf[4];
                 if(rec_buf[4]==((uchar)(rec_sum>>8))&&(rec_buf[5]==(uchar)rec_sum))
                 {
                 if(rec_buf[1]<=0x12)send_process();	
                 else                send_process1();//za=1;
                 }	
                 }
                }
                else
                {
                if(rec_count>=13)//检验正确,进入发送数据处理子程序
                {
                 rec_step=0;
                 U0RCTL |=URXWIE;       //set URXWIE=1, RX Wake up interrupt enable with adddress
                 rec_sum=rec_sum-t-rec_buf[11];
                 if(rec_buf[11]==((uchar)(rec_sum>>8))&&(rec_buf[12]==(uchar)rec_sum))
                 {
                 send_processadj();	
                 
                 }	
                 }
                
                }
               break;
        default:break;
      }
  
}



#pragma vector=UART0TX_VECTOR
__interrupt void txd_485(void)
{

    U0TCTL &=~TXWAKE ; 
    
    if(com_flag)
    {                                 
    if(send_count>10)
      {
        ME1 &=~UTXIE0;
        send_sum=0;
        send_count=0;
        DIS_485;           //三极管驱动信号相反
        delay_time=0;
        return;
        }
       }
      else
      {
      
       if(send_count>22)
      {
        ME1 &=~UTXIE0;
        send_sum=0;
        send_count=0;
        DIS_485;           //三极管驱动信号相反
        delay_time=0;
        return;
        }
      
      }
   
    U0TXBUF =send_buf[send_count++];	
}


#pragma vector=ADC_VECTOR
__interrupt void ad_interrupt(void)
{ 
 
 
 uint t;
 
 
 //t=ADC12IV; 
 //ADC12IFG=0;
 
 //ADC12CTL0 &=~ENC;
 //ADC12CTL0 |=ENC+ADC12SC;
 
 
 
 
 
 switch(adc_step)
 {
  case 0x00:xx[adc_count]=ADC12MEM0;                      
            break;
  case 0x01:xx[adc_count]=ADC12MEM1;            
            break;
  case 0x02:xx[adc_count]=ADC12MEM2;
            break;
  case 0x03:xx[adc_count]=ADC12MEM0;
            break;
  case 0x04:xx[adc_count]=ADC12MEM1;
            break;
  case 0x05:xx[adc_count]=ADC12MEM2;
            break;
  case 0x06:xx[adc_count]=ADC12MEM3;
            break;
  case 0x07:xx[adc_count]=ADC12MEM4;
            break;
  case 0x08:xx[adc_count]=ADC12MEM5;
            break;
  default:break;
  
 }
 
 t=ADC12MEM5;
 if(adc_count<MAX_AD_COUNT)
 {
 adc_count++;
 }
 else                      
 {
 ad_begin=1;
 
 } 
 
 
}


#pragma vector=PORT1_VECTOR
__interrupt void fre_count(void)
{
 uint  t;
 ulong f;  
 
 
  
 if((P1IFG&0x02)==0x02)
 {  
  P1IFG=P1IFG&0xFD;
  /*
  if(A_W<2000)//原来为小于100V,改为小于20V频率上传为0
    {
      FRE_A=0;
      return;
    }
  */
  cura_time=TBR;			           //中断后读取T0时间为当前时间
  if(cura_time>prea_time)t=cura_time-prea_time;	   //如果没有溢出,当前时间-上次时间=周期
  else                   t=65535-prea_time+cura_time;	   //如果溢出,65536-上次时间+当前时间=周期
  
  
  //if((t>=30000)||(t<=15000))t=20000;  
  
  prea_time=cura_time;

  if((t<=30000)&&(t>=15000))
  {
    fredata_a++;    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -