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