求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)

网上有关“求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)”话题很是火热,小编也是针对求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

ms50 DATA 31H ;50ms计数内存地址sec DATA 32H ;秒计数内存地址min DATA 33H ;分计数内存地址hour DATA 34H ;时计数内存地址buffer DATA 35H ;显示十进制内存起始地址EXTRN CODE(Display8) ;外部显示子程序(跟硬件设计有关,原文未列出) ORG 0000H ; LJMP STAR ;转主程序 ORG 000BH ; LJMP INT_Timer0 ;转50ms定时器中断处理程序ORG 0100H ;STAR: MOV SP,#60H ;主程序 MOV ms50,A ;50ms计数器初始化到0 MOV hour,#12 ;小时初始化为12 MOV min,#59 ;分钟初始化为59 MOV sec,#50 ;秒初始化为50 MOV TH0,#60 ;初始化定时器T0为50ms的数据(跟时钟频率和定时器模式有关) MOV TL0,#176 ; MOV TMOD,#1 ;初始化定时器模式 MOV IE,#82H ;设定中断 SETB TR0 ;开定时器0STAR1: LCALL Display ;调用显示转换程序(先将16进制转为BCD码再显示) JNB F0,$ ;等待中断处理完成标志 CLR F0 ;复位中断处理完成标志

SJMP STAR1 ;循环显示;中断服务程序 INT_Timer0:

MOV TL0,#176-5 ;50ms定时器计数器初始值再装入(-5为微调,含响应中断用时) MOV TH0,#60 ; PUSH 01H ;压入堆栈 MOV R1,#ms50 ;装入50ms计数内存地址数31H INC @R1 ;50ms计数内存加1

CJNE @R1,#20,ExitInt ;不够1秒,退出 MOV @R1,#0 ;50ms计数内存复位为0(31H)

INC R1 ;转为秒内存地址(32H)

INC @R1 ;秒计数内存加1 CJNE @R1,#60,ExitInt1 ;不够60秒,退出 MOV @R1,#0 ;够60秒,秒计数复位为0 INC R1 ;转为分计数内存地址(33H)

INC @R1 ;分计数内存加1 CJNE @R1,#60,ExitInt1 ;不够60分,退出 MOV @R1,#0 ;够60分,分复位为0 INC R1 ;转为时内存地址(34H) INC @R1 ;时计数内存加1 CJNE @R1,#24,ExitInt1 ;不够24时,退出 MOV @R1,#0 ;时计数内存复位为0ExitInt1:

SETB F0 ;置位中断处理完成标志ExitInt:

POP 01H ; 恢复现场 RETI ;退出中断

HexToBCD: ;16进制转BCD码

MOV B,#10 ; DIV AB ; MOV @R0,B ;存余数(10进制个位) INC R0 ;转伤地址 MOV @R0,A ;存伤(10进制十位) INC R0 ;转下一次余数地址 RET ;

Display: ;显示转换与调用显示程序

MOV R0,#buffer ;10进制BCD秒显示缓存地址(35H) MOV A,sec ; ACALL HexToBCD ;十进制秒转换后存在(35H)、(36H) MOV @R0,#10H ;(37H)=#10H,秒与分之间的间隔,无实际意义,或与dispaly8有关

INC R0 ;10进制BCD分显示缓存地址(38H)

MOV A,min ; ACALL HexToBCD ;十进制分转换后存在(38H)、(39H)

MOV @R0,#10H ;(3AH)=#10H,分与时之间的间隔,无实际意义,或与dispaly8有关

INC R0 ;10进制BCD时显示缓存地址(3BH)

MOV A,hour ; ACALL HexToBCD ;十进制时转换后存在(3CH)、(3DH)

MOV R0,#buffer ;恢复显示缓存地址(35H),为dispaly8置初始显示地址 LCALL Display8 ;调用实际显示程序 RET ; END

DUP是伪指令,EQU是等于指令。

dup是一个操作符,在汇编语言中同db、dw、dd等一样,也是由编译器识别处理的符号。是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。

EQU 伪指令把一个符号名称与一个整数表达式或一个任意文本连接起来。

扩展资料

MOV 传送字或字节。

MOVSX 先符号扩展,再传送。

MOVZX 先零扩展,再传送。

PUSH 把字压入堆栈。

POP 把字弹出堆栈。

PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈。

POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈。

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈。

POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈。

BSWAP 交换32位寄存器里字节的顺序

XCHG 交换字或字节。( 至少有一个操作数为寄存器,段寄存器不可作为操作数)

CMPXCHG 比较并交换操作数。( 第二个操作数必须为累加器AL/AX/EAX )

XADD 先交换再累加。( 结果在第一个操作数里 )

XLAT 字节查表转换。

百度百科-汇编指令

关于“求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

(8)

猜你喜欢

发表回复

本站作者才能评论

评论列表(3条)

  • 冷之的头像
    冷之 2025年12月18日

    我是中擎号的签约作者“冷之”

  • 冷之
    冷之 2025年12月18日

    本文概览:网上有关“求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)”话题很是火热,小编也是针对求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)寻找了一些与之相关的一...

  • 冷之
    用户121804 2025年12月18日

    文章不错《求大神帮忙说一下这个电子钟的程序详细说明解释(汇编语言的)》内容很有帮助

联系我们:

邮件:中擎号@gmail.com

工作时间:周一至周五,9:30-17:30,节假日休息

关注微信