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

📄 s8051.c

📁 si4432官方的程序
💻 C
字号:
/*
** ============================================================================
**
** FILE
**  S8051.c
**
** DESCRIPTION
**  Contains all the low level, 8051 dependent functions		    
**
** CREATED
**  Silicon Laboratories Hungary Ltd
**
** COPYRIGHT
**  Copyright 2008 Silicon Laboratories, Inc.  
**	http://www.silabs.com
**
** ============================================================================
*/

#include "S8051.h"


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void SetHwMasterSpi(void)
  +
  + DESCRIPTION:    initialize the HW SPI 
  +
  +	INPUT:			None
  +
  + RETURN:         None
  +
  + NOTES:          None
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void SetHwMasterSpi(void)
{
	
   SPI1CFG   = 0x40;					//Master SPI, CKPHA=0, CKPOL=0
   SPI1CN    = 0x00;					//3-wire Single Master, SPI enabled
   SPI1CKR   = (SYSCLK/(2*SPI_CLOCK))-1;
   SPI1EN 	 = 1;                     	// Enable SPI interrupt
   RF_NSEL_PIN = 1;
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void delay(uint8 delay)
  +
  + DESCRIPTION:    wait  
  +
  +	INPUT:			length of the delay (1 ... 255)
  +
  + RETURN:         None
  +
  + NOTES:          None
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void delay_ms(uint8 delay)
{
	xdata uint8  j;
	xdata uint16 i;

	if( delay == 0 )
	{
		return;
	}

	for(j=0;j<delay;j++)
	{
		for(i=0;i<2000;i++);
	}
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void Timer2Init(void)
  +
  + DESCRIPTION:    initialize the Timer2  
  +
  +	INPUT:			None
  +
  + RETURN:         None
  +
  + NOTES:          None
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void Timer2Init(void)					//8051 Timer2 init					
{

   	CKCON &= ~0x60;                     // Timer2 uses SYSCLK/12
   	TMR2CN &= ~0x01;
  	TMR2CN = 0x04;                      // Enable Timer2 in auto-reload mode
  	                            		// Timer2 interrupt enabled
	
	TMR2L = 0x1A;							
	TMR2RLL = 0x1A;
	TMR2H = 0x0A;
	TMR2RLH = 0x0A;
	ET2 = 1;
}





/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  uint8 SpiReadWrite(uint8 data)
  +
  + DESCRIPTION:    sends and read 8 length data through the SPI port
  +
  +	INPUT:			data 
  +
  + RETURN:         received byte
  +
  + NOTES:          it doesn't control the nSEL pin
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

uint8 SpiReadWrite(uint8 spi_in)
{
	SPI1DAT = spi_in;					//write data into the SPI register
	while( SPIF1 == 0);					//wait for sending the data
	SPIF1 = 0;							//clear interrupt flag
	
	return SPI1DAT;						//read received bytes
}


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  void SpiWriteAddressData(uint8 address, uint8 data1)
  +
  + DESCRIPTION:    sends 16 length data through the SPI port (address and data)
  +
  +	INPUT:			address - register address
  +					data 	- 8bit data 
  +
  + RETURN:         None
  +
  + NOTES:          It controls the nSEL pin
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

void SpiWriteAddressData(uint8 address, uint8 data1)
{
	RF_NSEL_PIN = 0;
	SPI1DAT = address;					//write data into the SPI register
	while( SPIF1 == 0);					//wait for sending the data
	SPIF1 = 0;
	SPI1DAT = data1;					//write data into the SPI register
	while( SPIF1 == 0);					//wait for sending the data
	SPIF1 = 0;
	RF_NSEL_PIN = 1;
}



/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + FUNCTION NAME:  uint16 SpiReadWriteWord(uint16 spi_in)
  +
  + DESCRIPTION:    sends and read 16 length data through the SPI port
  +
  +	INPUT:			data 
  +
  + RETURN:         received word
  +
  + NOTES:          it controls the nSEL pin
  +
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


uint16 SpiReadWriteWord(uint16 spi_in)
{
	xdata uint16 temp16;

	
	RF_NSEL_PIN = 0;						
	temp16 = (uint16) (SpiReadWrite( (uint8)((spi_in & 0xFF00) >> 8) ));
	temp16 <<= 8;
	temp16 += (uint16) (SpiReadWrite( (uint8)(spi_in & 0x00FF) ));
	RF_NSEL_PIN = 1;
	

	return temp16;
}



⌨️ 快捷键说明

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