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

📄 adc12.c

📁 430内部的温度测量
💻 C
字号:
#include <msp430x14x.h>
#include "CC1100.h"

#define CHANEL 7
#define POWER 0//POWER from 0 to 7, the 1 is hightest power, 7 is the lowest power

#define RATE_10000BPS
#define MaxBuffer0 20

char paTable[8] = {0xC0 /*10dbm*/,0xC8/*7dbm*/ ,0xCE/*5dbm*/ ,0x87/*4dbm*/ ,0x3F/*0dbm*/ ,0x57/*-4dbm*/ ,0x34/*-10dbm*/ ,0x1C/*-15dbm*/};
char buf[255]={0};
char aa[]={00,01,04,04,05,22};
char RXBYTES;
char PacketLen;
int RSSI_value;
int Buffer0Head=0;
int Buffer0Tail=0;
int temp=0;
char LQI_value;
char CRC_state;
char BufferUart0[MaxBuffer0]={0};
unsigned int time1,time2,time3,time4;
void InitMCU(void)  //Msp430初始化
{
	unsigned int i;
	WDTCTL = WDTPW + WDTHOLD ;             // Stop WDT
	BCSCTL1 &=~(XT2OFF+XTS);                // Select XT2 ACLK = LFXT1
	do
	{
		IFG1 &= ~OFIFG;                       // Clear OSCFault flag
		for (i = 0xFF; i > 0; i--);           // Time for flag to set
	}
	while ((IFG1 & OFIFG) != 0);          // OSCFault flag still set?
	
	BCSCTL2 |= SELM1+SELS;               // MCLK = LFXT1 (safe)
}
void Hal_TimerBInit(void)//定时器B初始化
{
   TBCTL = TBSSEL0  + ID1 + ID0 + TBCLR;            /* ACLK, 8分频,定时器B清0*/
   TBCTL &= ~(MC0+MC1);                /*stop timer_B*/
}

void Hal_StartTimerB(void)//定时器B启动
{
   TBCTL &= ~(MC0+MC1);	       /* stop timer_B */
   TBCCTL0 &=~CCIE;            /* 捕获/比较模块中断位禁止*/
   TBCCR0= 0xffff;			/* éè?¨ ?D??????ê±?? 1ms*/
   TBCTL |= MC1;			/* TIMER_B为连续计数模式*/
}

void Hal_StopTimerB(void)//定时器B暂停
{
	TBCTL &= ~(MC0+MC1);	       /* stop timer_B */
}
void Hal_Wait1ms(unsigned int millisecond)
{
	unsigned int temp1,temp2;
	temp1=TBR;
	temp2=TBR+millisecond*4;/*晶振32768经过8分频后每计4个数的时间是一个毫秒*/
	while(((temp2>temp1)&&(temp1<=TBR)&&(TBR<temp2))||((temp2<temp1)&&((temp1<=TBR)||(TBR<temp2))));/* 或之前代表加之后没有溢出timerB的值位于两数之间, 或之前代表加之后有溢出的情况*/	
}
void Hal_Wait1s(unsigned char second)
{
        unsigned char i;
	for(i=0;i<second;i++)
	{
		Hal_Wait1ms(1000);
	}
}



 
void LEDInit(void)
{
P5SEL &= ~(BIT5+BIT6+BIT7);
P5DIR|= (BIT5+BIT6+BIT7);
P5OUT &= ~(BIT5+BIT6+BIT7);


}
 
 //----------------------------------
 // open Green-D2--P4.3
 //----------------------------------
 void OpenGreen(void)
{
    P5OUT |= BIT6;
}
 //----------------------------------
 //close Green
 //----------------------------------
void CloseGreen(void)
{
    P5OUT &=~ BIT6;
}

 //----------------------------------
 //open Red-D3--P4.4
 //----------------------------------
void OpenRed(void)
{
    P5OUT |= BIT5;
}
 //----------------------------------
 //close Red
 //----------------------------------
