Bahasa Assembly dan command untuk DT51 trainer board Percobaan 1 Basic Input/Output Program 1.2
Monday, July 2, 2012
Program 1.2
$mod51 ; inisialisasi menggunakan mikrokontroler keluarga 51
CSEG ; code segment
ORG 4000H ; program dimulai dari alamat 4000H
LJMP START ; long jump ke label START
START: ; label START
INIT: MOV DPTR,#2003H ; DPTR menunjuk ke alamat 2003H (CW)
MOV A,#80H ; memberi nilai 80H ke Acc
MOVX @DPTR,A ; memindahkan nilai A ke alamat yang ditunjuk DPTR
LABEL:JB P1.4, DISPLAY2 ; lompat ke DISPLAY2 saat P1.4 bernilai 1
DISPLAY1: MOV DPTR,#2000H ; DPTR menunjuk ke alamat 2000H(port A)
MOV A,#00H ; memberi nilai 00H ke Acc
MOVX @DPTR,A ; memindahkan nilai A ke alamat yang ditunjuk DPTR
SJMP LABEL ; short jumpt ke label LABEL
DISPLAY2: MOV DPTR,#2000H ; DPTR menunjuk ke alamat 2000H(port A)
MOV A,#55H ; memberi nilai 55H ke Acc
MOVX @DPTR,A ; memindahkan nilai A ke alamat yang ditunjuk DPTR
SJMP LABEL ; melakukan looping pada LABEL
END ; mengakhiri program
Analisis Program
Program ini menggunakan port 1 sebagai input. Sehingga ke 8 input dideklarasikan sebagai P1.0 – P1.7. dan port A digunakan sebagai output maka data yang diinputkan ke Acc dapar mentrigger Led untuk nyala atau mati.
Program diawalai dengan :
>$mod51 untuk mendeklarasikan bahwa kode dibawah diperuntukkan untuk keluarga mcs51
>ORG 4000H untuk memulai program pada alamat 4000H
>LJMP START perintah untuk long jump ke start.
>MOV DPTR,#2003H artinta DPTR menunjuk alamat 2003H (control word)
Untuk menggunakan port PPI harus dilakukan proses inisialisasi dengan menggunakan control word yang berada pada alamat 2003H.
Perintah dalam label INT tidak akan terlihat karena led menyala hanya sepermicrodetik dan langsung menuju LABEL.
>MOV A,#80H , memberi nilai 80 ke Acc
80H binernya 1000 0000 merupakan nilai control word MSB dalam hal ini setflag harus berlogika 1 untuk mengaktifkan PPI port.
D5 dan D6 menggunakan mode select mode 0 sehingga nilainya 00
D4 diset berlogika 0 sebab port A diset sebagai output
D3 diset berlogika 0 sebab port C upper sebagai output
D2 menggunakan mode 0 sehingga berlogika 0
D1 diset berlogika 0 sebab port B sebagai output
D0 diset berlogika 0 sebab port C lower sebagai output
>MOVX @DPTR,A untuk memindahkan nilai didalam acc ke dalam alamat yang ditunjuk DPTR
>LABEL : JB P1.4, DISPLAY2
JB adalah perintah JUMP IF BIT SET, jadi perintah ini untuk jumpt ke DISPLAY2 jika P1.4 (switch input bit ke 4) diset 1. Namun jika P1.4 bernilai o maka meneruskan perintah pada baris program dibawahnya.
>DISPLAY1 : MOV DPTR,#2000H
diberikan alamat 2000H sebab port A berada pada alamat 2000H.
Pada display1 A diberi nilai 00H yang berarti LED mati semua (0000 0000).
Pada display2 A diberi nilai 55H yang berarti led menyala dengan urutan (0101 0101) dengan demikian saat switch berisi 0 maka led mati (display1) dan saat switch berisi 1 maka led menyala yaitu pada bit 0, 2 , 4 dan 6 (display2).
>MOV DPTR,#2003H artinta DPTR menunjuk alamat 2003H (control word)
Untuk menggunakan port PPI harus dilakukan proses inisialisasi dengan menggunakan control word yang berada pada alamat 2003H.
Perintah dalam label INT tidak akan terlihat karena led menyala hanya sepermicrodetik dan langsung menuju LABEL.
>MOV A,#80H , memberi nilai 80 ke Acc
80H binernya 1000 0000 merupakan nilai control word MSB dalam hal ini setflag harus berlogika 1 untuk mengaktifkan PPI port.
D5 dan D6 menggunakan mode select mode 0 sehingga nilainya 00
D4 diset berlogika 0 sebab port A diset sebagai output
D3 diset berlogika 0 sebab port C upper sebagai output
D2 menggunakan mode 0 sehingga berlogika 0
D1 diset berlogika 0 sebab port B sebagai output
D0 diset berlogika 0 sebab port C lower sebagai output
>MOVX @DPTR,A untuk memindahkan nilai didalam acc ke dalam alamat yang ditunjuk DPTR
>LABEL : JB P1.4, DISPLAY2
JB adalah perintah JUMP IF BIT SET, jadi perintah ini untuk jumpt ke DISPLAY2 jika P1.4 (switch input bit ke 4) diset 1. Namun jika P1.4 bernilai o maka meneruskan perintah pada baris program dibawahnya.
>DISPLAY1 : MOV DPTR,#2000H
diberikan alamat 2000H sebab port A berada pada alamat 2000H.
Pada display1 A diberi nilai 00H yang berarti LED mati semua (0000 0000).
Pada display2 A diberi nilai 55H yang berarti led menyala dengan urutan (0101 0101) dengan demikian saat switch berisi 0 maka led mati (display1) dan saat switch berisi 1 maka led menyala yaitu pada bit 0, 2 , 4 dan 6 (display2).