单片机的查表程序.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在 单片机 开发过程中 .一些非线性的控制过程 .最适合做一个表格来 . 时时改变系统的参数 .达到控制的目 的.最常的如产生正弦的的程 .就是建一个大的数组时时改变输出的 8 位字节送给外部 DA. 由 DA 生成一个完 整的正弦波 .当然了 .LED 显示也是一个例子 .通过建一个数组来实现段码的点亮点灭 .下面就是一个 LED 表 -- -digits[0] #define SEG_a 0x01 #define SEG_b 0x02 #define SEG_c 0x04 #define SEG_d 0x08 #define SEG_e 0x10 #define SEG_f 0x20 #define SEG_g 0x40 #define SEG_dot 0x80 unsigned char digits[10] = { (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), // 0 (SEG_b|SEG_c), // 1 (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), // 2 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), // 3 (SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), // 4 (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), // 5 (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 6 (SEG_a|SEG_b|SEG_c), // 7 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 8 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g) // 9 }; C 查表就太简单了 temp2 = digits[ show_data[i] ]; 一句搞定 ,C 中还有一个 switch 语句也是一个 很好的用查表语句 C51 汇编就相对麻烦一点 .不过 MCS-51 指令系统中有专用的查表指令: MOVC A,@A+DPTR 和 MOV A,@A+PC. MOVC A,@A+DPTR 指令, DPTR 作为基址寄存器时,其值为 16 位而且可根据需要设计,故可用于 在 64KROM 范围内查表。编写查表程序时,首先把表的首址送入 DPTR 中,再将要查找的数据序号(或 下表值)送入 A 中,然后就可以使用该指令进行查表操作,并将结果送累加器 A 中。 MOVC A,@A+PC 指令, PC 作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下 的 256 个字节范围内。 编写查表程序时, 首先把查表数据的序号送入 A 中,再把从查表指令到表的首地址 间的偏移量与 A 值相加,然后使用该指令进行查表操作,并把结果送累加器 A 中。 下面是把内部 RAM 30H-37H 单元中的十六进制数依次转换为 ASCII 码,并存入内部 RAM 60H-6F H 单元之中。用查表法编写程序。 分析:由于十六进制数是从 0 ~F ,对应的 ASCII 码为 30H ~46H ,每一个单元存放的 16 进制数,转换

文档评论(0)

***** + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档