www.pudn.com > stcMCU.rar > MCS_X51lib.c


/**************************************************************** 
//MCS-51单片机自定义库函数。 
//用户可以添加自己的操作 
 
//create by changshengwuji  
//email: netspider@163.com 
//qq:    450353168 
//2006.05.03 
****************************************************************/ 
#include 
#include "../inc/mcs_x51.h" 
#include "../inc/hardmap.h" 
/*延时机器周期为:8+x*7 */ 
/* STC89C52,工程设置为8级优化,small ram,large rom。速度优先*/ 
/* 经试验,优化等级不影响该函数的定时时间*/ 
void delay_7clk(UINT8 x) 
{ 
	while(x--); 
} 
 
/* STC89C52,工程设置为8级优化,small ram,large rom。速度优先*/  
/* 延时函数,参数为16位整数*/ 
/* 延时机器周期为12+10*x   */ 
void delay_10clk(UINT16 x) 
{ 
	while(x--); 
} 
 
 
//从串口读取一个字节 
UINT8 uart_getc() 
{ 
	while(!RI); 
	UART_RIIF_CLR; 
	return(rd_uart()); 
} 
 
//利用串口输出一个字节 
void uart_putc(UINT8 x) 
{ 
	wr_uart(x); 
	while(!TI); 
	UART_TIIF_CLR; 
}	 
 
/********************************************************** 
SPI function 
**********************************************************/														    
UINT8 spi_getb()   			//get a byte from spi bus 
{ 
UINT8 	i,val; 
	SCK = 0; 
	MOSI = 0; 
	val = 0; 
	for(i = 0; i< 8 ;i++) 
	{ 
		SCK = 1; 
		val = val << 1; 
		if(MISO) 
			val |= 0x01;		 
		SCK = 0; 
	} 
	return(val); 
} 
/*************************************************************** 
 
***************************************************************/ 
void spi_putb(UINT8 x)		 //put a byte to spi bus 
{ 
UINT8 i; 
	for(i = 0;i < 8 ;i++) 
	{ 
		SCK = 0; 
		//if(((x>>(7-i)) & 0x01) == 1) 
		if((x& (1 << (7-i))) == 1) 
			MOSI = 1; 
		else 
			MOSI = 0; 
		_nop_; 
		SCK = 1; 
		_nop_; 
		_nop_; 
		_nop_; 
	} 
	SCK = 0; 
	MOSI = 0; 
}			 
/*************************************************************** 
***************************************************************/ 
void spi_putw(UINT16 x) 
{ 
UINT8 i; 
	SPI_EN = 0; 
	i = x>>8; 
	spi_putb(i); 
	i = x & 0x00ff; 
	spi_putb(i); 
	SPI_EN = 1; 
} 
/******************************************************************/ 
 
/****************************************************************** 
硬件SPI接口函数 
向SPI端口写一个字。 
*******************************************************************/ 
#if defined(STC_12X2052X) 
	void wrw_spi(UINT16 x)	  
	{ 
		SPI_EN = 0; 
		SPIF_CLR; 
		wrb_spi(x>>8); 
		while(SPIF == 0);	 
		SPIF_CLR; 
		wrb_spi(x & 0x00ff); 
		while(SPIF == 0); 
		SPIF_CLR; 
		SPI_EN = 1; 
	} 
 
#endif