📄 main.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 + -