您当前的位置:五五电子网电子知识单片机-工控设备源码-程序查表程序设计 正文
查表程序设计

查表程序设计

点击数:7195 次   录入时间:03-04 11:39:48   整理:http://www.55dianzi.com   源码-程序
      在单片机应用系统中,查表程序是一种常用的程序。利用它能避免复杂的运算或转换过程,可完成数据补偿、修正、计算、转换等各种功能,具有程序简单、执行速度快等优点。
  
  查表就是根据自变量z,在表格中寻找y,使y=f(x)。在单片机中,数据表格一般存放于程序存储器内,AT89S51单片机在执行查表指令时,发出读程序存储器选通脉冲PSEN。在指令系统中,为用户提供了两条极为有用的查表指令:
  720
  这两条指令的功能完全相同,但在具体使用上有一些差别。
  
  指令“MOVC  A,@A+DPTR”完成把A中的内容作为一个无符号数与DPTR中的内容相加,所得结果为某一程序存储单元的地址,然后把该地址单元中的内容送到累加器A中。DPTR作为一个基址寄存器,执行完这条指令后,DPTR的内容不变,仍为执行加法以前的内容。
  
  指令“MOVC A,@A+PC”以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加后所得的数作为某一程序存储器单元的地址,根据地址取出程序存储器相应单元中的内容送到累加器A,这条指令执行完以后,PC的内容不发生变化,仍指向该查表指令的下一条指令。这条指令的优点在于预处理较少且不影响其他特殊功能寄存器的值,所以不必保护其他特殊功能寄存器的原先值。这条指令的缺点在于该表格只能存放在这条指令的地址X3X2XIXO以下OOH~FFH之中,即只能存放在地址范围X3X2XIXO+1~X3X2XIXO+lOOH中,这就使得表格所在的程序空间受到了限制。
  
  下面举例说明查表指令的用法以及计算偏移量时应该注意的问题。
  
  【例4-3】设计一子程序,功能是根据累加器A中的数z(0~9之间)查x的平方表y,根据z的值查出相应的平方y。本例中的x和y均为单字节数。
  730
  第一条指令“ADD A,#OIH”的作用是A中的内容加上“OIH”,“OIH”即为查表指令与平方表之间的指令所占的字节数。这里的指令为“RET”,为一字节的指令。加上“OIH”后,可保证PC指向表首,累加器A中原来的内容反映的仅是从表首开始向下查找多少个单元。
  
  上面的例子中,在进入程序前,A的内容在00~09H之间,如A中的内容为02H,它的平方为04H,依此类推,可以根据A的内容查出x对应的平方。
  
  “MOVC A,@A+DPTR”这条指令的应用范围较为广泛,一般情况下,大多使用该指令。使用该指令时不必计算偏移量,优点是表格可以设在64KB程序存储器空间内的任何地方,而不必像“MOVC A,@A+PC”那样只设在PC下面的256个单元中,所以使用较方便。该指令的缺点在于如果DPTR已被使用,则在进入查表以前必须保护DPTR,并且结束以后恢复DPTR,例4-3的子程序可改成如下形式:
  731
  在一些实际的查表问题中,有时z为单字节数,y为双字节数。来看下面的例子。
  
  【例4-4】设有一个巡回检测报警装置,需对16路(x)输入进行检测,每路有一个最大允许值(y),为双字节数。装置运行时,需根据测量的路数(x),查表找出对应该路的最大允许值(y),看输入值是否大于最大允许值,如果大于就报警。
  
  取路数为x(0≤z≤15),y为最大允许值,放在表格中。设进入查表程序前,假设路数z已放于R2中,查表后该路的最大允许值y放于R3R4中。查表的程序如下:
  740
  上述查表程序是有限制的,表格长度不能超过256B,且表格只能存放于“MOVC A,@A+PC”指令以下的256个单元中,如果表格的长度超过256B,且需要把表格放在64KB程序存储器空间的任何地方,此时应使用指令“MOVC A,@A+DPTR”,并对DPH、DPL进行运算,求出表格的目的地址。
  
  【例4-5】在一个以AT89S51为核心的温度控制器中,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由A/D转换为10位二进制数。测得的不同温度下的电压值数据构成一个表,表中温度值为y(双字节无符号数),x(双字节无符号数)为电压值数据。设测得的电压值x放人R2R3中,根据电压值z,查找对应的温度值y,仍放入R2R3中。
  
  参考程序如下:
  741
  以上程序中,由于使用了指令“MOVC A,@A+DPTR”,表中TAB2可放入64KB程序存储器空间的任何位置,此外表格的长度可大于256B。


本文关键字:程序设计  源码-程序单片机-工控设备 - 源码-程序