历史上的今天
今天是:2024年11月15日(星期五)
2019年11月15日 | 51单片机模拟SPI总线通信程序及proteus仿真
2019-11-15 来源:51hei
分享一个51单片机模拟SPI总线来进行通信的程序及仿真
仿真原理图如下
单片机源程序如下:
#include #include //x5045引脚定义 sbit SCK=P3^4; //将SCK位定义为P3.4引脚 sbit SI=P3^5; //将SI位定义为P3.5引脚 sbit SO=P3^6; //将SO位定义为P3.6引脚 sbit CS=P3^7; //将SCK位定义为P3.7引脚 //功能变量定义 #define WREN 0x06 //写使能锁存器允许 #define WRDI 0x04 //写使能锁存器禁止 #define WRSR 0x01 //写状态寄存器 #define READ 0x03 //读出 #define WRITE 0x02 //写入 /***************************************************** 函数功能:延时1ms (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ***************************************************/ void delay1ms() { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ; } /***************************************************** 函数功能:延时若干毫秒 入口参数:n ***************************************************/ void delaynms(unsigned char n) { unsigned char i; for(i=0;i } /***************************************************** 函数功能:从X5045的当前地址读出数据 出口参数:x ***************************************************/ unsigned char ReadCurrent(void) { unsigned char i; unsigned char x=0x00; //储存从X5045中读出的数据 SCK=1; //将SCK置于已知的高电平状态 for(i = 0; i < 8; i++) { SCK=1; //拉高SCK SCK=0; //在SCK的下降沿输出数据 x<<=1; //将x中的各二进位向左移一位,因为首先读出的是字节的最高位数据 x|=(unsigned char)SO; //将SO上的数据通过按位“或“运算存入 x } return(x); //将读取的数据返回 } /***************************************************** 函数功能:写数据到X5045的当前地址 入口参数:dat ***************************************************/ void WriteCurrent(unsigned char dat) { unsigned char i; SCK=0; //将SCK置于已知的低电平状态 for(i = 0; i < 8; i++) // 循环移入8个位 { SI=(bit)(dat&0x80); //通过按位“与”运算将最高位数据送到S //因为传送时高位在前,低位在后 SCK=0; SCK=1; //在SCK上升沿写入数据 dat<<=1; //将y中的各二进位向左移一位,因为首先写入的是字节的最高位 } } /***************************************************** 函数功能:写状态寄存器 ,可以设置看门狗的溢出时间及数据保护 入口参数:rs; //储存寄存器状态值 ***************************************************/ void WriteSR(unsigned char rs) { CS=0; //拉低CS,选中X5045 WriteCurrent(WREN); //写使能锁存器允许 CS=1; //拉高CS CS=0; //重新拉低CS,否则下面的写寄存器状态指令将被丢弃 WriteCurrent(WRSR); //写状态寄存器 WriteCurrent(rs); //写入新设定的寄存器状态值 CS=1; //拉高CS } /***************************************************** 函数功能:写数据到X5045的指定地址 入口参数:addr ***************************************************/ void WriteSet(unsigned char dat,unsigned char addr) { SCK=0; //将SCK置于已知状态 CS=0; //拉低CS,选中X5045 WriteCurrent(WREN); //写使能锁存器允许 CS=1; //拉高CS CS=0; //重新拉低CS,否则下面的写入指令将被丢弃 WriteCurrent(WRITE); //写入指令 WriteCurrent(addr); //写入指定地址 WriteCurrent(dat); //写入数据 CS=1; //拉高CS SCK=0; //将SCK置于已知状态 } /***************************************************** 函数功能:从X5045的指定地址读出数据 入口参数:addr 出口参数:dat ***************************************************/ unsigned char ReadSet(unsigned char addr) { unsigned char dat; SCK=0; //将SCK置于已知状态 CS=0; //拉低CS,选中X5045 WriteCurrent(READ); //开始读 WriteCurrent(addr); //写入指定地址 dat=ReadCurrent(); //读出数据 CS=1; //拉高CS SCK=0; //将SCK置于已知状态 return dat; //返回读出的数据 } /***************************************************** 函数功能:看门狗复位程序 ***************************************************/ void WatchDog(void) { CS=1; //拉高CS CS=0; //CS引脚的一个下降沿复位看门狗定时器 ……………………
史海拾趣
|
以前用过的nucleo-g491 用STM32 ST-LINK Utility连不上,STM32CubeProgrammer可以 本帖最后由 damiaa 于 2022-11-26 20:16 编辑 以前用过的nucleo-g491 用STM32 ST-LINK Utility连不上。 4.20 4.60版本都一样。 STM32CubeProgrammer可以 stm32cubeide仿真 没问题。 keil仿真没问 ...… 查看全部问答> |
|
疑问:理论上分析:当Vi电压大于1.4V时T1管导通,T2和T5管导通钳位T1管集电极的电压 怎么理解T1管的工作状态?是频繁开关? T1管集电极电位?集电极集电极电位一直稳定在1.4V? … 查看全部问答> |
|
全志异核多构 AI智能视觉V853开发板测评 - V853编译测试libomv库(代替opencv基础库) #V853编译测试libomv库 libovm为openmv开源项目中的图像算法的核心库,此库集成了大部分的基础图像算法接口和统一的图像结构体,整个库非常的迷你,编译生成的libimlib.a库只有1.8M的大小,可以代替基本的opencv的基础库,而且不依赖其他库所以编 ...… 查看全部问答> |
|
物联网是从应用出发,利用互联网、无线通信网络资源进行业务信息的传送,是互联网、移动通信网应用的延伸,是自动化控制、遥控遥测及信息应用技术的综合体现。 信息革命浪潮。物联网已经在全世界得到了很大的重视,随着“物联网十二五& ...… 查看全部问答> |
|
1. 使用的型号为LRM470-RL22。 2. 当前 进入Sleep后 功耗还有200uA . 不知道哪里有问题。 3. 可能是单片机的引脚要输入输出进行配置, 但是Sw_Ctrl1 和sw_ctrl2已经配置为 ...… 查看全部问答> |
|
目前我想通过lora模组跟网关连接,如果我的模组配置是这样的,AT+BAND=6;AT+FREQ=1,8,470300000;AT+FREQ=3,8,500300000;AT+OTAA=1;AT+RX2=0,500300000;AT+CLASS=2;AT+JOIN=6;AT+SAVE;,那请问网关需要怎么配置,就是global_conf.json文件中的代码。 ...… 查看全部问答> |
|
上篇文章:玩转RP2040之开箱测评与上电运行,介绍了RP2040的硬件和上电使用情况,本篇来进行软件开发环境的搭建。 RP2040支持Python或C语言开发,本篇使用Python来进行开发。 1 软件环境搭建 这款RP2040板子与树莓派的另 ...… 查看全部问答> |
|
最近在找POE方案,正好论坛活动,就挑选了MPS的POE发送端和受电端的DEMO板,收到货后马上开箱 连封箱胶带都是MPS 包装很认真啊,非常专业 EV8007H板,接上网线就可以测试MP8007芯片,板子做工不错每个元件用料都很讲究 & ...… 查看全部问答> |
|
e络盟 网站在购买体验上是真的很好,客服的响应速度很快,这次购买发货也是真的很快! 这次买了几颗STM32G0芯片,G0性能不错价格也是相对其它系列要低,相较而言属物美价廉! e络盟发货在包装上也是很用心的,纸质包装箱+气泡袋 保护得很好! ...… 查看全部问答> |




