?? adc12.c
字號(hào):
#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)//定時(shí)器B初始化
{
TBCTL = TBSSEL0 + ID1 + ID0 + TBCLR; /* ACLK, 8分頻,定時(shí)器B清0*/
TBCTL &= ~(MC0+MC1); /*stop timer_B*/
}
void Hal_StartTimerB(void)//定時(shí)器B啟動(dòng)
{
TBCTL &= ~(MC0+MC1); /* stop timer_B */
TBCCTL0 &=~CCIE; /* 捕獲/比較模塊中斷位禁止*/
TBCCR0= 0xffff; /* éè?¨ ?D??????ê±?? 1ms*/
TBCTL |= MC1; /* TIMER_B為連續(xù)計(jì)數(shù)模式*/
}
void Hal_StopTimerB(void)//定時(shí)器B暫停
{
TBCTL &= ~(MC0+MC1); /* stop timer_B */
}
void Hal_Wait1ms(unsigned int millisecond)
{
unsigned int temp1,temp2;
temp1=TBR;
temp2=TBR+millisecond*4;/*晶振32768經(jīng)過(guò)8分頻后每計(jì)4個(gè)數(shù)的時(shí)間是一個(gè)毫秒*/
while(((temp2>temp1)&&(temp1<=TBR)&&(TBR<temp2))||((temp2<temp1)&&((temp1<=TBR)||(TBR<temp2))));/* 或之前代表加之后沒(méi)有溢出timerB的值位于兩數(shù)之間, 或之前代表加之后有溢出的情況*/
}
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位復(fù)位*/
UCTL1 = CHAR + SYNC + MM;//八位數(shù)據(jù),SPI,主機(jī)模式
UTCTL1 = SSEL1+SSEL0+STC; // UCLK = SMCLK
UBR01=0x02;//波特率選擇
UBR11=0;//波特率選擇
UMCTL1=0;//波特率調(diào)整
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一直處于使能狀態(tài)
{
/* 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) /* 將單個(gè)字節(jié)通過(guò)UART0發(fā)送到上位機(jī)*/
{
TXBUF0 = c;
while((UTCTL0&0X01)==0); /* 發(fā)送結(jié)束標(biāo)志, txept在發(fā)送結(jié)束時(shí)被硬件置位 */
}
void Hal_WireSendPacket(char *p,char len) /* 將多個(gè)字節(jié)字節(jié)通過(guò)UART0發(fā)送到上位機(jī)*/
{
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);//將獲得的數(shù)據(jù)返傳回上位機(jī)
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;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -