【发布时间】:2016-05-30 13:11:57
【问题描述】:
我正在尝试使用 Microchip 的 PIC18F452 设置我的 SPI 通信,以便向总线发送一个 8 字节数组(= 一次传输所有字节)。这是我的数组的示例:
array 0x0080 byte[8]
array[0] 0x0080 0x01
array[1] 0x0081 0x01
array[2] 0x0082 '\0'
array[3] 0x0083 0x01
array[4] 0x0084 0x01
array[5] 0x0085 0x01
array[6] 0x0086 0x01
array[7] 0x0087 '\0'
这些值来自输入信号(音频文件、时钟等)并在 PORTDbits.RD0 上接收以完成数组。值始终为 1 或 0,仅此而已。
首先,我首先使用 putcSPI() 发送一个字节。当我完成数组时,我向 SPI 发送一个字节,结果是匹配的。
然后,我尝试使用 putsSPI() 一次发送所有字节,如下所示:
/// SEND DATA TO SPI
SPI_INT = 0; // Enable SS
putsSPI(array);
SPI_INT = 1; // Disable SS
delay_ms(); // Delay
但是当我遇到一个 0 时帧的传输停止了(被认为是数组的结尾,所以这是正常的)。而且,我的框架分为块。
例如,对于上面显示的数组,我在 SPI 总线上有“1 1”,然后,下一个值来自随后的帧
话虽如此,我想将数据从二进制转换为十六进制(或整数),然后将其发送到 SPI。 我尝试了这里找到的几种转换方法,但直到现在都没有成功。
有没有办法将整个数组直接发送到总线,或者有没有人知道如何在这种特殊情况下执行转换?
提前非常感谢!
【问题讨论】:
-
为什么要发送 8 个字节,每个字节只能包含两个值之一?您可以轻松地将值打包到一个字节中。
-
用完全不同的方法解决了问题。稍后将发布我使用的解决方案
-
如果
putsSPI需要一个以空字符结尾的字符串,它显然只会发送直到第一个空字符的字符。为什么不一次只发送一个字节?正如@EOF 已经写的那样,8 位是一个字节,您确定不需要只向收件人发送一个字节吗? -
@Groo 感谢您的回答。正如我在之前的评论中所说,我已经通过从头开始用新想法解决了我的问题
-
@Tealyf:我看到了,但这与问题有很大不同。从一个 8 字节数组到 2 个字节(16 位),它们是“使用计数器修改的”(不是从输入信号接收到的吗?)。您的代码不起作用的原因是因为
putsSPI停止在\0,而WriteSPI只是向前发送字节,所有其他声明和位操作都无关紧要。