void CloseRed(void)
{
   P5OUT &=~ BIT5;
}

 //----------------------------------
 // open Blue-D4--P4.5
 //----------------------------------
 void OpenBlue(void)
{
     P5OUT |= BIT7;
}
 //----------------------------------
 //close Blue
 //----------------------------------
void CloseBlue(void)
{
    P5OUT &=~ BIT7;
}

 
void SpiInit(void)//USART1用作同步通信口
{
	
	UCTL1 &=~SWRST; /* swrst位复位*/
	UCTL1 = CHAR + SYNC + MM;//八位数据,SPI,主机模式
    	UTCTL1 = SSEL1+SSEL0+STC;                       // UCLK = SMCLK
	UBR01=0x02;//波特率选择
	UBR11=0;//波特率选择
	UMCTL1=0;//波特率调整
	ME2 = USPIE1;//SPI Module Enable
	IE2 &=~ URXIE1;//Uart1 receive interrupt Unable
	P5SEL |= (BIT1+BIT2+BIT3);//p5.1,p5.2,p5.3为外围模块功能
        P5SEL&=~BIT0;
	P5DIR = (BIT0+BIT1+BIT3);//p5.0,p5.1,p5.2为输出功能
	P5OUT |= BIT0;
}
void Hal_Uart0Init(void)//USART0用作异步通信口
{
	UCTL0 &=~SWRST; 	 /*SWRST = 0x01*/
        UTCTL0 |= SSEL1+SSEL0;                       // UCLK = SMCLK
        /*8M  9600bps*/
        UCTL0=0x10;	/* 0b00010000 no parity£?1 stop£?8-bit data */
	UBR00=0x41;	/* Baud Rate 0   DIVIDED  BY 34*/
	UBR10=0x03;	/* Baud Rate 1 */
	UMCTL0=0x00;// 
	ME1 |= UTXE0+URXE0;      // Enable USART0 TXD,RXD
	IE1 |= URXIE0;//Enable USART0 Receive Interrupt
	P3SEL |= (BIT4+BIT5);                        // P3.4= USART0 TXD
	P3DIR |= BIT4;                        // P3.4 output direction
	P3DIR &=~BIT5;	
}
void Hal_Ctl3221(void)//MAX3221初始化,3221一直处于使能状态
{
	/* MAX3221 control pin */     
	P1SEL &=~(BIT2+BIT3); /* Pin p4.0 , P4.1 is used as IO function*/
        P1DIR |=(BIT2+BIT3); /* pin p4.0 is output MAX3221 'S  Receiver EN SIGNAL || p4.1 is output MAX3221'S  FORCEOFF control*/
	P1OUT &= ~BIT2; // set EN=0,  Enable the MAX3221 Receiver 
        P1OUT |= BIT3;  //set FORCEOFF=1, Enable MAX3221	
}
void Hal_WireSendOneByte(char c)  /* 将单个字节通过UART0发送到上位机*/
{
	TXBUF0 = c;
	while((UTCTL0&0X01)==0); /* 发送结束标志, txept在发送结束时被硬件置位 */
}

void Hal_WireSendPacket(char *p,char len)  /* 将多个字节字节通过UART0发送到上位机*/
{
	unsigned char i;
	for(i=0;i<len;i++)
	{
		Hal_WireSendOneByte(*(p+i));
	}	
}
char Hal_GetWireData(char* c)
{
   if( Buffer0Tail==Buffer0Head)
     { 
 
     return 0;
     }
     *c=BufferUart0[Buffer0Head];
     Buffer0Head++;
     if(Buffer0Head==MaxBuffer0)
       Buffer0Head=0;
     return 1;
}

char Hal_GetOneWireData(char* c)
{
  int i=0;
  while(!Hal_GetWireData(c))
  {
   i++>=15;
   return 0;
  }
  return 1;
}

//=========================ADC12================================

