完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嘿,伙计们,这次没有密码,没有复杂的东西。在向奴隶写入时,在主模式中简单的问题是:在发送字节ORSSPSTATE之前检查IFSSPSTAT.BF= 1是有效的。BF只用于从属模式或什么是正确的U?
以上来自于百度翻译 以下为原文 Hey guys this time no code no complex stuff . just simple question in master mode while writing to a slave is it valid to check if SSPSTAT.BF==1 before i send my byte or SSPSTAT.BF is just used in slave mode or what exactly Thank u |
|
相关推荐
19个回答
|
|
在主模式下,BF是在传输完成后设置的。您应该有一个单独的函数来将数据传输到/从从属服务器,它应该将发送数据写入SSPBUF,等待BF设置,然后读取SSPBUF(再次清除BF)。
以上来自于百度翻译 以下为原文 In Master mode, BF is set after a transfer completes. You should have a single function for transferring data to/from the slave. It should write the send data to SSPBUF, wait for BF to set, then read SSPBUF (which clears BF again). |
|
|
|
所有与主模式SPI有问题的人都试着不做上面的事情…
以上来自于百度翻译 以下为原文 Everyone who has trouble with Master mode SPI has tried to not do it as above... |
|
|
|
|
|
|
|
“仅接收模式”的评论几乎肯定是错误的,因为PIC与数百个其他PICS具有相同的SPI外设。SSPIF标志在传输后与BF标志同时设置,但如果要监视该标志,则必须手动清除该标志。
以上来自于百度翻译 以下为原文 The "Receive mode only" comment is almost certainly wrong, as that PIC has the same SPI peripheral as hundreds of other PICs. The SSPIF flag is set at the same time as the BF flag after a transfer, but you then have to manually clear it if you want to monitor that flag. |
|
|
|
在从属模式下,SSPSTAT.BF的操作是什么?
以上来自于百度翻译 以下为原文 and also in slave mode what is the operation of SSPSTAT.BF |
|
|
|
如果你的话是对的,我应该收到5秒,然后许多无用的字节,然后再次F0,但我犹大收到0F只是OnSeo有一些东西在你的话,我想
以上来自于百度翻译 以下为原文 if ur words are right i should receive 0F then 5 second then many useless byte then again 0F but i judt receive 0F for just once so there is something in ur words i think //######################## SPI Master code PIC 18f6420. 4MHZ clock Crystal oscillator. HS oscillator Mode############################ volatile unsigned short int transmissionOrReceptionFlag=1; volatile unsigned short int dataByteSend=0; volatile unsigned short int dataBytereceive=0; //########################################################################################### void initializeSPI(void) { SSPCON1.SSPEN = 0; TRISC.B5=0; TRISC.B3=0; TRISA.B5=1; SSPSTAT=0b01000000; SSPCON1=0b00010010; INTCON = 0b00000000; INTCON.PEIE = 1; INTCON.GIE = 1; PIE1.SSPIE = 1; PIR1.SSPIF = 0; IPR1.SSPIP=1; SSPCON1.SSPEN = 1; } //########################################################################################### void interrupt() { if(PIR1.SSPIF == 1) { transmissionOrReceptionFlag=1; PIR1.SSPIF=0; } } //########################################################################################### void SPITrasmissionWait() { unsigned short int dummy; while(transmissionOrReceptionFlag==0||SSPSTAT.BF==1) { if(SSPSTAT.BF==1){dummy=SSPBUF;} } }//########################################################################################### void SPIReceptionWait() { while(transmissionOrReceptionFlag==0||SSPSTAT.BF==0){} } //########################################################################################### void SPIMasterWriteByte(unsigned short int dataByte) { dataBytereceive=SSPBUF; SPITrasmissionWait(); SSPBUF= dataByte; transmissionOrReceptionFlag=0; } //########################################################################################### void SPIMasterReceiveByte() { SPIReceptionWait(); dataByteReceive=SSPBUF ; transmissionOrReceptionFlag=0; } //########################################################################################### void main() { TRISA.B0=0; initializeSPI(); Delay_ms(500); PORTA.B0=0; dataByteSend=0x0F; while(1) { //Delay_ms(2); SPIMasterWriteByte(dataByteSend); if(dataByteSend==0x0F){Delay_ms(5000);} //Delay_ms(100); dataByteSend++; if(dataByteSend==0xFF) dataByteSend=0; } } |
|
|
|
|
|
|
|
|
|
|
|
好的,因为你似乎只有一个PIN设置作为输入,而它们应该是2或3…
以上来自于百度翻译 以下为原文 ok, because you seem to have only one pin set as input, while they should be 2 or 3... |
|
|
|
在主SS引脚输入,但没有连接到任何thCSCL是输出PISDI左外设,如数据表输出是什么,你还想输入什么?
以上来自于百度翻译 以下为原文 in master ss pin input but not connected to anything scl is output pin sdi left for the peripheral as say datasheet sdo is output what else u want to be input? |
|
|
|
我以为你是奴隶,所以SCK作为输入。如果你是主人,那么你可能不会驾驶CS
以上来自于百度翻译 以下为原文 I assumed you were the slave, hence SCK as input. If you're the master, then you may not be driving CS |
|
|
|
|
|
|
|
POST 4表示你有一个18F4620,但是你的代码是18F64。哪个正确?
以上来自于百度翻译 以下为原文 Post #4 says you have a 18f4620 but your code says 18f6420. Which is correct? |
|
|
|
对不起,我在代码中写的错误。它是18F4620
以上来自于百度翻译 以下为原文 sorry for the mistake i wrote in the code .. it is 18f4620 |
|
|
|
假设它是一个PIC16F4620,试试这个代码,我HTKink做你想做的事情。
以上来自于百度翻译 以下为原文 Assuming it is a PIC16F4620, try this code which I htink does what you were trying to do. //######################## SPI Master code PIC 18f6420. 4MHZ clock Crystal oscillator. HS oscillator Mode############################ //########################################################################################### void initializeSPI(void) { SSPCON1.SSPEN = 0; TRISC.B5=0; // RC5/SDO output TRISC.B3=0; // RC3/SCK output TRISC.B4=1; // RC4/SDI input SSPSTAT=0b01000000; // SMP=0, CKE=1 SSPCON1=0b00010010; // SSPEN=0, CKP=1,SSPM=0010(Master Fosc/64) PIE1.SSPIE = 0; // disabled SSPCON1.SSPEN = 1; } //########################################################################################### unsigned char spi_xfer_byte(unsigned char dat) { SSPBUF = dat; //start transfer while (SSPSTAT.BF == 0); //wait until transfer complete return SSPBUF; //read received data and return it. } //########################################################################################### void main() { unsigned char dataByteSend; unsigned char dataByteRecv; TRISA.B0 = 0; //RA0 output for CS signal initializeSPI(); Delay_ms(500); PORTA.B0=0; //assert CS dataByteSend=0x0F; while(1) { dataByteRecv = spi_xfer_byte(dataByteSend); //send and receive test data if(dataByteSend==0x0F) Delay_ms(5000); dataByteSend++; if(dataByteSend==0xFF) dataByteSend=0; } } |
|
|
|
一旦我从这个函数中删除了ssSTAT.bf=1,它就以我告诉你上面的方式工作得很好。但我想了解这个高炉钻头的作用。
以上来自于百度翻译 以下为原文 once i remove ||SSPSTAT.BF==1 from this function it works fine in the way i tell u above . but i want to understand the role of this BF bit void SPITrasmissionWait() { unsigned short int dummy; while(transmissionOrReceptionFlag==0||SSPSTAT.BF==1) { if(SSPSTAT.BF==1){dummy=SSPBUF;} } } |
|
|
|
我有从主到从数据发送的工作方式。我只想理解为什么这样的代码就像你说的BF和中断位一样,为什么它不工作,并且在上面的函数中进入无限循环。我删除这个部分它工作良好
以上来自于百度翻译 以下为原文 i have the working way in sending data from master to slave . i just want to understand why the code in that way as if u say BF is same as the interrupt bit , why doesnt it work and enter in infinite loop of while in the function above .. onces i remove this part it works fine |
|
|
|
不要尝试实现单独的发送和接收函数。这不是SPI是如何工作的。检查上面发布的代码。
以上来自于百度翻译 以下为原文 Do NOT try to implement separate send and receive functions. That is not how SPI works. Examine the code I posted above. |
|
|
|
如果奴隶没有向我发送任何东西,我为什么要把所有东西放在一个函数里?如果奴隶寄给我一个字节而不给她写信怎么办?这是不可能的,如果我将程序从奴隶PIC也
以上来自于百度翻译 以下为原文 what should i read if the slave didnt send anything to me why should i put all in one function ? what if slave send me a byte without writing to her ? isnt this possible if i will program the slave pic too |
|
|
|
只有小组成员才能发言,加入小组>>
5160 浏览 9 评论
1998 浏览 8 评论
1927 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3170 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2225 浏览 5 评论
729浏览 1评论
613浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
503浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
628浏览 0评论
526浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:37 , Processed in 1.491812 second(s), Total 115, Slave 98 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号