该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下:

//-----------------------函数声明,变量定义------------

#include

#include

sbit SCK=P1^0; // 将p1.0口模拟时钟输出

sbit MOSI=P1^1; // 将p1.1口模拟主机输出

sbit MISO=P1^2; // 将p1.1口模拟主机输入

sbit SS1=P1^3; // 将p1.1口模拟片选

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

//-------------------------------------------------------------------------------// 函数名称: SPISendByte

// 入口参数: ch

// 函数功能: 发送一个字节

//-------------------------------------------------------------------------------

void SPISendByte(unsigned char ch)

{

unsigned char idata n=8; // 向SDA上发送一位数据字节,共八位

SCK = 1 ; //时钟置高

SS1 = 0 ; //选择从机 while(n--)

{

delayNOP();

SCK = 0 ; //时钟置低

if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1

{

MOSI = 1; // 传送位1

}

else

{

MOSI = 0; // 否则传送位0

}

delayNOP();

ch = ch<<1; // 数据左移一位

SCK = 1 ; //时钟置高

}

}

//-------------------------------------------------------------------------------

// 函数名称: SPIreceiveByte

// 返回接收的数据

// 函数功能: 接收一字节子程序

//-------------------------------------------------------------------------------

unsigned char SPIreceiveByte()

{

unsigned char idata n=8; // 从MISO线上读取一上数据字节,共八位

unsigned char tdata;

SCK = 1; //时钟为高

SS1 = 0; //选择从机

while(n--)

{

delayNOP();

SCK = 0; //时钟为低

delayNOP();

tdata = tdata<<1; // 左移一位,或_crol_(temp,1)

if(MISO == 1)

tdata = tdata|0x01; // 若接收到的位为1,则数据的最后一位置1

else

tdata = tdata&0xfe; // 否则数据的最后一位置0

SCK=1;

}

return(tdata);

}

//-------------------------------------------------------------------------------

// 函数名称: SPIsend_receiveByte

// 入口参数: ch

// 返回接收的数据

// 函数功能:串行输入/输出子程序

//-------------------------------------------------------------------------------

unsigned char SPIsend_receiveByte(unsigned char ch)

{

unsigned char idata n=8; // 从MISO线上读取一上数据字节,共八位

unsigned char tdata;

SCK = 1; //时钟为高

SS1 = 0; //选择从机

while(n--)

{

delayNOP();

SCK = 0; //时钟为低

delayNOP();

{

tdata = tdata<<1; // 左移一位,或_crol_(temp,1)

if(MISO == 1)

tdata = tdata|0x01; // 若接收到的位为1,则数据的最后一位置1

else

tdata = tdata&0xfe; // 否则数据的最后一位置0

}

{

if((ch&0x80) == 0x80) // 若要发送的数据最高位为1则发送位1

{

MOSI = 1; // 传送位1

}

else

{

MOSI = 0; // 否则传送位0

}

ch = ch<<1; // 数据左移一位

}

SCK=1;

}

return(tdata);

}

51单片机io位与 c语言,【51单片机】普通I/O口模拟SPI口C语言程序相关推荐

  1. 51单片机扩展io口实验c语言,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

  2. io口输入输出实验程序c语言,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

  3. c语言spi发送12位数据,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

  4. 单片机 c语言 定义i o,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

  5. c语言 单片机模拟,【51单片机】普通I/O口模拟SPI口C语言程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 89C51系列单片机都不带SPI口,所在在这种情况下,我们可以模拟SPI口来现实我们要的功能,程序如下: //---------------------- ...

  6. io口模拟spi,stm32f103与MS5611基于spi总线的温度压力高度数据读取

    以下文件为源文件 /** -----------------------MS5611驱动 && IO口模拟SPI驱动------------------------- ******** ...

  7. STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码

    STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码 本文采用的芯片为STM32F103RCT6 温度芯片为MAX6675 因为芯片的spi口只有3个,有部分需要外接W25Q128 ...

  8. STC15单片机读写大容量SD卡(IO口模拟SPI模式)

    使用的芯片是STC15系列的IAP15F2K61S2,开发板是51的xl2000.把芯片座上的51芯片拔掉换成STC的,混合模式.(配置够低吧) 源码由51开发板例程的实验26修改而来. 浏览了网上的 ...

  9. 单片机IO口模拟SPI四种模式的程序

    2013年09月21日 10:00:02 zyboy2000 阅读数:23924 #include "iom8535v.h" #define _CPOL 1 #define _CP ...

最新文章

  1. WPF纯手工两步打造图片切割工具(一)
  2. Missing artifact com.github.pagehelper:pagehelper:jar:3.4.2-fix的解决方法
  3. python 折线图x时间_在Python Bokeh折线图中设置日期/时间轴上的比例
  4. TensorFlow 实战 MINST
  5. 原生android 全面屏,谷歌全面屏手机曝光!谷歌pixel2,安卓8.0+骁龙836!
  6. win7电脑浏览器证书过期的解决方法
  7. 定积分算法java_变步长梯形积分算法求解函数定积分
  8. 五分钟带你了解前端开发,以及前端开发的发展机会
  9. np.argmin和argmax
  10. 编译安装Nginx以及配置运行Drupal 8,实现上传进度功能
  11. 360有支持linux系统的吗,观点|360 安全卫士 for Linux 使用结果
  12. Vibe算法简介、优缺点、代码
  13. Idea新建项目和快捷键
  14. 数学符号名称,解释,定义加举例
  15. AWS的十条军规: 过去十年的经验总结
  16. android 4k手机屏幕分辨率,安卓手机都4K屏了 真的有必要?
  17. Android应用开发接入讯飞语音合成
  18. 人在世、多交人,为人处事要留神
  19. 【程序哥】分析 网易一元夺宝是否有作弊空间,真像媒体所说的吗?
  20. halcon变量,图像与C++的一些转换(未完待续)

热门文章

  1. Android的HashMap方法,Android中实现HashMap排序的方法
  2. error lnk2001: mysql_使用mysql时的链接错误 | 学步园
  3. 免费制作微信小程序开发关于旅游_教大家怎么一步步免费自己做微信小程序
  4. wsl2启动桌面_WSL2使用xrdp实现图形桌面
  5. 多元线性回归(java实现)
  6. Remixer-谷歌的UI参数动态修改框架
  7. LiveLayout
  8. thread类 java_java入门避坑必读,通过Thread类创建java多线程
  9. ansys里面自带chemkin_ANSYS CHEMKINPRO复杂化学反应快速仿真
  10. c语言程序基本设计,C语言程序的设计基本6.ppt