Anda di halaman 1dari 0
Pendahuluan CONTOH-CONTOH PROGRAM MIKROKONTROLER Yoyo Somantri dan Erik Haritman Dosen Jurusan Pendidikan Teknik Elektro

Pendahuluan

CONTOH-CONTOH PROGRAM MIKROKONTROLER

Yoyo Somantri dan Erik Haritman Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia

Dalam bab ini akan dibahas tujuan perkuliahan, contoh-contoh program aplikasi pada

mikrokontroler : lampu led berjalan, lampu Flip-flop, key pad, lampu berputar ke kiri-ke kanan,

penghitung, dan stepper motor.

Tujuan Perkuliahan

Setelah mempelajari bab ini, diharapkan mahasiswa mampu untuk :

1. Membuat programLed berjalan.

2. Membuat lampu Flip-Flop.

3. Membuat program key pad.

4. Membuat program penghitung ( Counter)

5. Membuat program stepper motor

1. Contoh-contoh program :

Aplikasi pada lampu LED

1. Program Lampu Flip Flop pada Port 0

; Program Lampu Flip Flop pada Port 0

mulai:

$mod51

mov p0,#0ffh

call delay

mov p0,#0

call delay

jmp mulai

; Sub rutin Delay

delay:

mov r0,#0

delay1:

mov r1,#0

djnz r1,$

djnz r0,delay1

ret

end

2. Program Lampu Flip Flop pada Port 0

; Program Lampu Flip Flop pada Port 0

mulai:

$mod51

mov p0,#00fh

call delay

mov p0,#0f0h

call delay

jmp mulai

; Sub rutin Delay

delay:

mov r0,#0

delay1:

mov r1,#0

djnz r1,$

djnz r0,delay1

ret

end

3. Program Lampu berjalan pada Port 0

mulai:

$mod51

mov p0,#11111110b call delay mov p0,#11111101b call delay mov p0,#11111011b call delay mov p0,#11110111b call delay mov p0,#11101111b call delay mov p0,#11011111b call delay mov p0,#10111111b call delay mov p0,#01111111b call delay jmp mulai

; Sub rutin Delay

delay:

delay1:

mov r0,#0 mov r1,#0 djnz r1,$ djnz r0,delay1 ret end

3.

Program Lampu Flip Flop pada Port 0

; Program Lampu Flip Flop pada Port 0

mulai:

$mod51

mov a,#11111111b

mulai1:

rrc

a

mov p0,a

call delay

jmp mulai1

; Sub rutin Delay

delay: mov r0,#0

delay1:

mov r1,#0

djnz r1,$

djnz r0,delay1

ret

end

4. Program Lampu Flip Flop pada Port 0

; Program Lampu Flip Flop pada Port 0

mulai:

$mod51

mov a,#11111111b

mulai1:

rlc

mov p0,a

a

call delay

jmp mulai1

; Sub rutin Delay

delay:

mov r0,#0

delay1:

mov r1,#0

djnz r1,$

djnz r0,delay1

ret

end

Aplikasi pada 7 Segment

1. Program 1

$mod51

 

org

0h

main:

 

mov

p2,#11000000b

;0

clr

p1.4

call

delay

mov

p2,#11110011b

;1

call

delay

mov

p2,#10001001b

;2

call

delay

mov

p2,#10100001b

;3

call

delay

mov

p2,#10110010b

;4

call

delay

mov

p2,#10100100b

;5

call

delay

mov

p2,#10000100b

;6

call

delay

mov

p2,#11110001b

;7

call

delay

mov

p2,#10000000b

;8

call

delay

mov

p2,#10100000b

;9

call

delay

jmp

main

delay:

mov

r7,#100

delay_loop1:

mov

r6,#100

delay_loop2:

mov

r5,#100

djnz

r5,$

djnz

r6,delay_loop2

djnz

r7,delay_loop1

ret

end

2. Program -2

$mod51

org

0h

main:

mov

p2,#11000000b

;0

setb

p1.4

call

delay

mov

p2,#11110011b

;1

call

delay

mov

p2,#10001001b

;2

call

delay

mov

p2,#10100001b

;3

call

delay

mov

