📄 spi.c
字号:
#define SPI//定义SPI总线函数:写入地址和数据到寄存器与读出数据;延时程序
#include "reg51.h"
#include "intrins.h"
#include "absacc.h"
#include "io.h"//AT89C2051的IO定义
#include "spi.h"//将SPI子函数定义为外部函数
#include "sub.h"//激活子函数定义为外部函数
#include "ch.h"//通道子函数定义为外部函数
//SPI串行外设接口总线的写入
void writedata(unsigned char dat,unsigned char num)//num可以写入3位与4位地址或者8位与16位数据(最好不写16位数据)
{
unsigned int x;
_nop_();
SCPEN=1;
_nop_();
SCPEN=0;//低电平使能有效
_nop_();
//当写入byte register的4位地址时左移4位
dat<<=8-num; //如果上面写入nibble register的3位地址和16位数据将删除此句
for(x=0;x<=num;x++)
{
//SCPRx是上升沿有效
_nop_();
SCPCLK=0;//满足CLk>0.25us//SCPCLK要求0~4M频率
_nop_();
_nop_();
dat<<=1;//一个时钟周期,数据左移一位
SCPRX=1;
_nop_();
SCPCLK=1;
_nop_();
_nop_();
}
}
//SPI串行外设接口总线的读出
unsigned char readdata(unsigned char add,unsigned char num)//读一个字节;num为地址4位或者8位
{
unsigned int y;
unsigned char dat;
_nop_();
SCPEN=1;
_nop_();
SCPEN=0;
_nop_();
writedata(add,num);
for(y=0;y<=8;y++)
{
//SCPTx是下降沿有效
SCPCLK=1;
_nop_();
_nop_();
dat<<=1;
SCPCLK=0;
_nop_();
_nop_();
if(SCPTX) dat++;
_nop_();
}
return(dat);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -