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

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);

}

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

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

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

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

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

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

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

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

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

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

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

  6. c51语言定义布尔变量,51单片机指令系统:布尔变量操作指令(9)

    51单片机指令系统:布尔变量操作指令(9) 第二十七课:布尔变量操作指令分析 布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的.布尔变量也即开关变量,它是以位(bit) ...

  7. C语言极速学习开发——51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学习的精神之灯-下)

    系列文章目录 提示:本文章为系列文章,系列文章的所有文章的目录后期会时刻更新,喜欢的朋友请收藏好 <第一章 C语言极速学习开发--51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学 ...

  8. 《电子DIY》之《单片机实践项目》之(51单片机)proteus中带编码信号的电机的详细讲解及电路图绘制(motor encoder)

    此课程主要讲解如何使用51单片机进行实战应用,分为多次课,每次课都会分别围绕一个课程设计或毕业设计(实践项目)展开.手把手叫你学51单片机."Proteus仿真","电子 ...

  9. 单片机原理与实践学习记录之51单片机I/O口简单应用

    单片机原理与实践学习记录 第二课(更新时间:2021.9.3) 51单片机I/O口简单应用 C51中常用的头文件 ​ 通常有reg51.h,reg52.h,math.h, ctype.h, stdio ...

最新文章

  1. pathview包绘制富集的kegg图
  2. 【Flutter】StatelessWidget 组件 ( Divider 组件 | Card 组件 | AlertDialog 组件 )
  3. 【学习心得】当程序员思路被打断
  4. 10.9 ping:测试主机之间网络的连通性
  5. SAP UI5 里如何让每次视图显示时都执行某方法
  6. python游戏代码运行不了_无法使我的tic tac toe游戏在python中正确运行
  7. JavaFX中的塔防
  8. android的动画实例
  9. 美国歌手西恩·列侬以3200美元WETH出售NFT艺术品
  10. Keepalived实现mysql高可用
  11. tde数据库加密_如何在TDE加密的数据库上配置SQL Server镜像
  12. 洛谷4755 Beautiful Pair (分治)
  13. php图片位置偏移代码,关于PHP的fseek()方法,究竟是什么偏移(位置)?
  14. 《原则》瑞达利欧_epub+mobi+azw3
  15. Java初级程序员面试中应该如何准备?一般公司对Java开发的要求有哪些?
  16. archlinux安装QQ微信
  17. AutoRun机制详解
  18. 第一个blog--常用在线网站
  19. C++入门:让计算机“开口说话”
  20. 反馈对于用户体验的重要性

热门文章

  1. autolisp 列表 resbuf
  2. Win配置Apache+mod_wsgi+django环境+域名
  3. java源码导入eclipse_spring framework源码下载并导入eclipse
  4. eclipse搜索框太小
  5. 创建线程都有哪些方式?— Callable篇
  6. ArrayList与String[]
  7. 从底层重学 Java 之四大整数 GitChat链接
  8. InstallShield LaunchAppAndWait运行另一个程序并等待该程序终止。
  9. 面试 jsp转发和重定向
  10. 第一次接触万物接对象