📄 spi.c
字号:
/********************** SPI基本操作函数******************************
[文件名] SPI.c+SPI.H+ASMselect.h
[版本] TV.1
[创建] 阿春x
[修正] 阿春x
[最后修改时间] 2006.04.21 16:30
[验 正 时 间] 2006.04.24 15:30
[功能说明]读取或写入8位或<=16位data
***************************************************************************/
#include "ASMselect.h"
#if ASMSPI
#include "reg51x.h"
#include "tab.h"
//#include <stdio.h>
//#include <intrins.h>
//#include "ioprot.h"
//---------------------
sbit DO= P1^1;//if DO,DI short,DO=P1^1;
sbit DI=P1^1;
sbit SK=P1^2;
//====================================SPI=================
SPI_write_8bit(uchar txdata){
uchar i;
SK=0;
for(i=0;i<8;i++){
if((txdata&0X01)!=0){
DI=1;
SK=1;/*DELAY_X20us(1);*/
}
else {
DI=0;
SK=1;/*DELAY_X20us(1);*/
}
SK=0;/*DELAY_X20us(1);*/
txdata>>=1;
}
DO=1;
}
//------------------
uchar SPI_read_8bit(){
uchar rxdata=0;
uchar i;
SK=0;
for(i=0;i<8;i++){
rxdata>>=1;
if(DO)rxdata|=0X80;
SK=1;/*DELAY_X20us(1);*/
SK=0;/*DELAY_X20us(1);*/
}
return(rxdata);
}
//==============================================
#if ASMSPI_write_nbit
SPI_write_nbit(uint txdata,uchar txcount){
uchar i;
for(i=0;i<txcount;i++){
if((txdata&0X0001)!=0){
DI=1;
SK=1;/*DELAY_X20us(1);*/
}
else {
DI=0;
SK=1;/*DELAY_X20us(1);*/
}
SK=0;/*DELAY_X20us(1);*/
txdata>>=1;
}
}
#endif
//----------------------------
#if ASMSPI_read_nbit
uint SPI_read_nbit(uchar rxcount){
uint rxdata=0;
uchar i;
SK=0;
for(i=0;i<16;i++){
if(i<rxcount){
if(DO)rxdata&=0X8000;
SK=1;/*DELAY_X20us(1);*/
SK=0;/*DELAY_X20us(1);*/
}
rxdata>>=1;
}
return(rxdata);
}
#endif
//==========================================
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -