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

📄 main.c

📁 该压缩包是用msp430单片机开发板和射频芯片CC2500制成的无线传感器网络节点的发送信息过程的源程序代码
💻 C
字号:
//----------------------------------------------------------------------------
//  449 CC2500发送演示程序
//  449定时采样 模拟电压的值
//  发送出去
//  
//  接收方接收
//  www.mcu430.com
//----------------------------------------------------------------------------



#include "include.h"
#include "lcd_160.h"
/*
const char distab[]=
  {
   0xaf,0x06,0x6d,0x4f,
  0xc6,0xcb,0xeb,0x0e,
  0xef,0xcf, 0xee,0xe3,
  0x61,0x67,0xe9,0xe8
  }  ;  */

uchar addr_no = 8 ; //发送端的机器地址 请为每一个传感器设置一个唯一的地址 !

extern char paTable[];
extern char paTableLen;

char txBuffer[4];
char rxBuffer[4];
unsigned int i;
unsigned int adc;
char time_con = 0 ;

void delay(uint x)   // 5*x+12  nop
      {             //128- 23    256-49
      while(x--);   
      }             //192- 36    280- 54   448- 87


/////////////////////////////////////
//	在ADDR位置显示ASCII码 X
//	asc_dis( 1, 'a');
/////////////////////////////////////
void asc_dis(uchar addr,char x)
	{
		LCDMEM[8+(addr<<1)] 		= 	distab_asc[ x <<1 ];
		LCDMEM[8+(addr<<1)+1] 	= 	distab_asc[(x<<1)+1];
	}

void main (void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 32768;
  TACTL = TASSEL_1 + MC_2;                  // ACLK, continuous mode

  
  
  LCDCTL = 0XFD;
  BTCTL =  BTFRFQ1;                      // STK LCD freq 
  P5SEL =  0xFC;                         // Common and Rxx all selected

  for(i=0;i<20;i++)
      LCDMEM[i] = 0 ;
  LCDMEM[6] = distab[addr_no];
  LCDMEM[5] = 0;
  LCDMEM[7] = 0x44;     //显示 TX
  
  asc_dis(0,'a');
  asc_dis(1,'d');
  asc_dis(2,'d');
  asc_dis(3,'r');
  
  
  TI_CC_SPISetup();                         // Initialize SPI port

  TI_CC_PowerupResetCCxxxx();               // Reset CCxxxx
  writeRFSettings();                        // Write RF settings to config reg
  TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE

  TI_CC_GDO0_PxIES |= TI_CC_GDO0_PIN;       // Int on falling edge (end of pkt)
  TI_CC_GDO0_PxIFG &= ~TI_CC_GDO0_PIN;      // Clear flag
  TI_CC_GDO0_PxIE |= TI_CC_GDO0_PIN;        // Enable int on end of packet
  P1IE |= 0XF8;
  P1DIR &= ~0XF8 ;

  P6OUT |= BIT4 ;
  TI_CC_SPIStrobe(TI_CCxxx0_SPWD);           //
 // TI_CC_SPIStrobe(TI_CCxxx0_SRX);           // Initialize CCxxxx in RX mode.

   _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3, enable interrupts
}


void dc_adc(void)
    {
        int i ;
        long dc_adc1=0;

        P6DIR = 0XFF ;
        P6OUT &= ~BIT7 ;
        P6SEL = 0x01;                               // Enable A/D channel inputs
          ADC12CTL0 = ADC12ON+MSC+SHT0_2+ REFON  ;  //+ REFON ;           // Turn on ADC12, set sampling time
          delay(2000);
          ADC12CTL1 = SHP  ;                // Use sampling timer, single sequence
          ADC12MCTL0 = INCH_0 + SREF_1;     // ref+=1.5v, channel = A0
          ADC12CTL0 |= ENC;                 // Enable conversions
        delay(6000);
        for(i=0;i<256;i++)
            {
                ADC12CTL0 |= ADC12SC;       // Start conversion
                while ((ADC12IFG & BIT0)==0);
                dc_adc1 = dc_adc1 + ADC12MEM0;
            }
          dc_adc1 = dc_adc1 >> 8 ;
          adc = dc_adc1 ;
          ADC12CTL0  &=  ~ENC;

          ADC12CTL0     =   0   ;
          ADC12CTL1     =   0   ;
          ADC12MCTL0    =   0   ;  
          
        for(i=0;i<4;i++)
            {
                LCDMEM[i]= distab[dc_adc1%10];
                dc_adc1 = dc_adc1 / 10 ;
            }
	LCDMEM[6]= distab[addr_no];
    }




// The ISR assumes the int came from the pin attached to GDO0 and therefore
// does not check the other seven inputs.  Interprets this as a signal from
// CCxxxx indicating packet received.
#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
{
  char len= 56 ;  
  char i ;
  int dc_adc1 ;
  if(P2IFG & BIT4)
	  {
              if (RFReceivePacket(rxBuffer,&len))   
				;
		  dc_adc1 = rxBuffer[2] ;
		  dc_adc1 = dc_adc1 << 8 ;
		  dc_adc1 = dc_adc1 + rxBuffer[3] ;
        P2IFG &= ~TI_CC_GDO0_PIN;                 // Clear flag
	  }
}



#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
  char len= 56 ;  
  char i ;
  int dc_adc1 ;
            time_con = 0 ;
            txBuffer[0] = 4;                           // Packet length
            txBuffer[1] = 0x01;                        // Packet address
            dc_adc();
            txBuffer[2] = addr_no  ;	// addr_no 
            txBuffer[3]  = adc >> 8 ;
            txBuffer[4]  = adc & 0xff  ;
            RFSendPacket(txBuffer, 5);   // Send value over RF
	    delay(100);
            P1IFG &= ~0XFF;  
            TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);
        TI_CC_SPIStrobe(TI_CCxxx0_SXOFF);
        TI_CC_SPIStrobe(TI_CCxxx0_SPWD);   

}



#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
    CCR0 += 32768/4   ; 
    time_con ++ ;
    dc_adc();
    
}



⌨️ 快捷键说明

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