Bahasa Assembly dan command untuk DT51 trainer board Percobaan 1 Basic Input/Output Program 1.3

Program 1.3
$mod51 ; inisialisasi menggunakan mikrokontroler keluarga 51
PORTA EQU 2000H ; mengaktifkan port A pada alamat 2000H
PORTB EQU 2001H ; mengaktifkan port B pada alamat 2001H
CW   EQU 2003H ; control word mengaktifkan port PPI
CSEG ; code segment
      ORG  4000H ; program dimulai dari alamat 4000H
      LJMP  START ; long jump ke label START
DELAY:;label DELAY
MOV R7,#04H ; memberi nilai 04H ke R7   
LUP1: MOV R6,#0FFH ; memberi nilai FFH ke R6
LUP2: MOV R5,#0FFH ; memberi nilai FFH ke R5
      DJNZ R5,$   ;mengurangi 1 terus menerus hingga isi R5 menjadi 0
      DJNZ R6,LUP2 ;mengurangi R6, jika R6 belum 0 jump ke LUP2
      DJNZ R7,LUP1 ;mengurangi R7, jika R6 belum 0 jump ke LUP1
      RET  ;kembali dari subroutine ke perintah terakhir kali routine dipanggil
 START: ; label START
        MOV SP,#30H ;memberi nilai 30H ke stack pointer
 INIT: MOV DPTR,#CW  ;label INIT ; memasukkan nilai CW ke DPTR
       MOV A,#82H ;memberi nilai 82H ke Acc
       MOVX @DPTR, A ;memasukkan nilai A ke alamat yg ditunjuk DPTR
 LOOP: MOV DPTR,#PORTB ; port B ditunjuk DPTR
       MOVX A,@DPTR ;memindahkan nilai DPTR ke Acc
       MOV DPTR,#PORTA ;memasukkan nilai port A ke alamat yg ditunjuk DPTR
       MOVX @DPTR,A ;memasukkan nilai A ke alamat yg ditunjuk DPTR
       ACALL DELAY ;memanggil label DELAY
       SJMP  LOOP  ;short jump ke label LUP
       END ; mengakhiri program

Analisis Program
Program ini menggunakan port A sebagai port output, port B sebagai input, control dihubungkan dengan control pada trainer board DT51 lalu inisialisasi port A, port B dan CW.
Program diawalai dengan :
>$mod51 ; inisialisasi menggunakan mikrokontroler keluarga 51
>PORTA EQU 2000H ; deklarasi menggunakan port A yang berada pada alamat 2000H
>PORTB EQU 2001H ; deklarasi menggunakan port B yang berada pada alamat 2001H
>CW   EQU 2003H ; control word mengaktifkan port PPI pada alamat 2003H
>CSEG ; code segment
 > ORG  4000H ; program dimulai dari alamat 4000H
 >LJMP  START ; long jump ke label START
>DELAY : MOV R7,#04H ; memberi nilai 04H ke R7   
>LUP1: MOV R6,#0FFH ; memberi nilai FFH ke R6
>LUP2: MOV R5,#0FFH ; memberi nilai FFH ke R5
>DJNZ R5,$   ;mengurangi 1 terus menerus hingga isi R5 menjadi 0
>DJNZ R6,LUP2 ;mengurangi R6, jika R6 belum 0 jump ke LUP2
>DJNZ R7,LUP1 ;mengurangi R7, jika R6 belum 0 jump ke LUP1
 >RET  ;kembali dari subroutine ke perintah terakhir kali routine dipanggil
 >START:  MOV SP,#30H ;memberi nilai 30H ke stack pointer
> INIT: MOV DPTR,#CW  ;label INIT ; data pointer menunjuk CW
>MOV A,#82H ;memberi nilai 82H ke Acc
82H binernya 1000 0010 merupakan nilai CW
MSB (setflag) harus bernilai 1 untuk aktifasi PPI port
D5 dan D6 berarti mode select 0 nilainya 00
D4 diset 0 sebab port A sebagai output
D3 diset 0 sebab port C upper sebagai output
D2 menggunakan mode 0 jadi 0
D1 diset 1 sebab port B sebagai input
D0 diset 0 sebab port C lower sebagai output
>MOVX @DPTR, A ;memasukkan nilai A ke alamat yg ditunjuk DPTR
 >LOOP: MOV DPTR,#PORTB ; port B ditunjuk DPTR
>MOVX A,@DPTR ;Acc diberi nilai dari alamat yang ditunjuk DPTR
>MOV DPTR,#PORTA ; port A ditunjuk DPTR
> MOVX @DPTR,A ;memasukkan nilai A ke alamat yg ditunjuk DPTR
 > ACALL DELAY ;memanggil label DELAY
  >SJMP  LOOP  ;short jump ke label LUP
 >END ; mengakhiri program
Tampilan LED sesuai dengan input yang diberikan pada switch, missal switch bit ke 1 maka LED bit 1 menyala.
Delay :
Delay =2x255+3=513
Lup1=255x513+3=130818
Lup2=4x130818+3=523575 mikrosekon = 0,5 detik
Delay=523575x1,o8 mikrosekon
=565135 mikrosekon=0,5 detik
Dalam perhitungan delay stack pointer digunakan untuk menunjukkan pemanggilan delay karena SP dapat dinaikkan dengan intruksi CALL dan PUSH.

3 Komentar untuk "Bahasa Assembly dan command untuk DT51 trainer board Percobaan 1 Basic Input/Output Program 1.3"

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel