写一个51单片机模拟SPI总线的代码

SPI总线空闲电平为高电平(即CPOL = 1),在每个周期的第二个时钟沿采样(即CPHA = 1)
总线的读 / 写同步进行
C语言或汇编语言都行

这是我复制的,一搜一大堆

#include <reg52.h>
sbit SPI_DI =P0^1; //MMC数据输入
sbit SPI_DO =P0^0;//MMC数据输出,可不接
sbit SPI_SCL=P0^2;//时钟线

void Write_Byte(unsigned char value)
{
unsigned char i;
for (i=0;i<8;i++)
{
if (((value>>(7-i))&0x01)==0x01)
SPI_DI=1;
else SPI_DI=0;
SPI_SCL=0;
delay(5);
//必须要加延时,否则会因为操作太快而不响应。
SPI_SCL=1;
delay(5);
//必须要加延时,否则会因为操作太快而不响应。
}
}

unsigned char Read_Byte()
{
unsigned char temp=0;
unsigned char i;
for (i=0;i<8;i++)
{
SPI_DO=1;
SPI_SCL=0;
delay(5);
temp=(temp<<1)+(unsigned char)SPI_DO;
SPI_SCL=1;
delay(5);
}
return (temp);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-03-17
随便一找,大把的,别这么懒。追问

你帮我找一个吧(CPOL = 1 、CPHA = 1、读 / 写同步的)
我给你再加20分

追答

亲,我不要分。

第2个回答  2015-03-16
可以去文库里找一份DS1302的程序参考一下
第3个回答  2015-03-16
需要给你写一份吗追问

最好能帮我写一份,时序图看不大懂

最好能帮我写一份,时序图看不大懂

追答

需要定做可以丘上说
我id

写一个51单片机模拟SPI总线的代码
sbit SPI_SCL=P0^2;\/\/时钟线 void Write_Byte(unsigned char value){ unsigned char i;for (i=0;i<8;i++){ if (((value>>(7-i))&0x01)==0x01)SPI_DI=1;else SPI_DI=0;SPI_SCL=0;delay(5);\/\/必须要加延时,否则会因为操作太快而不响应。SPI_SCL=1;delay(5);\/\/必须要加...

51单片机IO口模拟SPI
下面就是一个 SPI 输出的函数,时序,在程序里面,表述的非常清楚。sbit sck = P2^7;\/\/移位时钟 sbit da1 = P2^6;\/\/串行数据 void send(char dat){ char i;for(i = 0; i < 8; i++) { if((dat >> i) & 0x01) da1 = 1; else da1 = 0;sck = 0; sck = 1;}...

用两片51单片机模拟SPI通信,一片主机,一片从机。需从主机发送8个字节的...
1.定义三个gpio: p0-sclk, p1-sdi, p2-sdo;p0用于模拟spi的clock,p1用于接收数据,p2用于f发送数据;硬件上单片机A的p0接单片机B的p0,A的p1接B的p2,A的p2接B的p1 2.发送程序:clock拉低,sdo输出0或1(数据),延时一定时间,clock拉高,延时一定时间,这样A就发送一位数据到B,循环8次...

51单片机怎样实现SPI通讯
用传统的51单片机实现SPI通讯,需要用I\/O脚来模拟SPI协议,这比较麻烦。选用STC8系列单片机,就具有了SPI接口了 ,只需要对寄存器操作就行了。方便了很多了。如下图,这是STC8系列中的4个子系列,还有其它的子系列,就不再列举了。

关于51单片机SPI通信的几个问题
AUXR = 0x08; \/\/开SPI中断 中断函数,SPI同LVDI共享中断5 void SPI_Interrupt(void) interrupt 5 { SPSTAT = 0xC0; \/\/向SPIF和WCOL写入1使其清零 DataBuffer[count++] = SPDAT;return;} 1. STC的SPI口发送完以后保持不变。2. 每次通信(包括输入或者输出)以后SPIF都会自动置位,用来...

51单片机 SPI 75HC595
\/\/下面是一个595输出的程序,供参考。\/\/ \/***\/ \/* *\/ \/*将显示数据送入74HC595内部移位寄存器 *\/ \/* *\/ \/***

ISD17240ISD17240SPI操作例程
本文详细介绍了使用51系列单片机操作ISD17240语音芯片的SPI接口通信过程。通过定义各个寄存器和标志位,实现了对芯片的上电、停止、复位、清除中断、读取状态寄存器内容、读取放音和录音指针、读取芯片ID、放音、录音、擦除、快进和空检查等操作。此外,还提供了芯片系统初始化函数,确保了芯片正常工作。通过...

51单片机可以用matlab仿真吗
可以。对于不带SPI串行总线接口的MCS-51系列单片机来说,可以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。matlab仿真主要是simulink模块,打开simulink,建立模型,点击运行按钮开始仿真。

PIC单片机SPI控制两个74HC595控制四位数码管?
if(++k > 0x10)k = 0;\/\/8个数码管循环显示0,1,2...,A,B..F,消隐.} } } \/***\/ void Send_595(unsigned char dat)\/\/发送一个字节 { unsigned chari;for(i=0; i<8; i++){ if(dat & 0x80)P_HC595_SER = 1;elseP_HC595_SER = 0;P_HC595_SRCLK = 1;P_HC595_SRC...

51单片机能利用三线SPI总线吗
可以的,对于没有SPI接口的51单片机,可以用两个IO口来模拟SPI时序,也可以用三根线来模拟,三根线时,数据的收发共用一个IO口,即直接将MOSI和MISO短接一起后接单片机的一个普通IO口,有的厂商建议接两个引脚中间接一个数千欧的电阻后连接在一起 ...

相似回答