p2,#10110010b

;4

call

delay

mov

p2,#10100100b

;5

call

delay

mov

p2,#10000100b

;6

call

delay

mov

p2,#11110001b

;7

call

delay

mov

p2,#10000000b

;8

call

delay

mov

p2,#10100000b

;9

call

delay

jmp

main

delay:

mov

r7,#100

delay_loop1:

mov

r6,#100

delay_loop2:

mov

r5,#100

djnz

r5,$

 

djnz

r6,delay_loop2

djnz

r7,delay_loop1

ret

end

3. Program -3

 

$mod51

Counter_Lowequ

 

30h

Counter_High

equ

31h

Scanning

equ

32h

org

0

main:

mov

Counter_Low,#0

mov

Counter_High,#0

mov

Scanning,#100

main_loop:

clr

a

mov

p2,a

clr

P1.4

mov

a,Counter_Low

call

Tabel_Data

mov

p2,a

call

delay

clr

a

mov

p2,a

setb

P1.4

mov

a,Counter_High

call

Tabel_Data

mov

p2,a

call

delay

djnz

Scanning,Main_Loop

mov

Scanning,#100

inc

Counter_Low

mov

a,Counter_Low

cjne

a,#10,main_loop

mov

Counter_Low,#0

inc

Counter_High

mov

a,Counter_High

cjne

a,#10,main_loop

mov

Counter_High,#0

jmp

main_loop

Tabel_Data:

cjne

a,#0,TabelData_1

mov

a,#11000000b

;0

ret

TabelData_1:

cjne

a,#1,TabelData_2

mov

a,#11110011b

;1

ret

TabelData_2:

cjne

a,#2,TabelData_3

mov

a,#10001001b

;2

ret

TabelData_3:

cjne

a,#3,TabelData_4

mov

a,#10100001b

;3

ret

TabelData_4:

cjne

a,#4,TabelData_5

mov

a,#10110010b

;4

ret

TabelData_5:

cjne

a,#5,TabelData_6

mov

a,#10100100b

;5

ret

TabelData_6:

cjne

a,#6,TabelData_7

mov

a,#10000100b

;6

ret

TabelData_7:

cjne

a,#7,TabelData_8

mov

a,#11110001b

;7

ret

TabelData_8:

cjne

a,#8,TabelData_9

mov

a,#10000000b

;8

ret

TabelData_9:

cjne

a,#9,TabelData_Out

mov

a,#10100000b

;9

TabelData_Out:

ret

delay:

mov

r7,#1

delay_loop1:

mov

r6,#10

delay_loop2:

mov

r5,#100

djnz

r5,$

djnz

r6,delay_loop2

djnz

r7,delay_loop1

ret

end

Aplikasi pada KEYPAD

1

2

3

4

5

6

7

8

9

 

0

 

A

   

B

C

d

E

F

P1.3

P1.2

P1.1

P1.0

P3.7 P3.6 P3.5 P3.4

1. Program -1

$mod51

org

0

clr

p1.4

mulai: mov

jb

P1,#11110111b

p3.7,key_1

 

mov

p2,#11110011b;1

sjmp

mulai

key_1:

 

jb

p3.6,key_2

mov

p2,#10001001b;2

sjmp

mulai

key_2:

 

jb

p3.5,key_3

mov

p2,#10100001b;3

sjmp

mulai

key_3:

 

jb

p3.4,key_4

mov

p2,#10110010b;4

sjmp

mulai

key_4:

 

mov

p1,#11111011b

jb

p3.7,key_5

mov

p2,#10100100b;5

key_5:

 

jb

p3.6,key_6

mov

p2,#10000100b;6

sjmp

mulai

key_6:

 

jb

p3.5,key_7

mov

p2,#11110001b;7

sjmp

mulai

key_7:

jb

p3.4,key_8

mov

p2,#10000000b;8

sjmp

mulai

key_8:

mov

p1,#11111101b

jb

p3.7,key_9

mov

p2,#10100000b;9

key_9:

jb

p3.6,key_10

mov

p2,#11000000b;0

ljmp

mulai

key_10:

jb

p3.5,key_11

mov

p2,#10010000b

