Anda di halaman 1dari 23

SISTEM MIKROKONTROLER

Tugas Ke 8
“Struktur Program Assambler dan Program C”

Tanggal Penyerahan : 11 November 2020


Nama / NIM / Rombel / Absen :
- Jessy Nurlita / 5301419015 / 1 / 15
- M. Akmal Dzakwan / 5301419016 / 1 / 16
- Sawung Seta P. Y. / 5301419017 / 1 / 17
- Andi M. Dzulfikar / 5301419018 / 1 / 18
- Vada Candra W. P. / 5301419019 / 1 / 19
- Devina Nor Azizah / 5301419020 / 1 / 20
- Arman Maulana / 5301419021 / 1 / 21
- Ika Nurjanah / 5301419022 / 1 / 22
- Novira Rizki Arjun / 5301419023 / 1 / 23
- Faisal Akbar / 5301419024 / 1 / 24
- Novi Ayu Suryanti / 5301419025 / 1 / 25
- Wahyu R. Muryanti / 5301419026 / 1 / 26
- M. Dicky Ari S. / 5301419027 / 1 / 27

Nama Dosen : - Drs. Slamet Seno Adi, M. Pd., M. T.


- Nur Aziz Salim, S. T., M. Eng.

PENDIDIKAN TEKNIK ELEKTRO


FAKULTAS TEKNIK
UNIVERSITAS NEGERI SEMARANG
NOVEMBER 2020
Nama : Jessy NurlitaNIM 5301419015 Robel 1
 CONTOH PEOGRAM ASSEMBLER
;Program Assembler MCS51 ;menggunakan MCS51
; Xtall 11,059200 MHz
$MOD51 ;Assembler Control
Org
00H ;alamat awal pada 0000H
WHILE_1:
MOV
R0,#0AH
MOV
R1,#0EFH
MOV
3FH,#01010101B
MOV
A,3FH
MOV
A,R0
MOV
A,#30H
MOV
B,A
MOV
3FH,A
MOV
DPTR,#65535
PUSH
3FH
MOV
3FH,#00001111H
MOV
A,3FH
POP
3FH
MOV
A,3FH
XCH
A,R1
SJMP
WHILE_1 ;Loop forever
END ;End of Program

 STRUKTUR ASSEMBLY
1. LABEL
Pelabelan simbol dari alamat assembler (alamat perintah pada tingkat mesin)
2. MNEMONIC
Deskripsi simbol operasi
a. Mnemonic Code

b. Symbolic operated specification


c. Declaration off data

3. OPERANDS
Berisi alamat atau variabel jika perlu
4. COMMENTS
 CONTOH PROGRAM BAHASA C

#include <avr.h> ; file header / kepala program


int var1,var2,var3;
int jumlah(*var1, *var2,); // prototype fungsi jumlah

main() ; nama file


{
// nilai yg dibeikan ke parameter adalah
// alamat variable var1 dan var2 devinisi konstranta variabel
var3 = jumlah(&var1, &var3);

}
//definisi fungsi jumlah dengan parameter
// berupa pointer var1 dan *var2 uraian program
int jumlah(var1, *var2,);
{
return var1 + var2 ; penutup
}

 Struktur Program Bhs C Untuk AVR


1. Pernyataan : pernyataan tidak ikut diproses oleh AVR
\*Program Percobaan*/ : tidak diproses, simbol \* */
2. File Heder : file yang ada dalam internal mikrokontroler, untuk memberi fasilitas, agar program dapat
mengolah data
# Include<avr.h> : perintah mengaktifkan file heder. Dalam hal ini semua file heder yang ada dalam AVR
dipesan.
# Include<delay.h> : perintah mengaktifkan file delay
# Include “a : tampilan.h” : perintah agar program dapat memanggil file dengan nama “tampilan” yang ada di
drive a.
3. Nama File
Main() : nama file program ysng dspst dipanggil main() artinya tanpa nama, main(tampilan) nama file
tampilan.
• Uraian Program (Pindah baris ditandai dengan tanda titik koma (;))
• { : tanda pembuka program
– int a, c, e, file : perintah menjadikan a,c,e,file sebagai konstanta yang dpt diberi harga a=10
– var nilai, harga : menjadikan nilai, harga sebagai variabel. Harganya dapat diisi pada saat program
bekerja : Nila = a*b, artinya harga Nilai akan berubah jika nilai a dan atau b berubah. Harga Nilai = a X
b.
• return 0: perintah penutup sehubungan dengan program. Agar program kembali ke awal
• } : tanda penutup program
 Catatan : penutup tidak harus return ... Dapat bentuk yang lain, misal “getch() agar hasilprogram ditampilkan ke
