STC单片机的硬件SPI问题

各位大侠,这是我的源程序:stc12c5410,硬件SPI,主机程序存在一个问题,就是主机可以对从机发送数据,从机可以接收到;但是,从机返回一个数据给主机,主机接受不到,... 各位大侠,这是我的源程序:stc12c5410,硬件SPI,主机程序
存在一个问题,就是主机可以对从机发送数据,从机可以接收到;
但是,从机返回一个数据给主机,主机接受不到,连中断也没有中断,查询方式也不行,不知为何,请教各位,不胜感激!
#include"stc12c5410ad.h"
#include <string.h>

unsigned char bdata flags;

bit spi_packet ;

void spi_comm_init()
{

SPCTL = 0xFC; // SSIG,SPEN,DORD,MSTR,CPOL,CPHA,SPR1,SPR0。 1110,1100
SPSTAT = 0xC0; //清除中断
AUXR |= 0x08; //允许SPI中断ESPI = 1 0000,1000
EADC_SPI = 1; //IE允许SPI中断 EADC_SPI = 1
}

//向SPI口发送一个字符
void spi_send_comm(unsigned char ch)
{
EADC_SPI = 0; //关掉ADC_SPI共享中断
SPDAT = ch; //发送数据
while(!(SPSTAT & 0x80) ); //等待发送完毕 SPIF = 1
SPSTAT = 0xc0; //清除中断
EADC_SPI = 1; //打开中断
}

//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}

void adc_spi_interrupt() interrupt 5 //
{
SPSTAT = 0xC0;
bchar = SPDAT;
spi_packet = 1;
}

void init_serialcomm(void)
{ TMOD |= 0x20;
TH1 = 0xF6;
TL1 = 0xB0;
PCON |= 0x80; // SMOD=1
SCON = 0x50;
TR1 = 1; // 启动TR1
}

main()
{ unsigned char uart_data;
init_serialcomm();
spi_comm_init(); //初始化串口
spi_packet=0;
EA = 1;
while(1)
{ if(RI)
{
uart_data=SBUF;
RI=0;
spi_send_comm(uart_data);
send_char_com(uart_data);
}
if(spi_packet) //如果spi数标志已置位,就将读到的数从串口发出
{
spi_packet=0; //取数标志清0
send_char_com(bchar); //从串口发出

}
}

}
这个程序是根据STC给出的汇编测试程序改写成C语言的,我分别改写了主机和从机程序,就出现了以上问题,
但是下载汇编的主机可以跟我改写的从机进行很好的通信
但是改写的主机就是不能收到从机的数据
从机程序几乎和主机一样:
以下是从机的不一样的地方:
void spi_comm_init()
{
SPCTL = 0xEC;
SPSTAT = 0xC0;
AUXR |= 0x08; //允许SPI中断ESPI = 1 0000,1000
EADC_SPI = 1; //IE允许SPI中断 EADC_SPI = 1
}

main()
{ unsigned char uart_data;
init_serialcomm();
spi_comm_init(); //初始化串口
spi_packet=0;
EA = 1;

while(1)
{
if(spi_packet) //如果spi数标志已置位,就将读到的数从串口发出
{
spi_packet=0; //取数标志清0
spi_send_comm(0xBB); //从spi口发出
send_char_com(bchar); //从串口发出
}
}

}

问题已经解决了,呵呵,不过还是谢谢这问仁兄
展开
 我来答
意法半导体(中国)投资有限公司 2023-08-25
展开全部
上面那个人乱讲。所谓单片机,就是把微处理器,存储器和输入输出接口等部件集成在一个芯片上的单片式计算机。单片机主要的功能和应用场合还是控制,比如说微波炉的控制电路啦,空调的控制电路啦等,当然手机或者PDA等也会使用到单片机,不过不能说手机GBA,PDA就是单片机! 更专业的解答可联系意法半导体,产品服务:意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向.目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过1000个型号。谢谢!
做而论道
高能答主

2009-11-22 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
以下的设置,有没有毛病? 是不是 0xEC 才对?
void spi_comm_init()
{

SPCTL = 0xFC; // SSIG,SPEN,DORD,MSTR,CPOL,CPHA,SPR1,SPR0。 1110,1100
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式