;==================================================================== ; Main.asm file generated by New Project wizard ; ; Created: 周二 九月 5 2023 ; Processor: AT89C51 ; Compiler: ASEM-51 (Proteus) ;====================================================================

$NOMOD51 $INCLUDE (8051.MCU)

;==================================================================== ; DEFINITIONS ;====================================================================

;==================================================================== ; VARIABLES ;====================================================================

coin1 equ P1.0 ; 开关1 coin2 equ P1.1 ; 开关2 coin3 equ P1.2 ; 开关3 coin4 equ P1.3 ; 开关4 led equ P1.7 ; LED发光管 display equ P2 ; 数码管

;==================================================================== ; 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, coin1 ; 读取开关1的取值 cjne a, #0, Coin1 ; 如果开关1为高,则跳转到Coin1处理 mov a, coin2 ; 读取开关2的取值 cjne a, #0, Coin2 ; 如果开关2为高,则跳转到Coin2处理 mov a, coin3 ; 读取开关3的取值 cjne a, #0, Coin3 ; 如果开关3为高,则跳转到Coin3处理 mov a, coin4 ; 读取开关4的取值 cjne a, #0, Coin4 ; 如果开关4为高,则跳转到Coin4处理 jmp Next ; 如果没有任何开关为高,则跳过累加过程

Coin1: add a, #1 ; 累加1到累加器 mov r0, a ; 将累加器的值传递给r0寄存器 jmp Next

Coin2: add a, #1 ; 累加1到累加器 mov r0, a ; 将累加器的值传递给r0寄存器 jmp Next

Coin3: add a, #2 ; 累加2到累加器 mov r0, a ; 将累加器的值传递给r0寄存器 jmp Next

Coin4: add a, #5 ; 累加5到累加器 mov r0, a ; 将累加器的值传递给r0寄存器

Next: ; 显示已投币值总数到数码管 mov a, r0 ; 将r0寄存器的值传递给累加器 mov display, a ; 显示累加器的值到数码管

  ; 检查已投币值总数是否超过给定值
  mov   a, r0          ; 将r0寄存器的值传递给累加器
  cjne  a, #10, End   ; 如果已投币值总数不等于10,则跳转到End处理
  setb  led            ; 打开LED发光管
  sjmp  Loop           ; 重复执行Loop

End: sjmp Loop ; 重复执行Loop

;==================================================================== END

AT89C51 投币机模拟程序

原文地址: https://www.cveoy.top/t/topic/Udq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录