完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void SPI_Init()
{ M_CS_out; M_SCK_out; M_SDO_out; M_SDI_in; } //向从机写一个8位的数据,同时读出30个bit位,前两个bit位不读。 long shiftbit(uchar nextch) { uchar i=0; long data=0; M_CS_L; //M_SDO_L;DelayNus(2); while(M_SDI_IN); for(i=0;i<2;i++) { if(nextch&0x80) M_SDO_H; else M_SDO_L; M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP();_NOP();_NOP();_NOP(); M_SCK_L;//DelayNus(2); nextch<<=1; } for(i=0;i<8;i++)//多写的两个bit位 don't care { if(nextch&0x80) M_SDO_H; else M_SDO_L; nextch<<=1; if(M_SDI_IN) data |= 1; data<<=1; M_SCK_H;DelayNus(2); M_SCK_L; } for(i=0;i<8;i++) { if(M_SDI_IN) data |= 1; data<<=1; M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP(); M_SCK_L; } for(i=0;i<8;i++) { if(M_SDI_IN) data |= 1; data<<=1; M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP(); M_SCK_L; } for(i=0;i<6;i++) { if(M_SDI_IN) data |= 1; data<<=1; M_SCK_H;DelayNus(2);//_NOP();_NOP();_NOP(); M_SCK_L; } DelayNus(2); M_CS_H; return data; } 以上是基于430的SPI程序,此程序在430单片机里读到的数据都是多一个bit位,但是用逻辑仪观察的时候数据都是正常的,所以不知道是什么情况,希望前辈们指点指点。多谢大家。 |
|
相关推荐
1个回答
|
|
问题已解决,SPI有四种模式,选对模式就OK了,之有不太理解这个东西,呵呵
|
|
|
|
只有小组成员才能发言,加入小组>>
3035个成员聚集在这个小组
加入小组2931 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3608 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2344 浏览 1 评论
4809 浏览 1 评论
2574 浏览 1 评论
1332浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3611浏览 2评论
2931浏览 1评论
1519浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 02:36 , Processed in 1.215292 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号