;A

ljmp

mulai

key_11:

jb

p3.4,key_12

mov

p2,#10000110b

;b

key_12:

mov

p1,#11111110b

jb

p3.7,key_13

mov

p2,#11001100b;C

sjmp

mulai

key_13:

jb

p3.6,key_14

mov

p2,#10000011b;d

key_14:

jb

p3.5,key_15

mov

p2,#10001100b;E

ljmp

mulai

key_15:

jb

p3.4,key_16

mov

p2,#10011100b;0

ljmp

mulai

key_16:

ljmp

mulai

end

Contoh program dan rangkaiannya

1. Merancang aplikasi lampu berjalan dari kiri kekanan dan dari kanan ke kiri lengkap dengan program dan perhitungan delaynya.

AT 8 9C5 1

1 P1. 0 2 VCC 5V P1. 1 3 P0. 0 P1. 2 4 P0.
1
P1. 0
2
VCC
5V
P1. 1
3
P0. 0
P1. 2
4
P0. 1
P1. 3
5
P0. 2
P0. 3
+
P1. 4
6
P1. 5
7
P0. 4
P1. 6
8
P0. 5
P1. 7
9
P0. 6
RST
P0. 7
10
P3. 0
11
E A/VPP
P3. 1
12
AL E /PROG
P3. 2
13
PSE N
P3. 3
14
P2. 7
P3. 4
15
P2. 6
P3. 5
16
P2. 5
P3. 6
17
P2. 4
P3. 7
P2. 3
18
XT AL 2
19
P2. 2
XT AL 1
20
P2. 1
GND
P2. 0
1 1. 0 59 2MHz
3 3p F

1 0u F

1 0K

3 3p F

5V 40 8 x1 50 39 38 37 36
5V
40
8 x1 50
39
38
37
36
35 34 33 32 31 30 29 8 xL E D 28 27 26 25
35
34
33
32
31
30
29
8 xL E D
28
27
26
25
24
23
22
21
5V

Gambar 1. Rangkaian Untuk Menyalakan Led 8 buah.

Bahasa Pemograman

a) Lampu berjalan yang bergerak satu per satu dari kiri kekanan secara berulang- ulang.

ORG

0H

; Awal program dimulai pada alamat 0H

Mulai:

MOV

A,#07FH

; Isi Akumululator dengan data 7FH

Putar:

MOV

P0,A

; Salin data dari Akumuklator ke P0 (nyalakan 1

lampu)

RR

A

; Putar 1 bit data pada Akumulator ke arah kanan

ACALL Tunda

; Panggil subrutin tunda untuk waktu Tunda

penyalaan

SJMP

Putar

; Lompat ke label mulai (lakukan secara berulang)

; Led akan nyala jika diberi logik 0

Tunda:

MOV

R5,# 250

; Isi Register 5 dengan data 250

Tunda1:

MOV

R6,#100

; Isi Register 6 dengan data 100

Tunda2:

MOV

R7,#10

; Isi Register 7 dengan data 10

DJNZ

R7,$

; Kurangi R7 dengan 1 sampai 0 *

DJNZ

R6,Tunda2

; Kurangi R6 jika belum 0 lompat ke label tunda2 **

DJNZ

R5,Tunda1

; Kurangi R7 jika belum 0 lompat ke label tunda1 ***

RET

; Kembali ke program utama

End

; Waktu tunda ( siklus DJNZ = 2 µS) :

; *

: 2 (R7) = 2 (10)

=

20 µS

;

**

: 2 (R7 x R6) = 2 (10 x 100)

=

2000 µS

;

*** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) =

500000 µS

;

------------- +

;

502020 µS

; 502020 µS 500 mS

500 mS

b)

Bahasa pemogramannya jika lampu ingin bergerak dari kanan ke kiri yaitu

Mulai:

MOV

A,#0FEH

; Intruksi yang diganti

Putar:

MOV

P0,A

RL

A

; Intruksi yang diganti

ACALL Tunda

SJMP

Putar

; Led akan nyala jika diberi logik 0

c) Bahasa program untuk menggerakan lampu dari tengah ke pinggir dengan waktu tunda 200 mili detik yaitu

