单片机程序设计实践教程第20章红外数据传输.pptVIP

单片机程序设计实践教程第20章红外数据传输.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机程序设计实践教程第20章红外数据传输

第二十讲 红外数据传输 20.0 项目演示效果 20.1 项目目标设计 20.2 项目任务 20.3 系统板上硬件连线 20.4 程序流程图 20.5 C语言源程序(略) 20.6 系统构成和程序分析 20.7 项目扩展任务 20.6.5 SPI通信的程序实现 上节已经介绍过,向MAX3100写入控制指令0xe48e 用到了max3100drv(0xe48e)语句,该函数的原型为uint max3100drv(uint x),完成STC89C52RC单片机与MAX3100的SPI通信功能,本项目中给出的C语言源程序完全是根据MAX3100数据手册的SPI时序图编制,这里将结合SPI时序图对相关代码进行介绍和分析。 uint max3100drv(uint x) //MAX3100的SPI通信驱动函数,根据MAX3100数据手册SPI时序图编制 { uint i; uint y=0; //从MAX3100将要接收的数据赋初值 nCS3100=0; DOUT3100=1; SCLK3100=0;DIN3100=1;y=0; //SPI通信起始条件 i=0x8000; //SPI通信传送16位的计数值 while(i) //i是否为0 { DIN3100=(bit)(xi); //SPI通信传送16位的计数值 y=1; //接收数据左移1位 SCLK3100=0; //SPI时钟下降沿更新一次数据 SCLK3100=1; //SPI时钟上升沿MAX3100采集DIN3100信号、发送DOUT3100信号 y|=(uint)DOUT3100; //将采集到的DOUT3100存入y中 i=1; //计数值右移一位,直到计满16次 } DOUT3100=1;SCLK3100=0; DIN3100=1; nCS3100=1; //SPI通信结束条件 return(y); //将从MAX3100中读到的数返回 } 从图20-8所示的MAX3100的SPI通信时序图可以看出,SPI通信方式的特点是主控制器STC89C52RC单片机对MAX3100写1位的同时,接收从MAX3100传过来的1位,数据位的发送和接收主要体现在同步时钟信号SCLK的上升和下降沿时刻。图中的标记①表示在SPI时钟上升沿,MAX3100采集已被主控制器放置在DIN引脚的DIN3100信号;标记②表示这之后MAX3100发送的DOUT3100信号才应被主控制器读入;标记③表示SPI时钟下降沿将更新一次DIN3100和DOUT3100数据位。 参照MAX3100的SPI通信时序图及以上解释,可以较为容易地理解函数uint max3100drv(uint x)的含义,函数体中的变量y是DOUT3100的返回值,是按位从MAX3100读回的数据。 图20-8 MAX3100的SPI通信时序图 20.6.6 红外发送程序分析 红外发送程序中,main(void)函数的无限循环while(1)主要完成将ZLG7290键盘显示芯片获取的被压键值通过MAX3100的红外模式传送出去,引入以下相关源程序: KeyValue=0xAA; //键值赋初值 … while(1) //无限循环 { DispHexValue(0, KeyValue); //用十六进制形式在数码管上显示按键值 max3100drv(0x8000|KeyValue); //将键值通过MAX3100的红外模式进行发送 … } KeyValue就是ZLG7290获取的键值,程序中的函数max3100drv(0x8000|KeyValue)实现将键值通过MAX3100的红外模式进行发送。根据表20-3,若实现主控制器向MAX3100写数据,则必须与写控制字一样,也要写入16位格式的数据。0x8000与KeyValue相或后,低8位是将要发送的数据,高8位为80。 结合表20-3,其中D15和D14位必须分别为1和0,起指令标识的作用。D10为0表示MAX3100发送允许、D9为0表示“请求发送”输出端控制位置1、D8为0

您可能关注的文档

文档评论(0)

sandaolingcrh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档