spi.c

来自「本程序是mc145572U接口驱动程序,有一些问题,希望大家指点.」· C语言 代码 · 共 78 行

C
78
字号
#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 + =
减小字号Ctrl + -
显示快捷键?