ORG

Mulai:

0H

; Awal program dimulai pada alamat 0H

MOV

P0,#11100111B

; Isi port 0 dengan data 11100111B

ACALL Tunda

; Panggil subrutin Tunda

MOV

P0,#11011011B

; Isi port 0 dengan data 11011011B

ACALL Tunda

; Panggil subrutin Tunda

MOV

P0,#10111101B ; Isi port 0 dengan data 10111101B

ACALL Tunda

; Panggil subrutin Tunda

MOV

P0,#01111110B

; Isi port 0 dengan data 01111110B

ACALL Tunda

SJMP

Mulai

; Panggil subrutin Tunda

; Lompat ke label mulai (lakukan berulang)

; Led akan nyala jika diberi logik 0

Tunda:

MOV

R5,# 250

; Isi Register 5 dengan data 250

Tunda1:

MOV

R6,#40

; Isi Register 6 dengan data 40

Tunda2:

MOV

R7,#10

; Isi Register 7 dengan data 10

DJNZ

R7,$

; Kurangi R7 dengan 1 sampai 0 *

DJNZ

R6,Tunda2 ; Kurangi R6 jika belum 0 lompat ke label tunda2 **

DJNZ

R5,Tunda1 ; Kurangi R7 jika belum 0 lompat ke label tunda1 ***

RET

; Kembali ke program utama

End

;

Waktu tunda ( siklus DJNZ = 2 µS) :

 

;

*

: 2 (R7) = 2 (10)

=

20 µS

;

**

: 2 (R7 x R6) = 2 (10 x 40)

=

800 µS

;

*** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) =

200000 µS

 

;

------------- +

;

200820 µS

200820 µS

200 mS

2. Merancang dan membuat rangkaian counter dengan menggunakan mikrokontroler AT89C51.

a. Rangkailah up counter dengan menggunakan seven segment dan IC mikrokontroler AT89C51 yang bekerja pada port 2 seperti gambar dibawah.

b. Buatlah bahasa pemrograman untuk up counter yang bergerak naik dari angka 0 ampai 9 secara berulang-ulang dengan waktu tunda 500 mili detik.

c. Tulis bahasa pemograman yang telah dibuat dikomputer dengan menggunakan software Pinnacle. Kemudian simulasikan program tersebut secara software sampai tidak ada kesalahan.

d. Setelah program disimulasikan dan tidak ada kesalahan kemudian isikan program tersebut kedalam IC mikrokontroler dengan menggunakan progrmmer Atmel.

e. Selanjutnya pindakan IC yang telah diprogram ke Emulator untuk disimulasikan secara hardware.

1 0u F

1 0K

3 3p F

5V AT 8 9C5 1 1 P1. 0 2 40 VCC 39 P0. 0 5V
5V
AT 8 9C5 1
1
P1. 0
2
40
VCC
39
P0. 0
5V
P1. 1
3
38
P1. 2
4
P0. 1
37
P1. 3
5
P0. 2
36
+
P1. 4
6
P0. 3
35
P1. 5
7
P0. 4
34
5V
P1. 6
8
P0. 5
33
P1. 7
9
P0. 6
32
RST
P0. 7
10
P3. 0
11
31
E A/VPP
30
P3. 1
12
AL E /PROG
29
P3. 2
13
PSE N
28
8 x1 50
P3. 3
14
P2. 7
27
7
DPY
g
P3. 4
15
P2. 6
26
6
a
f
P3. 5
16
P2. 5
25
5
d
f
b
P3. 6
17
P2. 4
g
24
4
c
P3. 7
P2. 3
18
XT AL 2
19
23
3
e
e
c
P2. 2
22
2
d
b
XT AL 1
20
P2. 1
21
1
[LEDgn]
a
GND
P2. 0
1 1. 0 59 2MHz
3 3p F
8

Gambar 2. Rangkaian Counter dengan display seven segment

.

Bahasa Pemograman

ORG

0H

; Awal program dimulai pada alamat 0H

Mulai:

MOV

P2,#11000000B

; Isi port 2 dengan data 10110000B (angka 0)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#11111001B ; Isi port 2 dengan data 11110011B (angka 1)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#10100100B ; Isi port 2 dengan data 10100100B (angka 2)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#10110000B

