Dengan menjadikan port 2 sebagai toggle switch yang berfungsi menghentikan (pause) LED berjalan di port 0. #Microcontroller #8051

Contoh Program Assembly Port 2 Toggle Switch LED Berjalan
Source Code:
$MOD51 ; This includes 8051 definitions for the Metalink assembler
; Please insert your code here.
;- BAB3_11.ASM -------------------------------------------------------------------
;
; penekanan tombol pd P2.0 sebagai toggle switch
; untuk menghentikan atau meneruskan lampu berjalan.
; author: www.bundet.com
; #Debugging
;---------------------------------------------------------------------------------
ORG 0H
MULAI:
MOV R5,#11111110B ; Simpan data awal tampilan LED (P0.0 hidup dulu)
MOV R4,#1 ; R4 sebagai status LED sedang berjalan atau tidak
; awal diisi dengan R4=1 (artinya LED sedang berjalan)
CEK_TOMBOL:
JNB P2.0,PROSES ; Cek tombol P2.0 apakah ditekan atau tidak
; Ya, P2.0 ditekan, lompat ke PROSES
CALL LED_JALAN ; Tidak, P2.0 tidak ditekan, teruskan proses
; menjalankan LED berdasar status R4
SJMP CEK_TOMBOL ; ulangi lagi dari awal
PROSES:
CJNE R4,#1,HIDUPKAN ; Apakah sekarang LED sedang berjalan?
; Tidak! lompatlah ke HIDUPKAN
MOV R4,#0 ; Ya! Ubah status R4=0 (matikan LED berjalan)
SJMP MULAI ; ulangi lagi dari awal
HIDUPKAN:
MOV R4,#1 ; Ubah status R4=1 (hidupkan LED berjalan)
SJMP MULAI ; ulangi lagi dari awal
LED_JALAN:
CJNE R4,#1,MATI ; Jika R4=1 maka teruskan menjalankan LED
; Jika tidak, lompat ke MATI
MOV P0,R5 ; isi register R5 dikirimkan ke port 1
CALL DELAY ; lakukan penundaan sesaat
MOV A,R5 ; lakukan proses pemutaran bit ke kiri pada R5
RL A ; melalui akumulator
MOV R5,A
RET
MATI:
MOV P0,R5 ; isi register R5 selalu dikirimkan ke port 1
CALL DELAY ; lakukan penundaan sesaat
RET
;-subrutin DELAY------------------------------------------------------------------
;
; subrutin ini hanya sekedar melakukan penundaan sesaat dengan cara
; mengulangi proses (pengurangan isi register) hingga dicapai suatu
; kondisi tertentu
;
;---------------------------------------------------------------------------------
Delay: Mov R0,#2 ; Isi Register R0 dengan 0 (2x ulang)
Delay1: Mov R1,#2 ; Isi Register R1 dengan 0 (2x ulang)
Djnz R1,$
Djnz R0,Delay1
Ret
End
Demo:
https://youtu.be/gHkwPgexuJ0
DOWNLOAD SCHEMATIC (123KB)