SJMP STAR ;跳转到STAR
ORG 1BH ;定时器T1的中断向量地址
SJMP T1S ;跳转到T1S
ORG 30H ;程序地址30H,即STAR标号地址
STAR: MOV R2,#99 ;将十进制数99送入R2中
MOV R4,#20 ;将十进制数20送入R4中
MOV IE,#88H ;开启EA和ET1
MOV TMOD,#10H ;使用T1的工作方式1
MOV TH1,#3CH ;给T1赋初值,这里是定时50ms
MOV TL1,#0B0H
SETB TR1 ;开启T1
MOV A,R2 ;将R2中的值送入A中
MOV B,#10 ;将十进制数10送入B中
DIV AB ;将A中的数除以B中的数,商在A中,余数在B中
ACALL SEG7 ;调用SEG7
MOV P1,A ;将A中值送入P1
MOV A,B ;将B中值送入A
ACALL SEG7 ;调用SEG7
MOV P2,A ;将A中值送入P2
SJMP $ ;死循环,等待中断
SJMP STAR
T1S: MOV TH1,#3CH ;中断程序,重新赋初值T1 50ms
MOV TL1,#0B0H
DJNZ R4,T1S0 ;R4中值先减1再看是否为0,若不为0则跳转到T1S0,若为0则顺序往下执行
MOV R4,#20 ;给R4重新赋值十进制数20,因此定时时间应该为1秒
DJNZ R2,T1S1 ;R2中值先减1再看是否为0,若不为0则跳转到T1S1,若为0则顺序往下执行
/CLR TR1/
SJMP T1S1 ;跳转到T1S1
T1S0: RETI ;中断返回
T1S1: MOV A,R2 ;将R2中的值送入A中
MOV B,#10 ;将十进制数10送入B中
DIV AB ;将A中的数除以B中的数,商在A中,余数在B中
ACALL SEG7 ;调用SEG7
MOV P1,A ;将A中值送入P1
MOV A,B ;将B中值送入A
ACALL SEG7 ;调用SEG7
MOV P2,A ;将A中值送入P2
CJNE R2,#0,T1S2 ;将R2中的值与十进制数0比较,若为0则跳转到T1S2,否则顺序执行
MOV R2,#100 ;给R2赋十进制数100
T1S2: RETI ;中断返回
SEG7: INC A ;A中的值加1
MOVC A,@A+PC ;先将PC中的值加1,然后与A相加,然后以此值为地址,将该地址中的数据送入A中
RET ;返回
DB 0C0H,0F9H,0A4H,0B0H;数据
DB 99H,92H,82H,0F8H
DB 80H,90H,88H,83H
DB 0C6H,0A1H,86H,8EH
END ;程序结束
=========================================================
我就是逐句解释了一下,至于程序要实现什么功能,我就不清楚了,要跟硬件相关
用主程序入口地址替换掉外部中断服务程序保存的原返回地址就可以实现了。具体实现方法如下:
EXT1:
MOV DPTR,#MAIN
POP A ;d出原返回地址
POP A
PUSH DPH ;将主程序入口地址压入
PUSH DPL
RETI
0003H;外部中断0
000BH;定时器0中断
0013H;外部中断1
001BH;定时器1中断
0023H;串口中断
任意区域:
0000H
LJMP MAIN
0003H ;中断0入口地址。。
LJMP INT0;跳到中断子程序。
0030H
MAIN: SETB EA
SETB IT0
SETB EX0
SJMP $
INT0: CLR EA //此段中断子程序可以放任意位置。
MOV P0,#0 ;亮led ,
SETB EA
RETI
如果还有不明白的,,可以HI我!!
谢谢采纳!
以上就是关于51单片机LED *** 作汇编语言程序解释全部的内容,包括:51单片机LED *** 作汇编语言程序解释、51单片机怎样外部中断后让单片机从主程序开始、51单片机的5个中断源的中断入口地址分别是什么如果要将外部中断0的中断服务程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)