AT89C51汇编代码错误修正:数码管显示已投币金额
;==================================================================== ; Main.asm file generated by New Project wizard ; ; Created: 周二 九月 5 2023 ; Processor: AT89C51 ; Compiler: ASEM-51 (Proteus) ;====================================================================
$NOMOD51 $INCLUDE (8051.MCU)
;==================================================================== ; DEFINITIONS ;====================================================================
;==================================================================== ; VARIABLES ;====================================================================
SW1 EQU P1.0 ; 开关1 SW2 EQU P1.1 ; 开关2 SW3 EQU P1.2 ; 开关3 SW4 EQU P1.3 ; 开关4 led EQU P1.7 ; LED发光管 display EQU P0 ; 数码管
;==================================================================== ; RESET and INTERRUPT VECTORS ;====================================================================
; Reset Vector
org 0000h
jmp Start
;==================================================================== ; CODE SEGMENT ;====================================================================
org 0100h
Start: ; 初始化 MOV display, #0 ; 清空数码管 CLR led ; 关闭LED发光管
; 设置初始已投币值总数
MOV r0, #0 ; 用r0寄存器作为累加器
Loop: ; 检查每个开关的取值,累加到r0寄存器中 MOV a, SW1 ; 读取开关1的取值 CJNE a, #0, SW1_1 ; 如果开关1为高,则跳转到SW1处理 MOV a, SW2 ; 读取开关2的取值 CJNE a, #0, SW2_1 ; 如果开关2为高,则跳转到SW2处理 MOV a, SW3 ; 读取开关3的取值 CJNE a, #0, SW3_1 ; 如果开关3为高,则跳转到SW3处理 MOV a, SW4 ; 读取开关4的取值 CJNE a, #0, SW4_1 ; 如果开关4为高,则跳转到SW4处理 JMP Next ; 如果没有任何开关为高,则跳过累加过程
SW1_1: ADD r0, #1 ; 累加1到r0寄存器 JMP Next
SW2_1: ADD r0, #1 ; 累加1到r0寄存器 JMP Next
SW3_1: ADD r0, #2 ; 累加2到r0寄存器 JMP Next
SW4_1: ADD r0, #5 ; 累加5到r0寄存器 JMP Next
Next: ; 显示已投币值总数到数码管 MOV a, r0 ; 将r0寄存器的值传递给累加器 MOV display, a ; 显示累加器的值到数码管
; 检查已投币值总数是否超过给定值
MOV a, r0 ; 将r0寄存器的值传递给累加器
CJNE a, #10, End_1 ; 如果已投币值总数不等于10,则跳转到End处理
SETB led ; 打开LED发光管
SJMP Loop ; 重复执行Loop
End_1: END
原文地址: https://www.cveoy.top/t/topic/SeQ 著作权归作者所有。请勿转载和采集!