Tugas 1

JAM DIGITAL BERBASIS MIKROKONTROLER AT89S51

bil0 equ 20h ; menampilkan angka 0 pada Seven segment
bil1 equ 0ech ; menampilkan angka 1 pada Seven segment
bil2 equ 18h ; menampilkan angka 2 pada Seven segment
bil3 equ 88h ; menampilkan angka 3 pada Seven segment
bil4 equ 0c4h ; menampilkan angka 4 pada Seven segment
bil5 equ 82h ; menampilkan angka 5 pada Seven segment
bil6 equ 2h ; menampilkan angka 6 pada Seven segment
bil7 equ 0e8h ; menampilkan angka 7 pada Seven segment
bil8 equ 0h ; menampilkan angka 8 pada Seven segment
bil9 equ 80h ; menampilkan angka 9 pada Seven segment
bilkosong equ 0ffh ; untuk tampilan kosong (tidak ada nilai yang tampil)

utama:
0000| mov 70h,#0h
0003| mov 71h,#0h
0006| mov 72h,#0h
0009| mov 73h,#0h
000C| mov 74h,#0h
000F| mov 75h,#0h

loop:
0012| mov r0,70h
0014| acall transfer
0016| mov 76h,r1
0018| mov r0,71h
001A| acall transfer
001C| mov 77h,r1
001E| mov r0,72h
0020| acall transfer
0022| mov 78h,r1
0024| mov r0,73h
0026| acall transfer
0028| mov 79h,r1
002A| mov r0,74h
002C| acall transfer
002E| mov 7ah,r1
0030| mov r0,75h
0032| acall transfer
0034| mov 7bh,r1
0036| acall display
0038| inc 70h
003A| mov r2,70h
003C| cjne r2,#09h,loop
003F| mov 70h,#0h
0042| inc 71h
0044| mov r2,71h
0046| cjne r2,#05h,loop
0049| mov 71h,#0h
004C| inc 72h
004E| mov r2,72h
0050| cjne r2,#09h,loop
0053| mov 72h,#0h
0056| inc 73h
0058| mov r2,73h
005A| cjne r2,#05h,loop
005D| mov 73h,#0h
0060| inc 74h
0062| cjne r3,#02h, loop
0065| mov r2,74h
0067| mov r3,75h
0069| cjne r2,#09h,loop

loop1:
006C| dec 75h
006E| mov r2,75h
0070| cjne r2,#02h,loop
0073| mov 75h,#0h
0076| jmp loop

loop2:
0078| cjne r2,#04h,loop
007B| jmp loop1

transfer:
007D| cjne r0,#0h,satu
0080| mov r1,#bil0
0082| ret

satu:
0083| cjne r0,#1h,dua
0086| mov r1,#bil1
0088| ret

dua:
0089| cjne r0,#2h,tiga
008C| mov r1,#bil2
008E| ret

tiga:
008F| cjne r0,#3h,empat
0092| mov r1,#bil3
0094| ret

empat:
0095| cjne r0,#4h,lima
0098| mov r1,#bil4
009A| ret

lima:
009B| cjne r0,#5h,enam
009E| mov r1,#bil5
00A0| ret

enam:
00A1| cjne r0,#6h,tujuh
00A4| mov r1,#bil6
00A6| ret

tujuh:
00A7| cjne r0,#7h,delapan
00AA| mov r1,#bil7
00AC| ret

delapan:
00AD| cjne r0,#8h,sembilan
00B0| mov r1,#bil8
00B2| ret

sembilan:
00B3| cjne r0,#9h,transfer
00B6| mov r1,#bil9
00B8| ret
00B9| jmp utama

display:
00BB| mov sbuf,76h
00BE| jnb ti,$
00C1| clr ti
00C3| mov sbuf,77h
00C6| jnb ti,$
00C9| clr ti
00CB| mov sbuf,78h
00CE| jnb ti,$
00D1| clr ti
00D3| acall tunda
00D5| mov sbuf,79h
00D8| jnb ti,$
00DB| clr ti
00DD| mov sbuf,7ah
00E0| jnb ti,$
00E3| clr ti
00E5| mov sbuf,7bh
00E8| jnb ti,$
00EB| clr ti
00ED| acall tunda
00EF| ret

tunda:
00F0| mov r5,#255

tnd:
00F2| mov r6,#255

td:
00F4| mov r7,#16
00F6| djnz r7,$
00F8| djnz r6,td
00FA| djnz r5,tunda
00FC| ret
end

Keterangan:
Pada program sesungguhnya data yang dimasukkan satu-persatu, namun pemanggilan program tunda hanya dilakukan satu kali setelah mangirim 6 data pada display secara secara beruntun, maka tampilan pada Seven segment terlihat serentak.

Pada program, waktu pertama dimulai jam 00.00.00, maka dalam awal pengoperasiannya perlu menunggu waktu tengah malam supaya jam ini sesuai dengan waktu yang sebenarnya.