layar
Nama : M. Akmal Dzakwan NIM 5301419016 Robel 1
l Penulisan Kode Program Bahasa Assembly

Keterangan program:
a. Mul digunakan untuk mengalikan suatu operand dengan register AL atau AX. AX sebagai nilai awal,
1. BL diset dengan nilai factorial yang akan di cari.
b. ULANG, jika BL = 0 maka EXIT, jika tidak maka MUL BX, DEC BL, lalu kembali ke ULANG.
c. Hasil faktorial disimpan dalam register AX.
d. Sebagai informasi tambahan, angka 4 dapat diubah-ubah.

o Penulisan Kode Program Bahasa C

Penjelasan

• Header baris
Di baris paling awal, terdapat kode #include. Perintah #include digunakan untuk
memasukkan sebuah file khusus yang memungkinkan dalam mengakses berbagai
fitur tambahan dalam bahasa C. Dalam contoh diatas, file stdio.h berisi kode
program agar nantinya dapat mengakses perintah printf. File stdio.h sendiri
merupakan singkatan dari Standard Input/Output. Dengan kata lain, agar di dalam
kode program nanti dapat menggunakan perintah printf, di bagian paling atas kode
program C harus terdapat baris #include <stdio.h>. File include ini juga sering
disebut sebagai header file, dan karena itu pula menggunakan akhiran .h.
• Fungsi Main()
Satu-satunya perintah yang harus ada di setiap kode program bahasa C adalah
main(). Struktur main() sendiri pada dasarnya merupakan sebuah fungsi (function).
Isi dari function ini diawali dan diakhiri dengan tanda kurung kurawa ” { ” dan ” } “
. Di dalam tanda kurung inilah “ isi ” dari kode program penyusun fungsi main()
ditulis. Kode int sebelum main() menandakan nilai kembalian atau hasil akhir dari
function main(). Kode int merupakan singkatan dari integer, yakni tipe data angka
bulat. Dengan demikian, kode program main() yang ditulis di atas harus
menghasilkan sebuah angka bulat (menggunakan perintah return).

• Deklarasi Variabel
Membuat variabel angka1, angka2, angka3. Dengan type data float dan
Variabel jumlah dan rata_rata dengan type data float yang akan diisi nilai
dengan menggunakan perintah input output

*variabel jumlah berisi penjumlahan tiga buah nilai (belum dibagi 3).
*rata_rata berisi nilai dari variabel jumlah kemudian dibagi 3(Rata-Rata nilai).
Nama : Sawung Seta P. Y NIM 5301419017 Robel 1
Beri contoh program dengan bahasa Assambler dan bahasa C, masing-masing satu buah. Tunjukan
strukturnya

 Bahasa Assambler
.include “m8535def.inc”
.org 0x00
rjmp main
main: ldi r16, low(RAMEND)
out SPL,r16 Inisialisasi program
ldi r16, high(RAMEND)
out SPH,r16

lagi : LDI r18, 3


LDI r19, 2
ADD r19, r18
STS 0x60,r19 Uraian program
LDS r20, 0x60
rjmp

 Bahasa C
