编写单片机的查表程序

发布者:cloudsousou6最新更新时间:2018-05-11 来源: eefocus关键字:单片机  查表程序 手机看文章 扫描二维码
随时随地手机看文章

对于复杂的计算,单片机的速度显得偏慢。最好的办法是由人工事先算出全部的结果,依次存放在ROM中,程序执行时,直接从ROM中查出结果即可。


51单片机有两条查表指令:

    MOVC  A,  @A + PC
    MOVC  A,  @A + DPTR

前一条可以不用 DPTR,但是其中有个“偏移量”颇为难算,因为涉及到指令字节数的基本概念、查表等,令很多人头痛。
做而论道针对这个问题,研究出一个自动计算偏移量的方法,可以避免烦琐的人工计算过程。


下面是做而论道回答的一个网上的题目:

在 30H ~ 39H中,预先存入数据为 1,3,5,7,9,2,4,6,8,10。
利用 MOVC A, @A + PC 指令编写一查平方表程序,将片内30H ~ 39H内的数求出平方后送入40H ~ 49H单元。


做而论道编写的程序如下:
;-------------------------------------------
    org  0000h

    mov  30h, #1          ;先存放一些数据
    mov  31h, #3
    mov  32h, #5
    mov  33h, #7
    mov  34h, #9
    mov  35h, #2
    mov  36h, #4
    mov  37h, #6
    mov  38h, #8
    mov  39h, #10

    call SQRT            ;调用子程序,求出上述10个数字的平方
                         ;存放在40H开始的单元部分略
    sjmp $
;-------------------------------------------
;用查表法求平方的子程序
SQRT:
    MOV   R0, #30H       ;源数值起始地址
    MOV   R1, #40H       ;目标起始地址
    MOV   R2, #10        ;共有10个数字
LOOP:
    MOV   A, @R0
    ADD   A, #S_TAB - ($ + 3)  ;自动计算偏移量
    MOVC  A, @A + PC           ;查表,求出平方
    MOV   @R1, A
    INC   R0
    INC   R1
    DJNZ  R2, LOOP
    RET
;-------------------
S_TAB:
    DB    0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196
;-------------------------------------------
;完


提问者对于答案的评价:恩恩 很对的 不过  #S_TAB - ($ + 3)这个什么意思啊?


========================================


算法说明:


在 S_TAB 开始,用 DB 伪指令存放了一系列的《平方数字》。--百度排版很差,引号,显示的太小,用书名号代替。

那么,从 S_TAB 开始数,第 0 个字节,就是 0 的平方,第 1 个字节,就是 1 的平方,……,第 14 个字节,就是 14 的平方。

如果,查表指令 MOVC  A, @A + PC 中的 PC 等于 S_TAB 就好了,A 是几,就能从表中,查出几的平方。

呵呵,这有点像《立定跳远》,站在跳板上,有多大的劲,就跳多远。


而实际上,执行查表指令 MOVC  A, @A + PC 时,PC,它并不等于 S_TAB。

怎么办 ?想想跳远就知道,加上助跑,就可以了。助跑的步数或米数,大家应该都会算。


在执行查表指令之前,把 S_TAB 和执行查表指令时的 PC 之差,算出来,加入到 A 中,即可。

这个数字,称为偏移量,加入到 A 中,这就相当于《助跑》。


计算这个偏移量,就是要统计 S_TAB 和执行查表指令时的 PC 之间的字节数。

如果不熟悉机器语言,由人工计算偏移量,是相当难的。

而且,如果修改了这其中的指令,还要重新计算,非常的麻烦。


幸好,做而论道发明了自动计算偏移量的方法。


程序中,下面的两行:

    ADD   A, #S_TAB - ($ + 3)  ;2字节
    MOVC  A, @A + PC           ;1字节

即完成了自动计算偏移量、查表的工作。


程序中的算式为:#S_TAB - ($ + 3),也可以写成:#S_TAB - $ - 3。


下面是各个部分说明:

$:代表 ADD 指令所在的当前地址;

$ + 3:即执行查表指令时的 PC 数值,加 3,是这两条指令共占用了三个字节;

S_TAB - ($ + 3):求出表格首地址与查表时地址的差值;


按照单片机教材上介绍的方法,使用 MOVC  A, @A + PC 指令,是要人工计算《查表指令与表首之间地址的差值》的。

用过这种方法的人,都知道有多难。

所以,绝大多数人,都宁可浪费一个 DPTR,也不愿意计算这个差值。


而做而论道研究出来的这个公式,有理论,有实践方法,极大的方便了单片机编程人员,值得广泛推广。


关键字:单片机  查表程序 引用地址:编写单片机的查表程序

上一篇:利用单片机的定时器中断,周期性输出矩形波
下一篇:52单片机定时器/计数器编程汇总

推荐阅读最新更新时间:2024-03-16 16:02

