51单片机的汇编代码单步调试现象正常,但是运行起来现象不对

代码如下:

	; 定义端口和常量
	SEGE EQU P1         ; 数码管段码寄存器地址
	DIGIT EQU P0       ; 数码管位码寄存器地址
	KEY EQU P2.0		;按键
		
	DELAY_1S equ 50        ; 1秒延时,需要根据实际情况调整



ORG 0x0000
    LJMP Main          ; 程序入口

ORG 0x000B
    LJMP Timer0_ISR    ; 定时器0中断处理程序

ORG 0100H
TABLE:      ; 共阴极数码管显示代码表
          DB    0x3f ,  0x06 ,  0x5b,   0x4f , 0x66,  0x6d
          DB    0x7d  ,0x07  , 0x7f  ,  0x6f  

;R7	;;0启动,1:停止
; 延时函数,用于控制时序
Delay_1us:
    MOV R0, #120    ; 设置循环计数器为12(根据计算得到的循环次数)
Delay_Loop:
    NOP            ; 每个NOP指令占用1个机器周期
    DJNZ R0, Delay_Loop  ; 循环12次
    RET	


; 主程序
Main:

	;配置定时器中断=====
	MOV TMOD,#01H		;方式1-16位
	MOV TH0,#0FCH
	MOV TL0,#18H	;1ms
	SETB TR0
	SETB ET0
	SETB EA

    MOV R0, #0         ; 变量清零
    MOV R7, #0         ; 变量清零
	MOV DIGIT,#0	   ;关数码管

	;;主循环
Loop:
						; 当前值存至R0寄存器
    CALL DisplayTemperature  ; 显示

	JNB KEY,Key_Down
	JMP Loop

Key_Down:	
	MOV A,#0x00
	MOV B,R7
	CJNE A,B,_STOPED
Key_Down_Next:
	CLR EA
	CLR TR0
	CLR ET0
	
	
	JNB KEY,Key_Down_Next
	MOV R7,#0x01
	JMP Loop

_STOPED:	
	SETB TR0
	SETB ET0
	SETB EA
	MOV R7,A
	
    JMP Loop           
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;相关函数;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 定时器0中断处理程序
Timer0_ISR:
    MOV A,R0
	INC A
	MOV B,#99
	
	CJNE A,B,NEXT
	MOV A,#0
	MOV R0,A
    RETI                ; 返回中断

NEXT:
	MOV R0,A
		
    RETI                ; 返回中断
;

; 7段数码管显示函数
DisplayTemperature:
    ;;目标值
	; 十位数码管显示
    MOV A, #99		
	MOV B,#10
    DIV AB

    MOV DPTR,#TABLE
    MOVC A,@A+DPTR		; A存储十位数
	MOV DIGIT,A
    MOV SEGE, #0FEH          ; 显示十位数码

    MOV SEGE, #0FFH          ; 关位选

    ; 个位数码管显示
    MOV DPTR,#TABLE
    MOV A, B ; B存储个位数
    MOVC A,@A+DPTR		; A存储十位数
	MOV DIGIT,A    
	MOV SEGE, #0FDH          ; 显示个位数码
    MOV SEGE, #0FFH          ; 关位选
	
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; 十位数码管显示
    MOV A, R0;当前值
	MOV B,#10
    DIV AB

    MOV DPTR,#TABLE
    MOVC A,@A+DPTR		; A存储十位数
	MOV DIGIT,A
    MOV SEGE, #0FBH          ; 显示十位数码

    MOV SEGE, #0FFH          ; 关位选

    ; 个位数码管显示
    MOV DPTR,#TABLE
    MOV A, B ; B存储个位数
    MOVC A,@A+DPTR		; A存储十位数
	MOV DIGIT,A    
	MOV SEGE, #0F7H          ; 显示个位数码
    MOV SEGE, #0FFH          ; 关位选	
	
   RET

END
	```

使用到的资源有:IO控制、定时器0,现象为KEY可以控制计时停止,但是不能重新启动计时,也就是_STOPED处的代码在运行起来时没起作用,在此记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值