#include <avr.h>
#include <delay.h> Kepala program
Uint8_t on,off;
Int main (void) Judul program
{
DDRD = 0xFF;
on = 0xFF;
off = 0;
while(1)
{
PORTD = on; Uraian program
delay_ms(1000);
PORTD = off;
delay_ms(100);
}
Return 0;
} Penutup
Nama : Andi M. Dzulfikar NIM 5301419018 Robel 1
A. Bahasa Assambler
.include “m32def.inc” ; Memanggil Librari ATMEGA 32
Org 0h ; Memulai program dari alamat 0H INISIALISASI PROGRAM
Mulai: ; Label Program
Mov P1,#01010101B ; LED P1.0, P1.2, P1.4 dan P1.6 menyala (=55h)
Acall Delay ; lakukan penundaan sesaat
Mov P1,#10101010B ; LED P1.1, P1.3, P1.5 dan P1.7 menyala (=0AAh)
Acall Delay ; lakukan penundaan sesaat
Sjmp Mulai ; ulangi lagi dari awal
; sub-rutin DELAY
PROGRAM UTAMA
DELAY: MOV R0,#5H ; Isi Register R0 dengan 5 (5x ulang)
DELAY1: MOV R1,#0FFH ; Isi Register R1 dengan 255 (255x ulang
DELAY2: MOV R2,#0 ; Isi register R2 dengan 0 (256x ulang)
DJNZ R2,$ ; R2=R2-1, jika R2 belum 0 ulangi lagi
DJNZ R1,DELAY2 ; R1=R1-1, jika R1 belum 0 ulangi DELAY2
DJNZ R0,DELAY1 ; R0=R0-1, jika R0 belum 0 ulangi DELAY1
RET ; Kembali ke pemanggil subrutin DELAY
END ; Mengakhiri program PENUTUP PROGRAM

B. Bahasa C
#include <mega32.h> ; Memanggil fungsi library pada ATMEGA32
#include <delay.h> ; Memanggil fungsi delay
HEADER PROGRAM
#include <stdio.h> ; Memanggil fungsi Input Output
void main(void) ; Permulaan program yang dijalankan
PEMBUKA PROGRAM
{
DDRC=0b11111111; ; Mengubah Pin C menjadi Output
while (1) INISIALISASI PROGRAM
{ PORTC=0b11111111; ; Output seluruh Pin C menjadi High
delay_ms(30); ; Delay / tunda progam selama 30 ms
PORTC=0b00000000; ; Output seluruh Pin C menjadi Low PROGRAM UTAMA
delay_ms(30); ; Delay / tunda progam selama 30 ms
}
Return; ; Penutup Program
PENUTUP PROGRAM
}
Nama : Vada Candra W. P. NIM 5301419019 Robel 1
Contoh Program Bahasa Assembler
Input Output Port

.include “m8535def.inc” Inisialisasi program


.org 0x00
rjmp main
main:  ldi r16,0x00
  out ddra,r16          ; PortA as input
  ldi r16,0xff
  out ddrb,r16          ; PortB as output
ulang: in r16,PinA         Program utama
       out PortB,r16    
      rjmp  ulang

keterangan struktur program assembler


.include “m8535def.inc” = menggunakan fasilitas dalam AtMega8535
.org 0x00 = alamat awal program
main:  ldi r16,0x00 = isi r16 ke alamat 0x00
out ddra,r16 = out ddra diisi r16
  ldi r16,0xff = isi r16 ke alamat 0xff
out ddrb,r16 ; PortB as output = out ddrb diisi r16
ulang: in r16,PinA = membaca PinA ke r16
out PortB,r16   = mengirim isi r16 ke portB
rjmp ulang = lompat ke label ulang

Contoh Program Bahasa C


PROGRAM ATMEGA16 : LED

#include <mega16.h> header


#include <delay.h>
void main(void){ Program utama
PORTB=0x00;
DDRB=0xff; //PORTB diatur menjadi output
while (1)
Deklarasi konstanta / variable lokal
{
PORTB=0b10000000;
delay_ms(10);
PORTB=0b01000000;
delay_ms(10); ISI PROGRAM UTAMA
PORTB=0b00100000;
delay_ms(10);
PORTB=0b00010000;
delay_ms(10);
PORTB=0b00001000;
delay_ms(10);
PORTB=0b00000100;
delay_ms(10);
PORTB=0b00000010;
delay_ms(10);
PORTB=0b00000001;
delay_ms(10);
}
}
Nama : Devina Nor Azizah NIM 5301419020 Robel 1
 Bahasa Assambler
