基于89c51单片机的秒表课程设计说明书内容摘要:

实被按下了,此时就跳转至相应的程序标号处,执行相应的功能。 (3)开始计时 若确认“开始计时”键被按下,则跳转至程序标号“ RUN”处,将定时器 0 计时允许控制位 TR0 置位 ,则定时器开始运行。 此动作完成后,返回按键检测程序,等待操作者的下一次指令。 (4)计时程序 定时器 0 计时至 10ms,溢出,引发中断,程序跳转至定时器 0 中断服务程序入口 000BH 处执行。 程序跳转至中断服务 程序 TIME0。 由于秒表的最小计时单位是 ,即 100ms,因此需加入软件计时,使定时器 0 溢出 10 次之后才改变数码管的显示状态。 因此每来一次中断就将 30H中的数加 1,若 30H中的数没有到 10,则给定时器 0 重新装入预置数,之后中断返回并继续等待中断;到 10 了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。 (5)显示程序 将数码管的段选码放在数表 TAB 中。 每次 100ms 计时完成后,将 R0 中的值(初值为 0)送入 A, 然后 自 加 1。 .若 R0 中的 值没到 10,则使用累加器 A 查表,并将查得的 数码管段选码送入毫秒位数码管。 之后将 30H 中的数置零,中断返回。 若发现R0 中的数到 10 了,则将 R0 置零,并转入秒位进位子程序 SECOND,向秒位进位,之后,继续照常向毫秒位送数。 在秒位进位子程序 SECOND 中,由于要用到累加器 A,因此先将其推入堆栈保护。 将 R1 中的值(初值 为 10)送入 A,然后自加 1。 .若 R1 中的值没到 20,则使用累加器 A 查表,并将查得的数码管段选码送入秒位数码管。 若发现 R1 中的数到 20了,则将 R1 重置为 10,并转入十秒位进位子程序 SECOND1,向十秒位进位,之后,继续照常向秒位送数。 完成 后,弹出 ACC 和 PSW,子程序返回。 十秒位进位子程序与秒位进位子程序相似,只是没有向下一位进位的功能。 (6)暂停计时 10 若确认“暂停计时”键被按下,则跳转至程序标号“ PAUSE”处,将定时器 0 计时允许控制位 TR0 置零,则定时器暂停运行。 此动作完成后,返回按键检测程序,等待操作者的下一次指令。 (7)秒表清零 若确认“秒表清零”键被按下,则跳转至程序标号“ STOP”处,将 TR0 置零,关闭定时器 0 运行。 并且将数码管、工作寄存器、定时器 0 预置数全部重置,使其处于秒表计时的初始状态。 此动作完成后,返回按键检测程序 ,等待操作者的下一次指令。 (8)延时程序 用于按键延时防抖,延时 10ms。 程序清单如下: ORG 0000H。 程序开始 AJMP START。 跳转到主程序 START ORG 000BH。 定时器 0 中断的地址入口 AJMP TIME0。 定时器 0 溢出,跳转到中断程序 TIME0 START:。 主程序 MOV P3,0FFH。 输入端口 P3 全写 1 MOV P0,3FH。 MOV P1,3FH。 MOV P2,0BFH。 数码管初始化 MOV 30H,00H。 MOV R0,00H。 MOV R1,0AH。 MOV R2,00H。 工作寄存器初始化 MOV TMOD,01H。 定时器 0 工作于方式 1 MOV TH0,0D8H。 MOV TL0,0FEH。 定时器 0 预置数 (D8FEH=55550D) SETB EA。 开总中断 允许 SETB ET0。 开定时器 0 中断允许 READ:。 读键程序 L1:JB ,L2。 LCALL DELAY。 按键延时防抖 JB ,L1。 AJMP RUN。 确认计时键被按下,开始 /继续计时 L2:JB ,L3。 LCALL DELAY。 按键延时防抖 JB ,L2。 AJMP PAUSE。 确认暂 停键被按下,暂停计时 L3:JB ,L1。 LCALL DELAY。 按键延时防抖 JB ,L3。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。