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

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

}

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

  1. c51单片机的语言,51单片机,stm32,arduino都是用什么语言进行编程的?

    51单片机,STM32单片机用汇编或者C语言,现在基本都用C语言编程,Arduino有自己的编程环境,用户也是用C语言编程. 51单片机的编程 51单片机进入中国比较早,在早前用汇编编程比较多,我在上 ...

  2. p1口输入输出实验c语言程序,51单片机P1口输入输出实验实验报告.doc

    51单片机P1口输入输出实验实验报告 实验一 P1口输入输出实验一 实验目的 1 掌握P1口作为I/O口时的使用方法. 2 理解读引脚和读锁存器的区别. 实验原理 由 AT89C51 组成的单片机系统 ...

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

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

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

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

  5. 汇编语言单片机c51基本i/o输入输出实验报告,实验二i-o口输入输出实验报告.doc...

    实验二i-o口输入输出实验报告 单片机实验报告 2 姓名 徐伟彬 学号 1215111035 时间 地点 实验题目 I/O口输入.输出实验 一.实验目的 1. 学习I/O口的使用方法. 2. 学习延时 ...

  6. p1口输入 输出实验C语言,单片机P1口输入输出实验单片机P1口输入输出实验.ppt

    单片机P1口输入输出实验单片机P1口输入输出实验 单片机I/O口输入输出实验 (或单片机数字量输入输出实验);单片机P1口输入输出实验 ;2.实验要求(1).2)为必做,3)为选做) 3) P1口作输 ...

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

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

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

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

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

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

最新文章

  1. 定期删除各子文件下数据
  2. ADO.NET Entity Data Model入门实例
  3. 【Android 应用开发】 自定义 圆形进度条 组件
  4. IO:select、poll、epoll
  5. 不用一行代码,用 API 操作数据库,你信吗
  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
  7. SpringMVC-DispatcherServlet配置(Spring-servlet.xml)
  8. 阿里云神龙团队拿下TPCx-BB排名第一的背后技术
  9. 【Java】模拟分组交换网络的时延、丢包
  10. Oracle学习笔记:oracle和serverver在过程sql中通过select对变量进行赋值的区别
  11. java描述线性探测_实现基于线性探测的哈希表1
  12. c语言程序年月日怎么编,C语言程序设计: 输入年月日 然后输出是星期几
  13. 2.Zabbix企业级分布式监控系统 --- Zabbix 简介
  14. 字道-最美中国字硬笔书法教学|培养孩子正确的执笔写字姿势有多重要?看完你就明白了!
  15. Winform中HelpButton的用法总结
  16. ElasticSearch 7.7.0 高级篇-搜索技术
  17. 利用python爬取实习僧网站上的数据
  18. C# 获取汉字的拼音首字母(转)
  19. 通过SendGrid进行邮件的发送【Java】
  20. 图片风格迁移:基于实例缓解细节丢失、人脸风格化失败问题

热门文章

  1. python爬虫与文本数据分析 系列课
  2. tkinter 图标不显示问题
  3. 数据结构学习记录(二)——折半查找二叉判定树的画法
  4. [unity3d插件]如何在Animator中使用刀光残影插件”PocketRPGTrails”
  5. C语言中for语句的执行步骤是什么,C语言中for语句的执行过程是怎样的
  6. SMURF流程之q2-sidle(-)及Qiime2安装加速
  7. 263海外邮箱服务器设置,263企业G邮局海外服务器
  8. superset警报与报告
  9. 给body设置背景图片
  10. 5、Python量化交易-回测收益计算