单片机实验----控制数码管的动态显示
本次实验任务如下: 一、动态显示与静态显示的比较 1.什么是动态显示 驱动电路可以使数码管正常显示数据,数码管的驱动方式有两种:动态显示驱动和静态显示驱动。 动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起。 另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。 当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。 2.什么是静态显示 静态显示驱动静态驱动也称直流驱动。 静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。 3.优缺点对比 二、
[单片机]
<font color='red'>单片机</font>实验----控制数码管的动态显示
瑞萨蝉联“中国MCU市场年度成功企业”
3月9日-10日,在上海召开的“2010年中国半导体市场年会IC Market China 2010”上,株式会社瑞萨科技(以下简称瑞萨)以2009年经营业绩优异、企业成长迅速、发展前景良好、产品与技术创新性强等四大优势,获得“2009年中国MCU市场年度成功企业”殊荣。这已是瑞萨连续第二年荣膺此项行业内的权威奖项。 由中国半导体行业协会(CSIA)、中国电子信息产业发展研究院(赛迪集团)与上海市集成电路行业协会(SICA)共同主办的中国半导体市场年会,作为一年一度中国半导体行业内的重要市场活动,其专业性与权威性不言而喻。在“洞悉变革趋势,把握复苏契机”的主题下,本次年会所颁发的奖项也从另一个侧面肯定了瑞萨在2009
[单片机]
MSP430单片机低功耗控制与系统工作模式详解
CPU内状态寄存器SR中的SCG1、SCG2、OscOff和CPUOff位是 重要的低功耗控制位。只要任意中断被响应,上述控制位就被压入堆栈保存,中断处理之后,又可以恢复先前的工作方式。在中断处理子程序执行期间,通过间接访 问堆栈数据,可以操作这些位;这样允许程序在中断返回(RETI)后,以另一种功耗方式继续运行。各控制位作用如下: SCG1:当SCG1复位时,使能SMCLK;SCG1置位则禁止SMCLK。 SCG0:当SCG0复位时,直流发生器被激活,只有SCG0被置位且DCOCLK信号没有用于MCLK或SMCLK,直流发生器才能被禁止。 OscOff:当OscOff复位时,LFXT晶体振荡器激活,只有当OscOff
[单片机]
自动图像报警系统研究及单片机实现
    摘要:全面介绍了基于图像的自动报警系统的实现方法,克服了传统单点信号报警的缺陷,并采用先进的RISC结构单片机和高密度FLASH、CPLD技术,使系统具有实时响应和自适应能力。     关键词:图像报警 RISC FLASH CPLD 自适应     报警系统广泛应用于银行、饭店、交通管理以及智能大厦等场所和领域。传统的自动报警装置,大多采用单点信号报警,即在某一特定位置安放传感器,当该采集点处的物理量达到报警门限时,就向中心控制计算机发出报警请求信号。这种报警装置的优点是安装便利,反应迅速,但其适用范围较小,对单点噪声过分敏感而导致误报,在防止误报和漏报两方面不可兼得等先天缺陷,限制了它不能被应用于情
[传感技术]
物联网操作系统热潮来临,开路者庆科冷静对待
谷歌在今年的I/O大会上首次推出了名为 Brillo 的操作系统,基于Android底层框架,仅保留了Android系统的基础功能,支持低功耗蓝牙、Wi-Fi连接。再看国内,华为也于近日发布面向物联网的操作系统LiteOS,腾讯则是发布了TOS+智能硬件开放平台战略...... 这一系列的消息让上海庆科CEO王永虹很是兴奋,因为物联网操作系统终于得到了巨头们的重视。面对巨头们的虎视眈眈,王永虹则显示出非常乐观的心态: 得到巨头们的认可,证明我们这几年至少没有白忙活。大家都进入这一市场,未来才能更好。 与阿里共同发力智能领域 王永虹对笔者介绍了公司在近几年物联网浪潮中取得的成就。2012年庆科开始在家
[物联网]
单片机串口通讯过程
一 1、根据波特率和时钟频率设置T2L、T2H的初值 2、通过辅助寄存器AUXR,设置T2启动运行,极其运行方式 3、通过ES打开串口中断、通过EA打开总中断 二 1、主函数中可以直接使用SBUF=0xXX;向串口发送数据 2、接收完数据后,接收完毕中断标志RI变为1,需软件置零RI=0;使串口重新进入接收准备状态。 3、在串口中断函数 void xxx(void) interrupt 4 中,先RI=0,然后可以通过if(SBUF==0xXX)来判断接到的数据,然后通过编程使单片机做出相应的动作。 4、发送以后,发送完毕中断标志TI变为1,需软件置零TI=0;
[单片机]
详解51单片机学习过程中的四大误区
51单片机的辉煌过去 51单片机指MCS-51系列单片机,CICS指令集。由Intel公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源,内有128个RAM单元及4K的ROM。其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前国内的51单片机市场主要为国产宏晶的产品STC系列其号称低功耗,稳定与廉价的特点。 学习51单片机的误区 误区1:51单片机是学习的基础 “51单片机是学习的基础”这句话本身并没有错。在我读本科的时候,当时它无疑是学习的基础——毕竟那时没有更高级的单片机可以供使用,国内更
[单片机]
基于单片机PIC16F74的电动按摩椅的研制
本文介绍了一款采用PIC16F74单片机作为微处理芯片的电动按摩椅控制系统,具体包括有系统的组成和功能介绍、硬件电路的设计、软件功能实现以及抗干扰措施。   1:引言   随着我国经济的迅速发展和人们生活水平的不断提高,按摩椅等保健产品越来越受到欢迎。目前,在电动按摩椅市场上,进口、合资以及国产产品并存。相对而言,进口产品功能强大、按摩方式丰富、外观优美,但同时其价格也非常昂贵。而国内产品功能较简单,产品知名度也相对较低,但是其价格比较低廉。本文主要介绍了一款自主研发的中档电动按摩椅。该产品既有功能比较强大、按摩方式比较丰富、结构简单、外观优美、控制方式简单灵活,产品容易升级的特点,同时其价格却只有国外同等产品的一半。
[单片机]
基于<font color='red'>单片机</font>PIC16F74的电动按摩椅的研制
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved