51单片机查表指令的用法

51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:

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

其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该如何计算。
做而论道曾在以前的文章中,介绍过“偏移量”的自动计算方法,可见如下链接:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/32df49a09db0db81461064e9.html
http://zhidao.baidu.com/question/125242924.html?si=5


本文根据网友的提问,说一下“MOVC A, @A+DPTR”查表指令的用法。
原题网址:http://zhidao.baidu.com/question/150571761.html?si=1
解决时间:2010-5-2 23:25
-------------------------------
最佳答案:
51单片机汇编语言有一条查表指令是:
    MOVC A, @A + DPTR
它不是单独使用的,要和 DB 伪指令配套使用。

例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。
程序如下:
;-------------------------------------
    MOV DPTR, #1000H
    MOVC A, @A + DPTR
    ……

    ORG 1000H
    DB   0, 1, 4, 9, 16, 25......
;-------------------------------------
DB 伪指令从 ROM 1000H 开始,顺序存放了一系列的“平方”数据。
MOVC A, @A+DPTR 指令中的A,如果等于0,就会在“平方”数据中取出第0个,就是0;
MOVC A, @A+DPTR 指令中的A,如果等于1,就会在“平方”数据中取出第1个,就是1;
MOVC A, @A+DPTR 指令中的A,如果等于2,就会在“平方”数据中取出第2个,就是4;
MOVC A, @A+DPTR 指令中的A,如果等于3,就会在“平方”数据中取出第3个,就是9;
……
MOVC A, @A+DPTR 指令中的A,如果等于9,就会在“平方”数据中取出第9个,就是81。
-------------------------------
原题网址:http://zhidao.baidu.com/question/150571761.html?si=1
提问者对于答案的评价:谢谢啦,我弄懂了,前几天我被扣了分。就少点了哈
==============================================================
后记:
这条指令的用法,相对前一条就简单了,事先并不需要计算“偏移量”。但是这条指令必须要使用寄存器DPTR。
大家知道,凡是涉及到片外RAM存储单元的时候,基本上都要使用DPTR,这个DPTR寄存器通常是比较“繁忙”的,它形成了一个片内、片外之间,数据传传输的“瓶颈”。因此在读取ROM数据的时候,能够不用这后一条指令,就不要用它,应该尽量使用前一条指令。
==============================================================

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本书是在第3版《MCS:51单片机应用设计》一书的基础上,从应用的角度,详细地介绍了MCS:51单片机的硬件结构、指令系统、各种硬件接口设计、各种常用的数据运算和处理程序、接口驱动程序以及MCS:51单片机应用系统的设计,并对MCS:51单片机应用系统设计中的抗干扰技术以及各种新器件也作了详细的介绍。本书突出了选取内容的实用性、典型性。书中的应用实例,大多来自科研工作及教学实践,且经过检验。内容丰富、详实。本书可作为工科院校的本科生、研究生、专科生单片机课程的教材以及毕业设计的参考资料,也可供从事自动控制、智能、仪器、仪表、电力、电子、机电一体化以及各类MCS:51单片机应用的工程技术人员参考。 第1章 单片机概述 1.1 什么是单片机 1.2 单片机的历史及发展概况 1.3 8位单片机的主要生产厂家和机型 1.4 单片机的发展趋势 1.5 单片机的应用 1.6 MCS-51系列单片机 思考题及习题 第2章 MCS—51单片机的硬件结构 2.1 MCS-51单片机的硬件结构 2.2 MCS-51的引脚 2.2.1 电源及时钟引脚 2.2.2 控制引脚 2.2.3 I/O 引脚 2.3 MCS-51的微处理器 2.3.1 运算器 2.3.2 控制器 2.4 MCS-51存储器的结构 2.4.1 程序存储器 2.4.2 内部数据存储器 2.4.3 特殊功能寄存器(SFI{) 2.4.4 位地址空间 2.4.5 外部数据存储器 2.5 并行L/O端口 2.5.1 P0口 2.5.2 P1 口 2.5.3 p2口 2.5.4 P3口 2.5.5 PO-P3口电路小结 2.6 时钟电路与时序 2.6.1 时钟电路 2.6.2 机器周期和指令周期 2.6.3 MCS-51的指令时序 2.7 MCS-51的复位和复位电路 2.7.1 复位操作 2.7.2 复位电路 思考题及习题 第3章 MCS—51单片机指令系统 3.1 指令系统概述 3.2 指令格式 3.3 指令系统的寻址方式 3.4 MCS-51单片机指令系统分类介绍 3.4.1 数据传送类指令 3.4.2 算术操作类指令 3.4.3 逻辑运算指令 3.4.4 控制转移类指令 3.4.5 位操作指令 3.5 MCS-51汇编语言的伪指令 思考题及习题 第4章 MCS—51的中断系统 4.1 中断的概念 4.2 MCS-51中断系统的结构 4.3 中断请求源 4.4 扣断控制 4.4.1 中断允许寄存器m 4.4.2 中断优先级寄存器IP 4.5 中断响应 4.6 外部中断的响应时间 4.7 外部中断的触发方式选择 4.7.1 电平触发方式 4.7.2跳沿触发方式 4.8 中断·清求的撤消 4.9 中断服务程序的设计 4.10 多外部中断源系统设计 4.10.1 定时器/计数器作为外部中断源的使用方法 4.10.2 中断和查询结合的方法 4.10.3 用优先权编码器扩展外部中断源 思考题及习题 第5章 MCS—51的定时器/计数器 5.1 定时器/计数器的结构 5.1.1 工作方式寄存器TMOD 5.1.2 定时器/计数器控制寄存器TCON 5.2 定时器/计数器的4种工作方式 5.2.1 方式0 5.2.2 方式1 5.2.3 方式2 5.2.4 方式3 5.3 定时器卅数器对外部计数输入信号的要求 5.4 定时器卅数器编程和应用 5.4.1 方式0应用 5.4.2 方式1应用 5.4.3 方式2的应用 5.4.4 方式3的应用 5.4.5 门控制位CATE的应用—测量脉冲宽度 5.4.6 实时时钟的设计 5.4.7 运行中读定时器/计数器 思考题及习题 第6章 MCS—51的串行口 6.1 串行口的结构 6.1.1 串行口控制寄存器SCON 6.1.2 特殊功能寄存器PCON 6.2 串行口的4种工作方式 6.2.1 方式0 6.2.2 方式1 6.2.3 方式2 6.2.4 方式3 6.3 多机通讯 6.4 波特率的设定 6.4.1 波特率的定义 6.4.2 定时器T1产生波特率的计算 6.5 串行口的编程和应用 6.5.1 串行口方式1应用编程(双机通讯) 6.5.2 串行口方式2应用编程 6.5.3 串行口方式3应用编程(双机通讯) 思考题及习题 第7章 MCS—51扩展存储器的设计 7.1 概述 7.2 系统总线及总线构造 7.2.1 系统总线 7.2.2 构造系统总线 7.2.3 单片机系统的串行扩展技术 7.3 读写控制、地址空间分配和外部地址锁存器 7.3.1 存储器扩展的读写控制 7.3.2 存储器地址空间分配 7.3.3 外部地址锁存器 7.4 程序存储器EPROM的扩展 7.4.1 EPROM芯片介绍 7.4.2 程序存储器的操作时序 7.4.3 典型的EPROM接口电路 7.5 静态数据存储器的扩展 7.5.1 常用的静态RAM(SRAM)芯片 7.5.2 外扩数据存储器的读写操作时序 7.5.3 典型的外扩数据存储器的接口电路 7.6 EPROM和RAM的综合扩展 7.6.1 综合扩展的硬件接口电路设计 7.6.2 外扩存储器电路的工作原理及软件设计 7.7 E2PROM的扩展 7.7.1 常用的E2PROM芯片 7.7.2 E2PROM的工作方式 7.7.3 MCS—51扩展Z2PROM的方法 7.8 ATMEL89C51/89C55单片机的片内闪烁存储器 7.8.1 89C51的性能及片内闪烁存储器 7.8.2 片内闪烁存储器的编程 7.9 其他的特殊存储器简介 思考题及习题 第8章 MCS—51的UO接口扩展 8.1 I/O扩展概述 8.1.1 I/O接口的功能 8.1.2 I/O端口的编址 8.1.3 I/O数据的几种传送方式 8.1.4 常用的I/O接口电路芯片 8.2 MCS—51扩展可编程并行I/O芯片8255A 8.2.1 8255A芯片介绍 8.3 MCS—51与可编程RAM/IO芯片8155H的接口 8.3.1 8155H芯片介绍 8.3.2 MCS—51与8155H的接口及软件编程 8.4 用74LSTIL电路扩展并行I/O口 8.4.1 用74LS377扩展8位并行输出口 8.4.2 用74LS373扩展8位并行输入口 8.4.3 用三态门扩展8位并行输入口 8.4.4 采用74LSTrL的I/O接口扩展应用举例 8.5 用MCS—51的串行口扩展并行口 8.5.1 用741j165扩展并行输入口 8.5.2 用74LS164扩展并行输出口 思考题及习题 第9章 MCS—5重与键盘、显示器、拨盘、打印机的接口设计 9.I LED显示器接口原理 9.1.1 LED显示器结构 9.1.2 LED显示器工作原理 9.2 键盘接口原理 9.2.1 键盘输入应解决的问题 9.2.2 键盘接口的工作原理 9.2.3 键盘工作方式 9.2.4 双功能键的设计 9.3 键盘/显示器接口设计实例 9.3.1 利用8155H芯片实现键盘/显示器接口 9.3.2 利用8031的串行口实现键盘/显示器接口 9.3.3 利用专用键盘/显示器接口芯片8279实现键盘/显示器接口 9.4 MCS-51与液晶显示器(比D)的接口 9.4.1 1尤D显示的分类 9.4.2 点阵式液晶显示模块介绍 9.4.3 8031与I尤D模块(LCM)的接口及软件编程 9.5 MCS—51与微型打印机的接口 9.5.1 MCS—51与TPUP—40A/16A微型打印机的接口 9.5.2 MCS—51与CPl6微型打印机的接口 9.5.3 MCS—5l与XLF微型打印机的接口 9.6 MCS—51单片机与BCD码拨盘的接口设计 9.6.1 BCD码拨盘 9.6.2 BCD码拔盘与单片机的接口 9.7 MCS—51与功能开关的接口设计 思考题及习题 第10章 MCS—51与D/A、A/D的接口 10.1 MCS—51与DAC的接口 10.1.1 D/A转换器概述 10.1.2 MCS—51与8位DACO832的接口 10.1.3 MCS—51与12位DACl208系列的接口 10.1.4 MCS—51与nACl230系列的接口 10.2 MCS—51与ADC的接口 10.2.1 A/D转换器概述 10.2.2 MCS—51与ADC08凹(逐次逼近型)的接口 10.2.3 MCS-51与AD574(逐次逼近型)的接口 10.2.4 MCS—51与A/D转换器MCl4433(双积分型)的接口 10.2.5 MCS—51与ICL7135(双积分型)的接口 10.2,6 MCS—51与ICL7109(双积分型)的接口 10.3 MCS—51与V/F转换器的接口 10.3.1 用V/F转换器实现A/D转换的方法 10.3.2 常用V/F转换器LMX31简介 10.3.3 V/F转换器与MCS—51单片机接口 10.3.4 LM331应用举例 思考题及习题 第11章 MCS—5亚的功率接口 11.1 MCS—51输出驱动能力及其外围集成数字驱动电路 11.1.1 MCS—51片内I/O口的驱动能力 11.1.2 外围集成数字驱动电路 11.2 MCS—51的开关型功率接口 11.2.1 MCS—51与光电耦合器的接口 11.2.2 MCS—51与继电器的接口 11.2.3 MCS—51与晶闸管的接口 11.2.4 MCS—51与集成功率电子开关输出接口 11.2.5 MCS—51与固态继电器的接口 1.1.2.6 低压开关量信号输出技术 第12章 MCS—5重的串行通讯接口技术 12.1 各种标准串行通讯接口 12.1.1 RS—232C接口 12.1.2 lis—422A接口 12.1.3 RS—485接口 12.1.4 20mA电流环串行接口 12.1.5 各种串行接口性能比较 12.2 MCS—51单片机双机串行通讯技术 12.2.1 双机通讯接口设计 12.2.2 双机通讯软件设计 12.3 MCS—51的多机通讯技术 12.3.1 多机通讯原理 12.3.2 多机通讯接口设计 12.3.3 多机通讯软件设计 12.4 PC机与MCS-51单片机的双机串行通讯 12.4.1 PC机异步通讯适配器 12.4.2 RS-232C至RS-422/贴-485的转换方法 12.4.3 PC机与8031单片机双机通讯的接口设计 12.4.4 PC机与8031双机通讯的软件设计 12.5 PC机与多个M帕—51单片机间的串行通讯 12.5.1 多机通讯原理 12.5.2 多机通讯接口设计 12.5.3 多机通讯软件设计 12.6 串行通讯中的波特率设置技术 12.6.1 PC机中波特率的产生 12.6.2 MCS—51单片机串行通讯波特率的确定 12.6.3 波特率相对误差范围的确定方法 12.6.4 SMOD位对波特率的影响 第13章 MCS—51的其他扩展接口及实用电路 13.1 MCS—51单片机与日历时钟芯片的接口设计 13.1.1 DSl2887日历时钟芯片的性能及引脚说明 13.1.2 使用说明 13.1.3 M帕—51与DSl2887的接口设计 13.2 MCS—51单片机报警接口 13.2.1 鸣音报警接口 13.2.2 语音报警接口 13.3 MCS—51与可编程定时器/计数器芯片8253的接口 13.3.1 8253的内部结构、引脚及端口编址 13.3.2 8253工作方式和控制字定义 1.3.3,3 8253的工作方式与操作时序 13.3.4 MCS—51与8253的接口和编程实例 13.4 MCS—51与微处理器监控器MAX690A/MAX692A的接口 13.4:1 MAX690A/MAX692A简介 13.4.2 工作原理 13.4.3 MCS—51单片机与MAX690A/MAX692A的接口 13.5 高精度电压基准 13.5.1 精密电压基准MCl403(5G1403) 13.5.2 单片集成精密电压芯片AD584 13.1.3 其他电压基准 第14章 MCS—51程序设计及实用子程序 14.1 查表程序设计 14.2 数据极值查找和数据排序 14.2.1 数据极值查找 14.2.2 数据排序 14.3 散转程序设计 1.4.3.1 使用转移指令的散转程序 14.3.2 使用地址偏移量表的散转程序 14.3.3 使用转向地址表的散转程序 14.3.4 利用RET指令实现的散转程序 14.4 循环程序设计 14.4.1 单循环定时程序 14.4.2 多重循环定时程序 14.5 定点数运算程序设计 14.5.1 定点数的表示方法 14.5.2 定点数加减运算 14.5.3 定点数乘法运算 14.5.4 定点数除法 14.6 浮点数运算程序设计 14.6.1 浮点数的表示 14.6.2 浮点数的加减法运算 14.6.3 浮点数乘除法运算 14.6.4 定点数与浮点数的转换 14.7 码制转换 14.7.1 二进制码与ASCII码的转换 14.7.2 二进制码到BCD码的转换 14.7.3 BCD码到二进制码的转换 14.8 数字滤波 14.8.1 算术平均值法 14.8.2 滑动平均值法 14.8.3 防脉冲干扰平均值法 第15章 MCS—51应用系统设计、开发与调试 15.1 MCS—51应用系统设计 15.1.1 设计步骤 15.2 应用系统的硬件设计 15.3 MCS-51单片机系统举例 15.3.1 89C51最小应用系统 15.3.2 8031最小应用系统 15.3.3 典型应用系统 15.3.4 数据采集系统 15.4 应用系统的软件设计 15.5 单片机应用系统的开发和调试 15.5.1 仿真开发系统简介 15.5.2 用户样机开发调试过程 第16章 MCS—51应用系统的可靠性及抗干扰设计 16.1 干扰的来源 16.2 供电系统干扰及抗干扰措施 16.2.1 电源噪声来源、种类及危害 16.2.2 供电系统的抗干扰设计 16.3 过程通道干扰的抑制措施 16.3.1 隔离措施 16.3.2 长线传输干扰的抑制 16.4 空间干扰及抗干扰措施 16.4.1 接地技术 16.4.2 屏蔽技术 16.5 反电势干扰的抑制 16,6 印刷电路板的抗干扰设计 16.6.1 地线及电源线设计 16.6.2 去耦电容的配置 16.6.3 存储器的布线 16.6.4 印制板的布线原则 16.6.5 印制板上的器件布置 16.6.6 印制板的板间配线、连接和安装 16.7 软件抗干扰措施 16.7.1 软件抗干扰的前提条件 16.7.2 软件抗干扰的一般方法 16.7.3 软件滤波 16.7.4 开关量输入/输出软件抗干扰设计 16.7.5 指令冗余及软件陷阱 16.8 “看门狗”技术和故障自动恢复处理 16.8.1 “看门狗”技术 参考文献
单片机原理及系统课程设计 专 业: 电气工程及其自动化 班 级: 姓 名: 学 号: 指导教师: "评语: " " " " " " " " " " " " " "平时(40)" "修改(3" "报告(3" "总成绩 " " " " "0) " "0) " " " " 兰州交通大学自动化与电气工程学院 2012 年 7月 1日 1 引言 随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人们对它的认识也 逐步加深。秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其 中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开 始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时 过程中,只要按一下复位开关,计时应立即终止。 2 设计方案及原理 以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止 、时间显示。 采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控 制秒表的"开始"、"暂停"、"复位",按"开始"按键,开始计时;按"暂停"按键,系统暂 停计时;再按"开始"键,系统继续计时;数码管显示当前计时值;按"复位"按键,系统 清零。 3 硬件设计 MCS- 51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分 : (1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器; (2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序; (3)RAM:256B的片内数据存储器,容量小,但作用大; (4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线; (5)中断系统:共5个中断源,3个内部中断,2个外部中断; (6)定时器/计数器:2个16位的可编程定时器/计数器; (7)通用串行口:全双工通用异步接收器/发送器; (8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号; (9)总线控制:89C51对外提供若干控制总线,便于系统扩展。 89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反 相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大 器可以配置为片内振荡器。 采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上 电复位操作。 采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光 二极管,根据各管的亮暗组成字符。用Proteus软件画出主电路图见附录一。 4 软件设计 (1)秒表的初始化 根据程序流程图,先进行秒表的初始化,即: 将I/O口P3全写一,为秒表的控制输入 做好准备; 将数码管全部置零,使其处于秒表计时的初始状态; 将工作寄存器R0~R2以 及30H初始化,留待后面的计时程序备用; 将定时器0置于工作方式1,并为其装入计时 预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的 修正值),即将定时器定为每10ms溢出; 开总中断允许和定时器0中断允许。初始化完 成后,即进入之后的按键扫描程序。 (2)按键检测程序 轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一 个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后 ,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测; 若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执 行相应的功能。 (3)开始计时 若确认"开始计时"键被按下,则跳转至程序标号"RUN"处,将定时器0计时允许控制位 TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次 指令。 (4)计时程序 定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH 处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms, 因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。因此每来一次 中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中 断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕 之后中断返回并继续等待中断。 (5)显示程序 将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0) 送入A,然后自加1。若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码 送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到
单片机原理及系统课程设计 专 业: 电气工程及其自动化 班 级: 姓 名: 学 号: 指导教师: "评语: " " " " " " " " " " " " " "平时(40)" "修改(3" "报告(3" "总成绩 " " " " "0) " "0) " " " " 兰州交通大学自动化与电气工程学院 年 月 日 1 引言 随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人们对它的认识也 逐步加深。秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。其 中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开 始计时,再按一下启/停开关计时终止。而复位开关可以在任何情况下使用,即使在计时 过程中,只要按一下复位开关,计时应立即终止。 2 设计方案及原理 以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止 、时间显示。 采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控 制秒表的"开始"、"暂停"、"复位",按"开始"按键,开始计时;按"暂停"按键,系统暂 停计时;再按"开始"键,系统继续计时;数码管显示当前计时值;按"复位"按键,系统 清零。 3 硬件设计 MCS- 51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分 : (1)CPU:89C51的CPU是8位的,另外89C51内部有1个位处理器; (2)R0M:4KB的片内程序存储器,存放开发调试完成的应用程序; (3)RAM:256B的片内数据存储器,容量小,但作用大; (4)I/O口:P0-P3,共4个口32条双向且可位寻址的I/O口线; (5)中断系统:共5个中断源,3个内部中断,2个外部中断; (6)定时器/计数器:2个16位的可编程定时器/计数器; (7)通用串行口:全双工通用异步接收器/发送器; (8)振荡器:89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号; (9)总线控制:89C51对外提供若干控制总线,便于系统扩展。 89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反 相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大 器可以配置为片内振荡器。 采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上 电复位操作。 采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光 二极管,根据各管的亮暗组成字符。用Proteus软件画出主电路图见附录一。 4 软件设计 (1)秒表的初始化 根据程序流程图,先进行秒表的初始化,即: 将I/O口P3全写一,为秒表的控制输入 做好准备; 将数码管全部置零,使其处于秒表计时的初始状态; 将工作寄存器R0~R2以 及30H初始化,留待后面的计时程序备用; 将定时器0置于工作方式1,并为其装入计时 预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的 修正值),即将定时器定为每10ms溢出; 开总中断允许和定时器0中断允许。初始化完 成后,即进入之后的按键扫描程序。 (2)按键检测程序 轮流检测开始计时(P3.2)、暂停计时(P3.3)、秒表清零(P3.4)三个按键。若发现有一 个按键出现低电平(可能被按下),则延时10ms(调用延时子程序DELAY),延时完成后 ,若发现低电平消失,则说明该按键实际上未被按下,此时转回按键检测处继续检测; 若发现仍然是低电平,则说明此键确实被按下了,此时就跳转至相应的程序标号处,执 行相应的功能。 (3)开始计时 若确认"开始计时"键被按下,则跳转至程序标号"RUN"处,将定时器0计时允许控制位 TR0置位,则定时器开始运行。此动作完成后,返回按键检测程序,等待操作者的下一次 指令。 (4)计时程序 定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH 处执行。程序跳转至中断服务程序TIME0。由于秒表的最小计时单位是0.1s,即100ms, 因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。因此每来一次 中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中 断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕 之后中断返回并继续等待中断。 (5)显示程序 将数码管的段选码放在数表TAB中。每次100ms计时完成后,将R0中的值(初值为0) 送入A,然后自加1。若R0中的值没到10,则使用累加器A查表,并将查得的数码管段选码 送入毫秒位数码管。之后将30H中的数置零,中断返回。若发现R0中的数到10了,则将R

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值