打印

学生写的程序仿真运行时怎么“跑飞”了?RET指令。

[复制链接]
1913|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oufuqiang|  楼主 | 2007-11-19 22:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TNO
ORG 0030H
MAIN:
MOV R2,#00H
MOV R3,#00H
MOV R4,#00H
MOV R5,#00H
MOV R6,#00H
MOV R7,#00H

MOV TMOD,#02H
MOV TL0,#06H
MOV TH0,#06H
SETB EA
SETB ET0
SETB TR0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;开中断;
KK:       LCALL LOOP
LCALL  SPD
LCALL  DSP
SJMP KK
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;调用
SPD:MOV A,R2
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 30H,A

MOV A,R3
MOVC A,@A+DPTR
MOV 31H,A

MOV A,R4
MOVC A,@A+DPTR
MOV 32H,A

MOV A,R5
MOVC A,@A+DPTR
MOV 33H,A

MOV A,R6
MOVC A,@A+DPTR
MOV 34H,A

MOV A,R7
MOVC A,@A+DPTR
MOV 35H,A

RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

;;;;;;;;;;;;;;;;;;;;;;;
DSP:
MOV R0,#22H
MOV R1,#21H
MOV A,30H
MOVX @R0,A
MOV A,#01H
MOVX @R1,A
MOV A,#00H
MOVX @R1,A

MOV A,31H
MOVX @R0,A
MOV A,#02H
MOVX @R1,A
MOV A,#00H
MOVX @R1,A

MOV A,32H
MOVX @R0,A
MOV A,#04H
MOVX @R1,A
MOV A,#00H
MOVX @R1,A

MOV A,33H
MOVX @R0,A
MOV A,#08H
MOVX @R1,A
MOV A,#00H
MOVX @R1,A

MOV A,34H
MOVX @R0,A
MOV A,#10H
MOVX @R1,A
MOV A,#00H
MOVX @R1,A

MOV A,35H
MOVX @R0,A
MOV A,#20H
MOVX @R1,A
MOV A,#00H
MOVX @R1,A

RET
;;;;;;;;;;;;;;;;;;;
LOOP:SETB RS0 
CJNE R6,#200,LOOP1
MOV R6,#00H
INC R7
CJNE R7,#0AH,LOOP1
MOV R7,#00H
CLR RS0
INC  R2
CJNE R2,#0AH,LOOP1
MOV R2,#00H
INC R3
CJNE R3,#06H,LOOP1
MOV R3,#00H
INC R4
CJNE R4,#0AH,LOOP1
MOV R4,#00H
INC R5
CJNE R5,#06H,LOOP1
MOV R5,#00H
INC R6
CJNE R6,#04H,LOOP1
MOV R6,#00H
INC R7
CJNE R7,#02H,LOOP1
LOOP1:
RET
TNO:INC R6
RETI
END









相关帖子

沙发
hotpower| | 2007-11-19 22:36 | 只看该作者

老师没教好,老师该打PP

使用特权

评论回复
板凳
djc001| | 2007-11-19 23:32 | 只看该作者

SP没有初始化.

使用特权

评论回复
地板
oufuqiang|  楼主 | 2007-11-20 00:26 | 只看该作者

谢谢DJC ATMEL 8051 Microcontroller Instruction Set

那家伙在另一个子程序里面切换了寄存器组,跑到这个子程序来用R0,R1,于是堆栈的内容就被覆盖掉了。今晚上看来好久的ATMEL 8051 Microcontroller Instruction Set 才逐步明白。

Function: Return from subroutine
Description: RET pops the high- and low-order bytes of the PC successively from the stack, decrementing the Stack Pointer
by two. Program execution continues at the resulting address, generally the instruction immediately following an
ACALL or LCALL. No flags are affected.
Example: The Stack Pointer originally contains the value 0BH. Internal RAM locations 0AH and 0BH contain the values
23H and 01H, respectively. The following instruction,
RET
leaves the Stack Pointer equal to the value 09H. Program execution continues at location 0123H.
Bytes: 1
Cycles: 2
Encoding: 0 0 1 0 0 0 1 0
Operation: RET
(PC15-8) ← ((SP))
(SP) ← (SP) - 1
(PC7-0) ← ((SP))
(SP) ← (SP) - 1
相关链接:http://www.atmel.com/dyn/resources/prod_documents/doc0509.pdf

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

106

主题

1430

帖子

20

粉丝