void Hal_AD12_Ctr()
{
   ADC12CTL0&=~ENC;                                               //ENC=0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         //reset ENC to modify ADCtrl Value
   ADC12CTL0|=(REFON+SHT00);                                      //internal reference selected,SHITx=1  Tsample=8*(30us)
   ADC12CTL0&=~(REF2_5V+ADC12ON+ADC12SC);                         //internal reference voltage=1.5,ADC12SC=0;
    
   ADC12CTL1=ADC12SSEL0+SHP;                                      //ADC12CLK=ACLK devided by 1 ,SHP=1
   ADC12CTL1&=~(CONSEQ0+CONSEQ1+SHS0+SHS1);                       // single channel and single conversation,SHI=ADC12SC
   ADC12CTL1&=~(CSTARTADD0+CSTARTADD1+CSTARTADD2+CSTARTADD3);     //Select ADC12MEM0
   
   ADC12MCTL0=SREF_1+INCH_10;                                     //VR+=Vref+,VR-=Vss,sample the temperature diode
   ADC12IFG&=~BIT0;                                               //Clear ADC12IFG.0
   ADC12IE|=BIT0;                                                 //ADC12IE.0 enable
}


void Hal_Start_AD12()
{
  ADC12CTL0|=ADC12ON;
  ADC12CTL0|=ENC;
  Hal_Wait1ms(100);
}

void Hal_Start_Sample()
{
  ADC12CTL0|=ADC12SC;                                             //SHI=0;
}









//=============================================================//
void main(void)
{	
	InitMCU();
	Hal_TimerBInit();
	Hal_StartTimerB();
	SpiInit();
	Hal_Uart0Init();
	Hal_Ctl3221();
	LEDInit();
        Hal_AD12_Ctr();
        Hal_Start_AD12();
        _EINT();
       Hal_Wait1ms(300);
       Hal_Start_Sample();
//************Test TIMER B*****************
       /* OpenRed();
        OpenBlue();
        OpenGreen();
        Hal_Wait1ms(500);
        CloseGreen();
        CloseBlue();
        CloseRed();
        Hal_Wait1ms(300);*/
        
//************Test UART0*****************
    /*  
        char c='B';
        char receivechar;  
        P1IE&=~BIT0;
        OpenBlue();
        Hal_WireSendOneByte(c);//将获得的数据返传回上位机
        while(!Hal_GetOneWireData(&receivechar));
        Hal_Wait1ms(500);
        CloseBlue();
        if(c==receivechar)
        {
         OpenGreen();
         Hal_Wait1ms(500);
         CloseGreen();
         Hal_Wait1ms(500);
         
         OpenGreen();
         Hal_Wait1ms(500);
         CloseGreen();
         Hal_Wait1ms(500);
         
         OpenGreen();
         Hal_Wait1ms(500);
         CloseGreen();
         Hal_Wait1ms(500);
     
       }
      else
       {
         OpenRed();
         Hal_Wait1ms(200);
         CloseRed();
         Hal_Wait1ms(200);
         
         OpenRed();
         Hal_Wait1ms(200);
         CloseRed();
         Hal_Wait1ms(200);
         
         OpenRed();
         Hal_Wait1ms(200);
         CloseRed();
         Hal_Wait1ms(200);
       }
       P1IE|=BIT0;*/
//*************Test CC1100*****************	
/*
	while(1)
	{
              // WDT_SafeReset_NonConditionMode(INTERVALTIME_1000ms,600);
	       
                CC1100_SendPacket(aa,6);
		if(CC1100_ReadStatus(CC1100_MARCSTATE)!=0x0D)
		   CC1100_Strobe(CC1100_SRX);	
                 OpenBlue();
                 Hal_Wait1ms(300);
                 CloseBlue();
	         Hal_Wait1ms(400);
              
             	
	}
        */
	
}


#pragma vector=UART0RX_VECTOR
__interrupt void UART0RX(void)
{
     BufferUart0[Buffer0Tail] = RXBUF0;
     Buffer0Tail++;  
     if(Buffer0Tail == MaxBuffer0)
	    Buffer0Tail = 0;
  
}


#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  if(ADC12IFG&BIT0)
  {
   temp=0 ;
   ;
   ;
    temp=ADC12MEM0;
  }
}

⌨️ 快捷键说明

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