; Isi port 2 dengan data 10110000B (angka 3)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#10011001B

; Isi port 2 dengan data 10011001B (angka 4)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#10010010B

; Isi port 2 dengan data 10010010B (angka 5)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#10000010B

; Isi port 2 dengan data 10000010B (angka 6)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#11111000B

; Isi port 2 dengan data 11111000B (angka 7)

ACALL

Tunda

; Panggil subrutin tunda

MOV

P2,#10000000B

; Isi port 2 dengan data 10000000B (angka 8)

ACALL

Tunda

; Panggil subrutin Tunda

MOV

P2,#10010000B

; Isi port 2 dengan data 10010000B (angka 9)

ACALL

Tunda

; Panggil subrutin Tunda

SJMP

Mulai

; Lompat ke label mulai (lakukan berulang)

;

Seven segmen akan menyala jika diberi logik 0

Tunda:

MOV

R5,# 250

; Isi Register 5 dengan data 250

Tunda1:

MOV

R6,#100

; Isi Register 6 dengan data 100

Tunda2:

MOV

R7,#10

; Isi Register 7 dengan data 10

DJNZ

R7,$

; Kurangi R7 dengan 1 sampai 0 *

DJNZ

R6,Tunda2

; Kurangi R6 jika belum 0 lompat ke label tunda2 **

DJNZ

R5,Tunda1

; Kurangi R7 jika belum 0 lompat ke label tunda1 ***

RET

; Kembali ke program utama

End

;

Waktu tunda ( siklus DJNZ = 2 µS) :

 

;

*

: 2 (R7) = 2 (10)

=

20 µS

;

**

: 2 (R7 x R6) = 2 (10 x 100)

=

2000 µS

;

*** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) =

500000 µS

;

------------- +

;

502020 µS

; 502020 µS 500 mS

500 mS

3. Merancang dan membuat rangkaian penggerak motor stepper dengan menggunakan Mikrokontroler a. Rangkaian penggerak motor stepper dengan menggunakan IC mikrokontroler AT89C51 yang bekerja pada port 1. Ikuti standar rangkaian seperti gambar dibawah.

b. Buatlah bahasa pemograman untuk penggerak motor stepper yang bergerak searah dengan jarum jam secara berulang-ulang dengan waktu tunda 500 mili detik.

c. Tulis bahasa pemograman yang telah dibuat dikomputer dengan menggunakan software Pinnacle. Kemudian simulasikan program tersebut secara software sampai tidak ada kesalahan.

d. Setelah progaram disimulasikan dan tidak ada kesalahan kemudian isikan program tersebut kedalam IC mikrokontroler dengan menggunakan programmer Atmel.

e. Selanjutnya pindahkan IC yang telah diprogram ke Emulator untuk disimulasikan secara hardware.

MOT OR ST E PPE R M1 D1 D2 D3 D4 1N4002 1N4002 1N4002 1N4002
MOT OR ST E PPE R
M1
D1
D2
D3
D4
1N4002
1N4002
1N4002
1N4002
Q1
Q2
Q3
Q4
BD140
BD140
BD140
BD140
5V
R1
R2
R3
R4
1
K
1
K
1
K
1
K
5V
AT 89C51
1
P1.0
2
40
VCC
39
P1.1
3
P0.0
38
P1.2
4
P0.1
37
P1.3
P0.2
5
P1.4
6
36
P0.3
35
P1.5
7
P0.4
34
P1.6
8
P0.5
33
P1.7
9
P0.6
32
RST
P0.7
10
P3.0
11
31
E A/VPP
5V
30
P3.1
12
AL E /PROG
29
PSE N
10K
P3.2
13
28
10uF
P3.3
14
P2.7
27
P3.4
15
P2.6
26
P3.5
16
P2.5
25
P3.6
17
P2.4
5V
24
P3.7
P2.3
18
XT AL 2
19
23
P2.2
22
XT AL 1
20
P2.1
21
GND
P2.0
11.0592MHz
33pF
33pF
+

Gambar 3. Rangkaian penggerak Stepper Motor

