📄 adc.bak
字号:
#include "reg24e1.h"
#include "radio.h"
#include "delay.h"
#include "spi.h"
tRadioParm RadioParm;
tComParm ComParm;
#define RADIO_PACKET_SIZE 14
const unsigned char RFConfigBuf[15] =
{
0x08,RADIO_PACKET_SIZE<<3, //initial data packet size in bits
0x00,0x00,0x00,0x00,0x06, //RX channel 2 address
0x00,0x00,0x00,0x00,0x05, //RX channel 1 address
0x83, //32 address bits, 16 bit CRC
0xEF, //power set to 0dBm
0x05 //RF channel set to #25, RX on
};
//********************************************************
// Delay
void Delay100us(volatile unsigned char n)
{
unsigned char i;
while(n--)
for (i=0;i<35;i++) ;
}
void Delay5us(void)
{
unsigned char i;
for (i=0;i<2;i++) ;
}
//********************************************************
// SpiRadio
void SpiRadio(void)
{
SPICLK = 0; // Max SPI clock (XTAL/8)
P0_DIR &= ~0x20; // Set P0.5 as output
P0 |= 0x20; // Set P0.5 high to disable spi netburner chip select
SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
}
//********************************************************
// SpiReadWrite
unsigned char SpiReadWrite(unsigned char b)
{
EXIF &= ~0x20;
SPI_DATA = b;
while((EXIF & 0x20) == 0x00) ;
return SPI_DATA;
}
//********************************************************
// SpiWriteBuf
// SpiWriteBuf(&TXbuf,n);
void SpiWriteBuf(unsigned char* buf, unsigned char n)
{
unsigned char i;
for (i=0;i<n;i++)
{
SpiReadWrite(*buf);
buf++;
}
}
//********************************************************
// RadioInit
void RadioInit(void)
{
unsigned char i;
unsigned char *cpt;
unsigned char *bpt;
cpt = &RFConfigBuf[0];
bpt = RadioCfgBufPt;
for (i=0;i<15;i++)
{
*bpt = *cpt;
bpt++;
cpt++;
}
}
//********************************************************
// RadioOn
void RadioOn(void)
{
PWR_UP = 1;
Delay100us(30);
SpiRadio();
}
//********************************************************
// RadioCfg
void RadioCfg(void)
{
CE = 0;
CS = 1;
Delay5us();
SpiWriteBuf(RadioCfgBufPt,RADIO_CFG_BYTES);
CS = 0;
CE = 1;
Delay5us();
}
//********************************************************
// RadioTXBuf
void RadioTXBuf(unsigned char *bufPt, unsigned char bytes)
{
CE = 0;
Delay100us(3);
RadioParm.ChnRxTx &= ~0x01;
CS = 1;
SpiReadWrite(RadioParm.ChnRxTx);
CS = 0;
Delay5us();
CE = 1;
Delay5us();
SpiWriteBuf(bufPt, bytes);
CE = 0;
Delay100us(5);
}
//********************************************************
// AdcInit
void AdcInit(void)
{
ADCCON = 0X30;
EXIF &= ~0x10;
ADCSTATIC |= 0x23; //12 bit
}
unsigned int AdcRead(unsigned char channel)
{
unsigned int i;
ADCCON = 0x20 + channel;
Delay5us();
ADCCON |= 0X80;
Delay5us();
while((EXIF & 0X10) == 0) ;
EXIF &= ~0x10;
i = ADCDATAL + (((unsigned int) ADCDATAH)<<8);
return i;
}
void Transmitter(void)
{
unsigned int i;
ComParm.TXAddress3 = 0x00; // Set up transmit address
ComParm.TXAddress2 = 0x00;
ComParm.TXAddress1 = 0x00;
ComParm.TXAddress0 = 0x05;
for(;;)
{
AdcInit();
i = AdcRead(1);
ComParm.adcData1h = (i>>8);
ComParm.adcData1l = i;
AdcInit();
i = AdcRead(2);
ComParm.adcData2h = (i>>8);
ComParm.adcData2l = i;
AdcInit();
i = AdcRead(4);
ComParm.adcData3h = (i>>8);
ComParm.adcData3l = i;
RadioTXBuf(ComTXBufPt,COM_TX_BYTES); // Transmit data
Delay100us(11);
}
}
void Init(void)
{
P0_DIR = 0x40; // P0.6 is input, the rest output
P0 = 0x10; // P0.4 = 1 for the rec/tran selection
RadioInit();
RadioOn();
RadioCfg();
}
void main(void)
{
AdcInit();
Init();
for(;;)
{
Transmitter();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -