完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在做SPI的双向通信,采用两个PIC16F1828,现在的问题是从机能收到主机发送的数据,但是主机收到的从机发送的顺序却有问题。比如主机发送的数据是0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,从机能按顺序收到主机发送的数据。从机发送的数据是0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,但是主机收到的数据却是0x10,0x11,0x17,0x01,0x02,0x03,0x16,0x17。有时候主机收到的数据顺序又是正确的,不知道是什么原因,请大神指点指点~
主机配置发送接收程序 void SPI_INIT(void)//SPI的配置 { SPI_SCK_OUT; SPI_SDO_OUT; SPI_SDI_IN; SPI_nSS_OUT; ANSELB=0X00; SSP1STAT=0X80; SSPCON=0X32; SPI_nSS=1; INTCON=0XC0; PIE1=0X08;//开MSSP中断 PIR1=0X00;//清零MSSP中断 } void SPI_WRITE(uchar data) { uchar back; SPI_nSS=0; DELAY(20); SSP1BUF=data; back=SSP1BUF; SPI_nSS=1; DELAY(20); } //中断方式接收 void interrupt mssp(void) { if(SSP1IF) { SSP1IF=0; stage4=stage3; stage3=SSPBUF; if((stage4==0x10)&&(stage3==0x11)) { begin=1;j=0; } if(begin==1) { receive_spi[j++]=stage3; if(j==8) { begin=0;j=0;send=1; } }}} 从机配置发送接收程序 void SPI_INIT(void) { SPI_SCK_IN; SPI_SDO_OUT; SPI_SDI_IN; SPI_nSS_IN; ANSELB=0X00; ANSELC=0X00; SSP1STAT=0X00; SSPCON=0X34; INTCON=0XC0; PIE1=0X08;//开MSSP中断 PIR1=0X00;//清零MSSP中断 } //从机SPI发送 void SPI_WRITE(uchar data) { uchar back; DELAY(20); SSPBUF=data; back=SSPBUF; DELAY(20); } //中断方式接收 void interrupt mssp(void) { if(SSP1IF) { SSP1IF=0; stage4=stage3; stage3=SSP1BUF; if((stage4==0x00)&&(stage3==0x01)) { begin=1;j=0; } if(begin==1) { receive[j++]=stage3; if(j==8) { begin=0;j=0;send=1; } }}} |
|
相关推荐
20个回答
|
|
这么长啊
|
|
|
|
云汉达人
感觉你的主机中断接收函数是不是有问题? stage4=stage3; stage3=SSP1BUF; 接收的时候为什么要这么写一下呢? stage4=stage3; 这样的话,如果第一次,stage3没有赋值的话,初值应该是0,那么stage4不是等于0了么? 那你的if((stage4==0x10)&&(stage3==0x11))岂不是不成立?是不是就会收不到东西呢? 不知道你的stage3在别的地方有没有设初值,这里确实看不出来…… |
|
|
|
用逻辑分析仪看一下时序或者单步调试一下看哪部分出问题。
|
|
|
|
嗯,主要是为了对比主从机的不同好分析原因嘛,所以都给贴上来了~
|
|
|
|
没有设初值,这个是一二次收到的数据用来判断的,符合才开始接收,从机也是这样写的,收到的数据就没有问题~
|
|
|
|
这个时序看不出吧,毕竟能收到数据,只是数据的顺序有问题。
|
|
|
|
如果不用中断该如何接收数据?查询法不懂,能不能讲详细点?中断里是有自己的协议,按485/232的套路写的~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在while(1)里查SSPIF的状态来收数据,一个都收不到了,不知道是不是查这个标志位?
|
|
|
|
还没有呢,由于没有过压保护,火气大把板子烧了,只好重新焊从头开始调了~
|
|
|
|
也只能是这样了,贴出来就是怕自己的思路走进死胡同了,集思广益嘛~
|
|
|
|
|
|
|
|
|
|
|
|
我试了一下,主机发送的数据从20开始从机也是能正常接收数据的~
|
|
|
|
围观一起学习。
|
|
|
|
只有小组成员才能发言,加入小组>>
702 浏览 0 评论
1111 浏览 1 评论
2476 浏览 5 评论
2811 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2654 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
658浏览 9评论
666浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
788浏览 6评论
633浏览 5评论
677浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 03:27 , Processed in 1.324076 second(s), Total 86, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号