Bahasa Pemograman

ORG

0H

Mulai:

MOV

P1,#11111110B

ACALL Tunda

MOV

P1,#11111101B

ACALL Tunda

MOV

P1,#11111011B

ACALL Tunda

MOV

P1,#11110111B

ACALL Tunda

SJMP

Mulai

; Isi port 1 dengan data 11111110B

; Panggil subrutin Tunda

; Isi port 1 dengan data 11111101B

; Panggil subrutin Tunda

; Isi port 1 dengan data 11111011B

; Panggil subrutin Tunda

; Isi port 1 dengan data 11110111B

; Panggil subrutin Tunda

; Lompat ke label mulai (lakukan berulang)

; Motor akan berputar jika diberi logik 0.

Tunda:

MOV

R5,# 250

; Isi Register 5 dengan data 250

Tunda1:

MOV

R6,#100

; Isi Register 6 dengan data 100

Tunda2:

MOV

R7,#10

; Isi Register 7 dengan data 10

DJNZ

R7,$

; Kurangi R7 dengan 1 sampai 0 *

DJNZ

R6,Tunda2

; Kurangi R6 jika belum 0 lompat ke label tunda2 **

DJNZ

R5,Tunda1

; Kurangi R7 jika belum 0 lompat ke label tunda1 ***

RET

; Kembali ke program utama

End

; Waktu tunda ( siklus DJNZ = 2 µS) :

;

*

: 2 (R7) = 2 (10)

=

20 µS

;

**

: 2 (R7 x R6) = 2 (10 x 100)

=

2000 µS

;

*** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) =

500000 µS

;

------------- +

;

502020 µS

; 502020 µS 500 mS

500 mS

1.

Potongan program yang harus diganti agar motor bergerak berlawanan arah dengan jarum jam yaitu:

Mulai:

MOV

P1,#11110111B ; Isi port 1 dengan data 11110111B

 

ACALL Tunda

; Panggil subrutin Tunda

 

MOV

P1,#11111011B ; Isi port 1 dengan data 11111011B

 

ACALL Tunda

; Panggil subrutin Tunda

 

MOV

P1,#11111101B ; Isi port 1 dengan data 11111101B

 

ACALL Tunda

; Panggil subrutin Tunda

 

MOV

P1,#11111110B ; Isi port 1 dengan data 11111110B

 

ACALL Tunda

; Panggil subrutin Tunda

 

SJMP

Mulai

; Lompat ke label mulai (lakukan berulang)

 

; Motor akan berputar jika diberi logik 0.

 

2.

Program untuk menggerakan motor stepper searah dengan jarum jam 180º dengan waktu tunda 200 mili detik yaitu :

sejauh

ORG

0H

Mulai:

MOV

R0,#24

; Isi R0 dengan data 24 ( 180 o putaran)

Putar:

MOV

P1,#11110111B ; Isi port 1 dengan data 11110111B

ACALL Tunda

; Panggil subrutin Tunda

MOV

P1,#11111011B ; Isi port 1 dengan data 11111011B

ACALL Tunda

; Panggil subrutin Tunda

MOV

P1,#11111101B ; Isi port 1 dengan data 11111101B

ACALL Tunda

; Panggil subrutin Tunda

MOV

P1,#11111110B ; Isi port 1 dengan data 11111110B

ACALL Tunda

; Panggil subrutin Tunda

DJNZ

R0,Putar

; Kurangi R0 dengan 1 jika belum 0 lompat ke Putar

SJMP

$

; Lompat kedirinya sendiri (program berhenti)

; 1 putaran motor stepper terdapat 192 step, untuk menjalankan 180 o terdapat 96

; step. Dalam menjalankan motor stepper dilakukan setiap 4 step sekali. Sehingga

; untuk memutar 180 o terdapat 96 : 4 = 24 kali.

; Motor akan berputar jika diberi logik 0.

Tunda:

MOV

R5,#250

; Isi Register 5 dengan data 250

Tunda1:

MOV

R6,#40

; Isi Register 6 dengan data 40

Tunda2:

DJNZ

R7,$

; Kurangi R7 dengan 1 sampai 0

DJNZ

