|
我是一个初入单片机的萌新,想尝试软件模拟SPI协议进行51单片机之间的互相通信,但一直未能成功接收,尝试过排除程序代码、仿真搭建、串口设置之类的错误,但依然未能解决,所以想来论坛上求助各位,希望能有大佬解答,非常感谢。
代码如下:
/*********
想要实现的功能:通过串口助手A发送数据给单片机A,单片机A将该数据发送给单片机B,
单片机B在接收到数据后将其发送给串口助手B;反之亦然
*********/
#include<reg51.h>
#include<intrins.h>
sbit SCK=P2^5;
sbit SDI=P2^6;
sbit SDO=P2^7;
void Delay5us()
{
_nop_();
_nop_();
}
void SPI_write(unsigned char DATA0) //SPI发送
{
int i;
for(i=0;i<8;i++)
{
SCK=0;
if(DATA0&0x80)
{
SDO=1;
}
else
{
SDO=0;
}
SCK=1;
DATA0<<=1;
Delay5us();
}
}
unsigned char SPI_read() //SPI接收
{
unsigned char DATA1=0x00;
int i;
for(i=0;i<8;i++)
{
DATA1<<=1;
while(SCK==1);
while(SCK==0);
DATA1|=SDI;
}
return DATA1;
}
void UART_init() //串口初始化,波特率9600
{
PCON=0x80;
SCON=0x50;
TMOD=0x20;
TL1=0xfa;
TH1=0xfa;
TR1=1;
ES=1;
EA=1;
}
void UART() interrupt 4
{
if(RI==1)
{
RI=0;
SPI_write(SBUF);
}
while(TI==0);
TI=0;
}
void main()
{
UART_init();
while(1);
{
SBUF=SPI_read();
}
}
虚拟串口由VSPD生成两对:COM1和COM2 COM3和COM4
在proteus中,串口部件P1与COM2连通,串口部件P2与COM4联通
两个串口助手中,其中一个串口助手与COM1连通,另一个则与COM3连通
|
|