DSEG
ORG 20H
Nomor: DS 1
Loket: DS 1
Pencacah10: DS 1
Pencacah2: DS 1
RuasLoket: DS 1
RuasUmum10: DS 1
RuasUmum1: DS 1
Ruas1pul: DS 1
Ruas1sat: DS 1
Ruas2pul: DS 1
Ruas2sat: DS 1
Tombol1 BIT P3.0
Tombol2 BIT P3.7
ROM EQU 0
KonstantaWaktu EQU -50000
CSEG
ORG ROM
LJMP Mulai
ORG ROM+3H
RETI
ORG ROM+0BH
AJMP TimerInterrupt
ORG ROM+13H
RETI
ORG ROM+1BH
RETI
ORG ROM+23H
RETI
Mulai:
MOV Nomor,#0
MOV Loket,#1
MOV Pencacah2,#2
MOV Pencacah10,#10
ACALL Tampilanbaru1
ACALL Tampilanbaru2
MOV TMOD,#01H
MOV TH0,#High KonstantaWaktu
MOV TL0,#Low KonstantaWaktu
SETB ET0
SETB EA
SETB TR0
Utama:
LCALL Display
Sakelar1: JB Tombol1,Sakelar2
INC Nomor
Tekan1: LCALL Tampilanbaru1
LCALL Display
JNB Tombol1,Tekan1
MOV A,#99
CJNE A,Nomor,Sakelar2
MOV Nomor,#0
Sakelar2: JB Tombol2,Utama
INC Nomor
Tekan2: LCALL Tampilanbaru2
LCALL Display
JNB Tombol2,Tekan2
MOV A,#99
CJNE A,Nomor,Utama
MOV Nomor,#0
LJMP Utama
Display:
MOV P0,#0FFH
MOV P2,Ruas1pul
MOV P0,#11110111B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,Ruas1sat
MOV P0,#11111011B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,Ruas2pul
MOV P0,#11111101B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,Ruas2sat
MOV P0,#11111110B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,RuasLoket
MOV P0,#10111111B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,RuasUmum10
MOV P0,#11011111B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,RuasUmum1
MOV P0,#11101111B
ACALL Tunggu
RET
Tunggu: MOV R6,#3
TungguLagi: MOV R7,#250
DJNZ R7,$
DJNZ R6,TungguLagi
MOV P0,#0FFH
RET
TimerInterrupt:
Push PSW
Push Acc
MOV TL0,#Low KonstantaWaktu
MOV TH0,#High KonstantaWaktu
DJNZ Pencacah10,SelesaiInterupsi
MOV Pencacah10,#10
DJNZ Pencacah2,SelesaiInterupsi
MOV Pencacah2,#2
INC Loket
MOV A,#3
CJNE A,Loket,Detik
MOV Loket,#1
Detik:
ACALL Umum
SelesaiInterupsi:
Pop Acc
Pop PSW
RETI
Umum:
MOV A,#1
CJNE A,Loket,Loket2
MOV RuasLoket,#0CFH
MOV A,Ruas1pul
MOV RuasUmum10,A
MOV A,Ruas1sat
MOV RuasUmum1,A
JMP Kembali
Loket2:
MOV A,#2
CJNE A,Loket,Kembali
MOV RuasLoket,#092H
MOV A,Ruas2pul
MOV RuasUmum10,A
MOV A,Ruas2sat
MOV RuasUmum1,A
Kembali:
RET
Tampilanbaru1:
MOV R0,#Ruas1pul
MOV A,Nomor
MOV P1,A
Ruas2Digit: MOV B,#10
DIV AB
ACALL Ruas1Digit
MOV A,B
Ruas1Digit: ACALL JadikanRuas
MOV @R0,A
INC R0
RET
Tampilanbaru2:
MOV R0,#Ruas2pul
MOV A,Nomor
ADD A,#128
MOV P1,A
MOV A,Nomor
RuasDuaDigit: MOV B,#10
DIV AB
ACALL RuasSatuDigit
MOV A,B
RuasSatuDigit: ACALL JadikanRuas
MOV @R0,A
INC R0
RET
JadikanRuas: INC A
MOVC A,@A+PC
RET
KombinasiRuas:
;-abcdefg
DB 10000001B ;0
DB 11001111B ;1
DB 10010010B ;2
DB 10000110B ;3
DB 11001100B ;4
DB 10100100B ;5
DB 10100000B ;6
DB 10001111B ;7
DB 10000000B ;8
DB 10000100B ;9
END
ORG 20H
Nomor: DS 1
Loket: DS 1
Pencacah10: DS 1
Pencacah2: DS 1
RuasLoket: DS 1
RuasUmum10: DS 1
RuasUmum1: DS 1
Ruas1pul: DS 1
Ruas1sat: DS 1
Ruas2pul: DS 1
Ruas2sat: DS 1
Tombol1 BIT P3.0
Tombol2 BIT P3.7
ROM EQU 0
KonstantaWaktu EQU -50000
CSEG
ORG ROM
LJMP Mulai
ORG ROM+3H
RETI
ORG ROM+0BH
AJMP TimerInterrupt
ORG ROM+13H
RETI
ORG ROM+1BH
RETI
ORG ROM+23H
RETI
Mulai:
MOV Nomor,#0
MOV Loket,#1
MOV Pencacah2,#2
MOV Pencacah10,#10
ACALL Tampilanbaru1
ACALL Tampilanbaru2
MOV TMOD,#01H
MOV TH0,#High KonstantaWaktu
MOV TL0,#Low KonstantaWaktu
SETB ET0
SETB EA
SETB TR0
Utama:
LCALL Display
Sakelar1: JB Tombol1,Sakelar2
INC Nomor
Tekan1: LCALL Tampilanbaru1
LCALL Display
JNB Tombol1,Tekan1
MOV A,#99
CJNE A,Nomor,Sakelar2
MOV Nomor,#0
Sakelar2: JB Tombol2,Utama
INC Nomor
Tekan2: LCALL Tampilanbaru2
LCALL Display
JNB Tombol2,Tekan2
MOV A,#99
CJNE A,Nomor,Utama
MOV Nomor,#0
LJMP Utama
Display:
MOV P0,#0FFH
MOV P2,Ruas1pul
MOV P0,#11110111B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,Ruas1sat
MOV P0,#11111011B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,Ruas2pul
MOV P0,#11111101B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,Ruas2sat
MOV P0,#11111110B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,RuasLoket
MOV P0,#10111111B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,RuasUmum10
MOV P0,#11011111B
ACALL Tunggu
MOV P0,#0FFH
MOV P2,RuasUmum1
MOV P0,#11101111B
ACALL Tunggu
RET
Tunggu: MOV R6,#3
TungguLagi: MOV R7,#250
DJNZ R7,$
DJNZ R6,TungguLagi
MOV P0,#0FFH
RET
TimerInterrupt:
Push PSW
Push Acc
MOV TL0,#Low KonstantaWaktu
MOV TH0,#High KonstantaWaktu
DJNZ Pencacah10,SelesaiInterupsi
MOV Pencacah10,#10
DJNZ Pencacah2,SelesaiInterupsi
MOV Pencacah2,#2
INC Loket
MOV A,#3
CJNE A,Loket,Detik
MOV Loket,#1
Detik:
ACALL Umum
SelesaiInterupsi:
Pop Acc
Pop PSW
RETI
Umum:
MOV A,#1
CJNE A,Loket,Loket2
MOV RuasLoket,#0CFH
MOV A,Ruas1pul
MOV RuasUmum10,A
MOV A,Ruas1sat
MOV RuasUmum1,A
JMP Kembali
Loket2:
MOV A,#2
CJNE A,Loket,Kembali
MOV RuasLoket,#092H
MOV A,Ruas2pul
MOV RuasUmum10,A
MOV A,Ruas2sat
MOV RuasUmum1,A
Kembali:
RET
Tampilanbaru1:
MOV R0,#Ruas1pul
MOV A,Nomor
MOV P1,A
Ruas2Digit: MOV B,#10
DIV AB
ACALL Ruas1Digit
MOV A,B
Ruas1Digit: ACALL JadikanRuas
MOV @R0,A
INC R0
RET
Tampilanbaru2:
MOV R0,#Ruas2pul
MOV A,Nomor
ADD A,#128
MOV P1,A
MOV A,Nomor
RuasDuaDigit: MOV B,#10
DIV AB
ACALL RuasSatuDigit
MOV A,B
RuasSatuDigit: ACALL JadikanRuas
MOV @R0,A
INC R0
RET
JadikanRuas: INC A
MOVC A,@A+PC
RET
KombinasiRuas:
;-abcdefg
DB 10000001B ;0
DB 11001111B ;1
DB 10010010B ;2
DB 10000110B ;3
DB 11001100B ;4
DB 10100100B ;5
DB 10100000B ;6
DB 10001111B ;7
DB 10000000B ;8
DB 10000100B ;9
END
maaf mas saya mau tanya ini programnya dalam bentuk ASM ya?
BalasHapusuntuk compile ke HEX nya gimana ya?
waktu saya compile pake READS51 kok error ya
mohon bantuannya mas
makasih :D
tuh program masih manual bin dasar
BalasHapusditulis di notpad dalam bentuk simpanan manual (dot asm)
lalu dicompile pake CMD (command prompt)