CODING SEVEN SEGMENT BAHASA ASSEMBLER
SOAL/TUGAS
Buatlah rangkaian kontrol display 7 segment dengan ketentuan
- SW 1 ditekan maka program akan reset
- SW2 ditekan 7 segment menghitung 00 - 99 (7 segment tetap menyala walaupun SW2 sudah dilepas lagi.
- SW3 ditekan 7 segment menghitung 99 - 00 (7 segment tetap menyala walaupun SW3 sudah dilepas lagi)
Gambar 2. Diagram blok perencanaan
Gambar 2. Block diagram
Contoh coding menggunakan M-IDE dan simulasi ISIS Proteus 7
password: faridberbagi
Coding M-IDE
;*******************************************************
;mendefisinikan i/o atau variable
;*******************************************************
dispdata_satuan equ P2
dispdata_puluhan equ P0
My_number equ 30H
Org 0000H
;------------------------------------------------------
;*******************************************************
;MAIN PROGRAM (pembacaan kondisi tombol)
;*******************************************************
main_prog: MOV P0,#0C0H
MOV P2,#0c0H
mov My_number,#0
JNB P1.0,up_A
JNB P1.1,down_A
sjmp main_prog
;------------------------------------------------------
;*******************************************************
;mejadikan number start 0 atau 99 sebelum di up atau down
;*******************************************************
up_A: mov a, My_number
Cjne A,#99, up
mov My_number,#0FFH
sjmp up
down_A: mov a, My_number
Cjne A,#0, down
mov My_number,#99H
sjmp down
;------------------------------------------------------
;*******************************************************
;running up
;*******************************************************
up: inc My_number ;nilai ditambah
JNB P1.1,down
Call BCD
call delay
mov a, My_number
Cjne A,#99, up
mov My_number,#0FFH ;jika nilai sama 00 maka nilai sama dengan 255
SJMP up
;------------------------------------------------------
;*******************************************************
;running down
;*******************************************************
down: dec My_number ;nilai pdikurangi
JNB P1.0,up
Call BCD
call delay
mov a, My_number
Cjne A,#00, down ;jika nilai tidak sama 00 maka kembali ke down
mov My_number,#100 ;jika nilai sama 00 maka nilai sama dengan 100
SJMP down
;------------------------------------------------------
;*******************************************************
;conversi hex to desimal
;*******************************************************
BCD: Mov A,My_number
Mov B,#10
Div AB ;pembagian A/10
call Seg_conv
mov dispdata_puluhan, A ;puluhan
mov A,B
call Seg_conv
mov dispdata_satuan, A ;satuan
Ret
;------------------------------------------------------
;*******************************************************
;data aray seven segment
;*******************************************************
Seg_conv: inc A
Movc A, @A+PC
RET
DB 0C0H ;angka 0
DB 0F9H ;angka 1
DB 0A4H ;angka 2
DB 0B0H ;angka 3
DB 099H ;angka 4
DB 092H ;angka 5
DB 082H ;angka 6
DB 0F8H ;angka 7
DB 080H ;angka 8
DB 090H ;angka 9
;------------------------------------------------------
;*******************************************************
;tunda
;*******************************************************
delay: MOV R5,#0ffh
MOV R6,#0ffH
MOV R7,#2
delay_loop: DJNZ R5,delay_loop
DJNZ R6,delay_loop
DJNZ R7,delay_loop
RET
END
;------------------------------------------------------
;*******************************************************
;mendefisinikan i/o atau variable
;*******************************************************
dispdata_satuan equ P2
dispdata_puluhan equ P0
My_number equ 30H
Org 0000H
;------------------------------------------------------
;*******************************************************
;MAIN PROGRAM (pembacaan kondisi tombol)
;*******************************************************
main_prog: MOV P0,#0C0H
MOV P2,#0c0H
mov My_number,#0
JNB P1.0,up_A
JNB P1.1,down_A
sjmp main_prog
;------------------------------------------------------
;*******************************************************
;mejadikan number start 0 atau 99 sebelum di up atau down
;*******************************************************
up_A: mov a, My_number
Cjne A,#99, up
mov My_number,#0FFH
sjmp up
down_A: mov a, My_number
Cjne A,#0, down
mov My_number,#99H
sjmp down
;------------------------------------------------------
;*******************************************************
;running up
;*******************************************************
up: inc My_number ;nilai ditambah
JNB P1.1,down
Call BCD
call delay
mov a, My_number
Cjne A,#99, up
mov My_number,#0FFH ;jika nilai sama 00 maka nilai sama dengan 255
SJMP up
;------------------------------------------------------
;*******************************************************
;running down
;*******************************************************
down: dec My_number ;nilai pdikurangi
JNB P1.0,up
Call BCD
call delay
mov a, My_number
Cjne A,#00, down ;jika nilai tidak sama 00 maka kembali ke down
mov My_number,#100 ;jika nilai sama 00 maka nilai sama dengan 100
SJMP down
;------------------------------------------------------
;*******************************************************
;conversi hex to desimal
;*******************************************************
BCD: Mov A,My_number
Mov B,#10
Div AB ;pembagian A/10
call Seg_conv
mov dispdata_puluhan, A ;puluhan
mov A,B
call Seg_conv
mov dispdata_satuan, A ;satuan
Ret
;------------------------------------------------------
;*******************************************************
;data aray seven segment
;*******************************************************
Seg_conv: inc A
Movc A, @A+PC
RET
DB 0C0H ;angka 0
DB 0F9H ;angka 1
DB 0A4H ;angka 2
DB 0B0H ;angka 3
DB 099H ;angka 4
DB 092H ;angka 5
DB 082H ;angka 6
DB 0F8H ;angka 7
DB 080H ;angka 8
DB 090H ;angka 9
;------------------------------------------------------
;*******************************************************
;tunda
;*******************************************************
delay: MOV R5,#0ffh
MOV R6,#0ffH
MOV R7,#2
delay_loop: DJNZ R5,delay_loop
DJNZ R6,delay_loop
DJNZ R7,delay_loop
RET
END
;------------------------------------------------------