chapter 10 嵌入式组件及模块开发.pptVIP

  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文档。上传文档
查看更多
* 6 模拟量输入 模拟输入硬件结构 * 6 模拟量输入 读取A/D值的方法1-慢速的A/D转换器件 (1)选择需要进行模数转换的通道; (2)触发进行模数转换 (3)延迟一段时间,延迟的时间大于或等于模数转换的时间加上信号在模数转换器保持稳定的时间 (4)读取模数转换的值 (5)把读取的值提交给应用程序 * 6 模拟量输入 Unsigned16 adc_input(Unsigned8 channel) { /* to do: 操作模拟多路开关,选择模数转换的通道 */ … /* 延时,等待模拟信号在模数转换器的输入端稳定 */ … /* 启动模数转换*/ … /*延时/查询,等待模数转换的结束*/ … /* 读取模数转换的结果把返回给调用者*/ … } * 6 模拟量输入 方法2:利用模数转换器的结束信号来通知用户-中断方式 Unsigned16 adc_input (Unsigned8 channel) { /* 选择要读取的输入通道*/ /* 延时,等待模拟多路开关输入信号的稳定*/ /* 启动模数转换*/ /* 等待信号量SemaAD or 超时 */ if (超时){ /*模数转换出错处理;*/ } else{ /*读取转换的结果并返回调用者*/ } } void IsrAD() { /* 发出SemaAD(模数转换结束信号)*/ } * 6 模拟量输入 方法3:A/D转换的速度比较快-直接在程序中读取 Unsigned16 adc_input(Unsigned8 channel) { /*选择模拟输入通道*/ /*延时,等待模拟信号在模数转换器的输入端稳定*/ /*启动模数转换工作*/ /*检测是否转换完成,如果完成则读取转换结果*/ … /*把转换的结果返回给调用程序*/ } * 6 模拟量输入 关于移植性的考虑 组件化方法把A/D转换的细节隐藏在组件的内部。 关于A/D的精度:目前的模拟转换器的精度有8位、10位、14位等,甚至有20位、24位或更高。 为了将来技术的发展,可以把转换结果表示成32位,在一定的时期内足够用了,对于小于32位的模数转换器,低位表示转换的结果,高位用0填充,最高位可以作为符号位。 * 模块与接口函数 模块文件 adc.c adc.h 主要函数 adc_init() adc_input() * 7模拟量输出 D/A的环节 数模转换器 滤波器 放大器 执行器/驱动器 * 7模拟量输出 主要接口函数 dac_init() void dac_output(Unsigned8 channel, Unsigned32 value); 模块文件 dac.c dac.h * 7模拟量输出 使用例子 void UserTask() { Unsigned32 temperature; /* 数据来源和处理,得到数据temp*/ dac_output(0,temp);/*此时电压表的指针指示相应的模拟量*/ … } * 8 开关量输入/输出 * 8 开关量输入/输出 开关量通常是1位 计算机处理的数据以字节为单位 接口函数的实现方法 直接以字节为单位处理开关量(8位/字节) void dio_write(Unsigned address, Unsigned8 value); Unsigned8 dio_read(Unsigned address) 包装以位为单位处理开关量 Unsigned8 dio_read(Unsigned16 channel); void Unsigned8 dio_write(Unsigned16 channel, Unsigned8 On_Off); * 8 开关量输入/输出-实现方式比较 方式(1)-字节 优点 程序的代码量小,执行的速度快, 缺点 程序设计的不直观,程序的可读性不好。 方式(2)-位 优点 可移植性好,把开关进行了抽象化,屏蔽了开关量操作的细节; 程序的可读性好 缺点 程序的代码量比较大,程序的执行时间稍长。 由于现代处理器的速度提高和存储器的空间比较大,方式(2)带来的问题可以完全克服。 * 8 开关量输入/输出-实现方式比较 void UserTask() { … if(dio_read(10))==ON) dio_write(20,ON); else dio_write(20,OFF); … } * 模块文件与主要函数 dio.c dio.h 主要函数 Dio_init() //初始化 dio_read() //读IO dio_write()

文档评论(0)

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

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

1亿VIP精品文档

相关文档