Program menampilkan sebuah karakter

.model small
.code
org 100h Inisialisasi Program
mulai:
mov ah,2
mov dl,'B'
int 21h
int 20h Program Utama
end mulai

Penjelasan struktur bahasa Assembly

Ø .Model small (program yang akan dibuat hanya membutuhkan memory kecil)
Ø .Code org 100h (kita memberitahukan bahwa kita akan menggunkan kode segmen)
Ø Mulai : (label, dan diakhir dengan label end mulai untuk membatasi kode inti)
Ø Mov ah,2 (perintah menampilakan karakter yang disimpan dalam register DL)
Ø Mov dl, “B” ()
Ø Int 21h dipasangkan dengan int 20h (berfungsi untuk menampilkan sebuah karakter pada layar)
Output Program Menampilkan Karakter

 Bahasa C
Struktur program menggunakan fungsi scanf

#include <stdio.h> Kepala Program


int main () Judul Program
{
int bil_1;
float bil_2;
Definisi Konstanta dan Variabel

printf("\nNilai Integer Anda : ");


scanf("%d",&bil_1); // Fungsi scanf menampilkan bilangan integer
printf("Nilai yang Anda Masukkan adalah : %d\n",bil_1);
Uraian
printf("\nNilai Real Anda : "); Program
scanf("%f",&bil_2); // Fungsi scanf menampilkan bilangan real
printf("Nilai yang Anda Masukkan adalah : %f",bil_2);
}
Penutup

Output program menggunakan fungsi scanf


Nama : Arman Maulana NIM 5301419021 Robel 1
Program struktur Assembler MCS51 ;menggunakan MCS51
; Xtall 11,059200 MHz

$MOD51 ;Assembler Control


PORT_led EQU P0 ;Assembler Directive
Org 00H ;alamat awal pada 0000H

INIT_uC: ;Label

;Inisialisasi Awal
CALL FUNGSI1
WHILE_1:
; program utama
ACALL
FUNGSI2
LCALL
FUNGSI3
SJMP
WHILE_1 ;Loop forever

FUNGSI1: ;program rutin fungsi 1 ; isi program fungsi 1

RET ;kembali ke “pemanggi l”

FUNGSI2: ;program rutin fungsi 2 ; isi program fungsi 2

RET ;kembali ke “pemanggi l”

FUNGSI3: ;program rutin fungsi 3 ; isi program fungsi 3

RET ;kembali ke “pemanggil”

END ;End of Program

 STRUKTUR ASSEMBLY
5. LABEL
Pelabelan simbol dari alamat assembler (alamat perintah pada tingkat mesin)
6. MNEMONIC
Deskripsi simbol operasi
d. Mnemonic Code
e. Symbolic operated specification
f. Declaration off data

7. OPERANDS
Berisi alamat atau variabel jika perlu
8. COMMENTS

#include <stdio.h>
int N, i;

int arr[100];
main(){
printf(" Masukkan nilai panjang array (maksimal 100) : ");
scanf("%d", &N);
i=0;
while(i<N){
printf(" Masukkan angka pada posisi %d : ", i);
scanf("%d", &arr[i]);
i++;
}
/*
for(i=0;i<N;i==){
printf(" Masukkan angka pada posisi %d: ", i);
scanf("%d", &arr[i];
}
*/
printf(" Angka-angka pada array : ");
for(i=0;i<N;i++){
printf("%d;", arr[i]);
}

Return 0;
}
Nama : Ika Nurjanah NIM 5301419022 Robel 1
 Bahasa C
#include <io.h> Kepala Program

void main(void)
Judul Program
{
DDRA=0xFF;
DDRB=0xFF; Definisi
while(1) konstanta/variabel
Uraian Program
{
PORTB=0x92; Uraian Program
PORTA=0x7F;
}
Return 0;
Penutup
}

 Bahasa Assambler
.include “m8535def.inc : menggunakan fasilitas file2 yang dalam AtMega8535
.org 0x0000 : alamat awal program
rjmp main
main: ldi R16,low(RAMEND) : mengisi R16 dengan Low Inisialisasi
out SPL,R16 : output SPL diisi dengan R16 Program
ldi R16,high(RAMEND) : mengisi R16 dengan High
out SPH,R16 : output SPH diisi dengan R16

