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

📄 adc.c

📁 nRF24E1多发单收
💻 C
字号:
#include "reg24e1.h"
#include "radio.h"
#include "delay.h"
#include "spi.h"

tRadioParm RadioParm;
tComParm ComParm;

#define RADIO_PACKET_SIZE 3 
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);
		SpiReadWrite(0x04);
	  CS = 0;
	  Delay5us();
	CE = 1;
	Delay5us();
	SpiWriteBuf(bufPt, bytes);
	CE = 0;
	Delay100us(5);
}

//********************************************************
// AdcInit
void AdcInit(void)
{
	ADCCON = 0X30;
	EXIF &= ~0x10;
	ADCSTATIC |= 0x21; //8 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;
}

*/
 unsigned char AdcRead(unsigned char channel)
{
	unsigned char i;
	ADCCON = 0x20 + channel;
	Delay5us();
	ADCCON |= 0X80;
	Delay5us();
	while((EXIF & 0X10) == 0) ;
	EXIF &= ~0x10; 
	i = ADCDATAH;
	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.adcData1 = i;
		AdcInit();
		i = AdcRead(2);
		ComParm.adcData2 = i;
		AdcInit();
		i = AdcRead(4);
		ComParm.adcData3 = i;
		

		RadioTXBuf(ComTXBufPt,COM_TX_BYTES);  // Transmit data
		Delay100us(13);
	}
}
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 + -