R6,Tunda2

; Kurangi R6 jika belum 0 lompat ke label tunda2

DJNZ

R5,Tunda1

; Kurangi R7 jika belum 0 lompat ke label tunda1

RET

; Kembali ke program utama

End

; Waktu tunda ( siklus DJNZ = 2 µS) :

;

*

: 2 (R7) = 2 (10)

=

20 µS

;

**

: 2 (R7 x R6) = 2 (10 x 40)

=

800 µS

;

*** : 2 (R7 x R6 x R5) = 2 (10 x 40 x 250)

= 200000 µS

 

;

------------- +

;

200820 µS

; 200820 µS 200 mS

200 mS

2. Soal Latihan

1. Jelaskan organisasi memori pada mikrokontroler 89C51!

2. Jelaskan perbedaan antara direct addressing dengan indirect addressing dan berikan contohnya !

3. Jelaskan 6 mode penglaman pada mikrokontroler 89C51 serta dilengkapi dengan contoh setiap modenya!

4. Bila Program Status Word berisi 18 h.yang terdapat pada RAM Internal 89C51 bank register berapa yang terpilih!

5. Dari alamat berapakah Special Function Register dapat dialamati dan pada alamat berapa!

6. Jelaskan fungsi dari pin PSEN dan AE pada mikrokontroler 89C51!

7. Buat program untuk mengurangkan bilangan yang berada pada lokasi memori 2000 dengan bilangan pada lokasi memori 2001!

8.

Jelaskan yang dimaksud Idle Mode dan power down mode pada mikrokontroler

89C51!

9. Buat program untuk menjumlahkan bilangan pada R 0 = 137, R 1 = 33, dan

R 3 = 56 !

10. Buat program untuk membagi bilangan pada R 0 : R 1 : R 2. (R 0 = 100; R 1 = 2 ;

dan R 2 = 10)!

11. Jelaskan program dibawah ini :

SMOD 51

MAIN

CPL P 1,0

DELAY DE LAY 1 DELAY 2

CALL DELAY JMP MAIN MOV R 7 , # 50 MOV R 6 , # 100 MOV R 5 , # 100.

END.

DJNZ R 5, $ DJNZ R 6, DELAY 2 DJNZ R 7, DELAY 1 RET

13. Jelaskan program dibawah ini

ORG

0H

Mulai:

MOV

ACALL Tunda

MOV

ACALL Tunda

MOV

ACALL Tunda

MOV

ACALL Tunda

P0,#11100111B

P0,#11011011B

P0,#10111101B

P0,#01111110B

SJMP

Mulai.

RET

END.

Referensi :

1. Sencer, (1997). Programming Interfacing 8051 Microcontroller. Mc Graw Hill.

2. Intel, (1994). MCS’51 Microcontroller Family User Manual.

3. Myke Predko, (1995). Programming and Custumizing The 8051 Microcontroller. Mc Graw Hill.

4. Allen l Wyatt, (1995). Using Assembly Language. Que

5. Atmel, (2005). Data Book Microcontroller.

6. Ramakart Gayakwad, Leonard Sokolof. (1988). Analog and Digital Control Systems. Canada : Prentice- HallInternational, Inc.

7. Greenfield, Joseph D.(1992). The 68HC11 Microcontroller. Orlando, FL:

8. Peter Spasov, (2002). Microcontroller Technology: The 68HC11, Prentice- Hall. ISBN: 0-13-019579.

9. Toto Budiono (2005). Pemograman Bahasa C dgn SDCC. Gaya Media.

10. 89C51 Development Tools DT51 Version 3. User”S Guide. Manual Book.

11. Agus Bejo, (2008). C & AVR Rahasia Kemudahan Bahasa C dalam mikrokontroler ATMega 8535. Graha Ilmu. Yogyakarta.

12. Totok Budioko, ( 2005). Belajar dengan mudah dan cepat Pemograman Bahasa C dengan SDCC ( Small Device C Compiler).Penerbit Gaya Media. Yogyakarta.

13. Agfianto Eko Putra, (2004). Belajar Mikrokontroler AT 89C51/52/55. Penerbit Gaya Media. Yogyakarta.