完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void send_command(unsigned int command)
{ 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),数据左移也要改成右移。 |
|
|
|
shanshushan0 发表于 2015-6-1 14:58 谢谢我感觉我SPI时序图有点没搞懂的 |
|
|
|
嗯。。你得先看明白时序图。。还有就是数据发送速率不要超过接收器件的最高通信速率。。 |
|
|
|
通信速率是怎么设定的?通过定义无线的寄存器吗? |
|
|
|
看你的MCU工作时钟频率多高了,,用I/O口模拟SPI通信的话不存在设置寄存器这一说。。 |
|
|
|
晶振是11.0592的, |
|
|
|
不错,可以看看
|
|
|
|
|
|
|
|
不错。。。。。。。。。。
|
|
|
|
只有小组成员才能发言,加入小组>>
物联网工程师必备:怎么选择不同的无线连接技术,本指南帮你忙!
3065 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3711 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3225 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
3758 浏览 1 评论
20278 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
389浏览 2评论
371浏览 2评论
2792浏览 1评论
446浏览 1评论
499浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-18 11:49 , Processed in 0.741086 second(s), Total 69, Slave 63 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号