ulang: ldi R16,0xff

out ddra,R16
Program Utama
cbi PortA,1

sbi PortA,1

rjmp ulang
Nama : Novira Rizki A NIM 5301419023 Robel 1
 CONTOH PROGRAM BAHASA C
A. Storing Number within Array
#include <stdio.h>
int N, i;
float arr[50], sum;
Kepala Program

main(){
Kepala Program
printf("Masukkan nilai panjang array (maksimal 50): ");
scanf("%d", &N);

for(i=0;i<N;i++){ Definisi
konstanta/variabel
printf("Masukkan angka pada posisi %d: ", i);
scanf("%f", &arr[i]);
}
i=0; sum=0;

for(i=0;i<N;i++){
arr[i]=(arr[i]/100)*50;
sum=sum+arr[i]; Uraian Program
}
printf("Hasil penjumlahan: %f", sum);
} Penutup

 CONTOH PROGRAM BAHASA ASSAMBLER


PROGRAM PERPINDAHAN DATA (IF_THEN)
Keterangan program: jika kondisi register 18 kurang dari 3 maka pindah data memori register 18 ke register 20.
.include “m32def.inc”

.org 0x00

rjmp main
Inisialisasi Program
main:

ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16

cpi r18,3
brge END_IF

;THEN
Program Utama
STS 0x60,r18 ; copy isi r18 ke lokasi SRAM alamat 0x60

LDS R20,0X60 ; copy isi alamat SRAM 0x60 ke reg r20

END_IF:

stop: rjmp stop


Nama : Faisal Akbar NIM 5301419024 Robel 1
 Bahasa Assambler

Keterangan struktur program Assambler :


.include “m8535def.inc” : menggunakan fasilitas file-file dalam AtMega 8535
.org 0x00 : alamat awal program
rjmp main : lompat ke label main
main: ldi r16,low(RAMEND) : mengisi r16 dengan low
out SPL,r16 : out SPL diisi dengan r16
ldi r16,high(RAMEND) : mengisi r16 dengan high
out SPH,r16 : out SPH diisi dengan r16

lagi: LDI r18, 3 : r18 diisi dengan 3


LDI r19, 2 : r19 diisi dengan 2
ADD r19, r18 : r19 sama dengan penjumlahan r19 dengan r18
STS 0x60, r19 : copy isi r19 ke alamat 0x60
LDS R20, 0x60 : copy isi alamat 0x60 ke r20
rjmp lagi : lompat ke label lagi

 Bahasa C

File header
#include <avr.h>
Kepala program
#include <delay.h>
Deklarasi variabel
Uint8_t on,off;
Nama file
Int main (void) Judul program
Uraian program (pindah baris ditandai dengan tanda titik koma)
{
Buat port D menjadi output
DDRD = 0xFF;
on = 0xFF;
off = 0;
perulangan program
while(1)
{
PORTD = on;
Uraian program
delay_ms(1000);
PORTD = off;
delay_ms(100);
}
Return 0;
Penutup
}
Nama : Novi Ayu Suryani NIM 5301419025 Robel 1

PROGRAM VARIASI LAMPU LED

(Struktur Program Bahasa Assembler dan Program Bahasa C)


A. Listing Program Bahasa C

#include <mega32.h>
File Header, file yang terdapat didalam internal
#include <delay.h>
mikrokontroler.
void main(void){
Nama File, fungsi dalam file program yang dapat dipanggil.
DDRC=0b11111111;
{
PORTC=0b11111111; Tanda untuk pembuka program dimana diletakkan
delay_ms(30); sata program akan dimulai.
PORTC=0b10101010;
delay_ms(30);
PORTC=0b11010101;
delay_ms(30); Uraian Program LED, saat dimana setiap tahap
PORTC=0b11101101; program diproses sesuai keinginan pembuat.
delay_ms(30);
PORTC=0b11110111;
delay_ms(30);
PORTC=0b11111111;
}
Return; Perintah untuk menutup program dengan mengembalikan ke awal.
}
Tanda penutup program, dimana terletak pada
akhir sebuah proses program.

