2019-07-18 14:37发布
shanshushan0 发表于 2015-5-31 22:52 void send_command(unsigned int command) { unsigned char i;
shanshushan0 发表于 2015-5-31 22:00 void send_command(unsigned int command) { unsigned char i;
那年冬天血 发表于 2015-6-1 13:15 if(temp&0x8000)这个是什么意思?0X8000代表什么?求层主解释
那年冬天血 发表于 2015-6-1 16:58 谢谢我感觉我SPI时序图有点没搞懂的
最多设置5个标签!
{
unsigned char i;
unsigned int temp;
temp=command;
for(i=0;i<16;i++)
{
SCLK_1;
if(temp&0x8000)
SDATA_1;
if(!(temp&0x8000))
SDATA_0;
SCLK_0;
temp=temp<<1;
}
SCLK_1;
}
楼主可以研究一下我写的这段程序,其中DATA_1或DATA_0是某个I/O口输出高电平还是低电平,这就包含了要发送的数据信息。。而SCLK_1或SCLK_0是时钟信号,根据数据接收端是上升沿接收数据还是下降沿接收数据用I/O口模拟出上升或下降沿。。。望采纳。祝楼主成功 最佳答案
谢谢,我去研究研究
if(temp&0x8000)这个是什么意思?0X8000代表什么?求层主解释
额……我用的MCU是16位的,所以是0X****,而不是0X**。。if(temp&0X8000)这句话是为了检测temp变量的最高位是0还是1,如果是1,那么if判断语句为真,就会发送高电平数据;如果最高位是0,那么if判断语句为假,转而执行else语句,发送低电平数据。因为是16位数据,所以temp每次左移一位共需左移16次才能把一个完整的数据发送完成,这就是for循环语句中16的来源。。。
需要注意的是这段程序是以数据高位先发送为准则的,如果要先发送低位,那么if语句要改成if(temp&0X01),数据左移也要改成右移。
嗯。。你得先看明白时序图。。还有就是数据发送速率不要超过接收器件的最高通信速率。。
一周热门 更多>