⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 本程序是mc145572U接口驱动程序,有一些问题,希望大家指点.
💻 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 + -