B. Listing Program Bahasa Assembler

.include “m32def.inc” Menggunakan fasilitas file yang tersedia pada Atmega 32


$mod51
Assembler kontrol
Org 0H
Awal program dimulai pada alamat 0H
mulai: mov p0,#11111111b ; isi port 0 dengan 11111111
call delay
mov p0,# 10101010b ; isi port 0 dengan 10101010
call delay
mov p0,# 11010101b ; isi port 0 dengan 11010101
call delay
mov p0,# 11101101b ; isi port 0 dengan 11101101
call delay
mov p0,# 11110111b ; isi port 0 dengan 11110111
call delay
mov p0,#11111111b ; isi port 0 dengan 11111111
call delay
jmp mulai ; lompat ke label mulai berulang
; Sub rutin Delay
delay: mov r0,#0 ; isi data r0 dengan 0
delay1: mov r1,#0 ; isi data r1 dengan 0
djnz r1,$ ; kurangi r1 dengan 1 sampai 0
djnz r0,delay1 ; kurangi r0 jika belum 0 lompat ke label 1
ret ; kembali ke program awal
end ; selesai
Nama : Wahyu R. Muryanti NIM 53014190256 Robel 1
Bahasa Assambler

.include “m8535def.inc”
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
Inisialisasi Program
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0x80
ldi r17,0x80
add r16,r17
ldi r18,0x02 Program Utama
adc r16,r18
here: rjmp here

Keterangan Struktur Program Assambler :


.include “m8535def.inc” : menggunakan fasilitas-fasilitas dalam AtMega 8535
.org 0x00 : alamat awal program
rjmp main : lompat ke label main
main: ldi r16,low(RAMEND) : mengisi r16 dengan low
out SPL,r16 : out SPL diisi dengan r16
ldi r16,high(RAMEND) : mengisi r16 dengan hight
out SPH,r16 : out SPH diisi dengan r16
ldi r16,0x80 : r16 diisi dengan 0x80
ldi r17,0x80 : r17 diisi dengan 0x80
add r16,r17 : penjumlahan r16 dengan r17
ldi r18,0x02 : r18 diisi dengan 0x02
adc r16,r18 : penjumlahan r16 dengan r18
here: rjmp here : lompat ke here

Bahasa C

File Header
#include <stdio.h>“
#include <conio.h> Kepala Program
#include <iostream.h>
Nama File
Main() Judul Program
Deklarasi Variabel
{
Float a, b, c;
a = 7.5;
b = 8.4; Definisi konstanta/variabel
c=0;
Uraian Program (pindah baris ditandai dengan tanda titik koma)
clrs();
cout<< ”Masukkan nilai A : “ <<a;
cout<< ”Masukkan nilai b : “ <<b; Uraian Program
cout<< “Masukkan nilai c : “ <<c;
c = a + b;
getch(); Penutup
}
Nama : M. Dicky Ari S NIM 5301419027 Robel 1
 Penulisan Dalam Bahasa Assembly
PROGRAM FACTORIAL
PROSES:
MOV AX, 1
MOV BL, 4
ULANG:
CMP BL, 0
JE EXIT
MUL BX
DEC BL
JMP ULANG
EXIT:RET
INT 20H
END

 PENULISAN DALAM BAHASA C

 Penjelasan
 Include, adalah file header yang memanggil library fungsi stdio
 Int main() adalah fungsi yang pertama kali akan dijalankan oleh program
 Baris 5 adalah deklarasi variable yang akan digunakan untuk menyimpan nilai
 Baris 7, mengisi nilai pada variable angka1, angka2, angka3
 Baris 9 dan 10 adalah proses perhitungan jumlah dan berdasarkan nilai pada angka1, angka2, dan angka3
 Baris 12 dan 13, adalah perintah output ke layar
 Return(); adalah perintah untuk memberikan nilai kembali, karena main diatas program bersifat
fungsi(int)
Hasil

Anda mungkin juga menyukai