Contoh Contoh

Oleh Pendekar2000 Kebangkitan Islam

20 tayangan
Bagikan artikel

Transkrip Contoh Contoh

CONTOH-CONTOH PROGRAM MIKROKONTROLER
Yoyo Somantri dan Erik Haritman
Dosen Jurusan Pendidikan Teknik Elektro
FPTK Universitas Pendidikan Indonesia

Pendahuluan
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
$mod51
mulai:

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
$mod51
mulai:

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
; Program Lampu berjalan pada Port 0

$mod51
mulai:

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:

mov r0,#0

delay1:

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
$mod51
mulai:
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
$mod51
mulai:
mov a,#11111111b
mulai1:
rlc

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

Aplikasi pada 7 Segment
1. Program –1
$mod51
org

0h

mov

p2,#11000000b

clr

p1.4

call

delay

mov

p2,#11110011b

call

delay

mov

p2,#10001001b

call

delay

mov

p2,#10100001b

call

delay

mov

p2,#10110010b

call

delay

mov

p2,#10100100b

call

delay

mov

p2,#10000100b

main:
;0

;1

;2

;3

;4

;5

;6

call

delay

mov

p2,#11110001b

call

delay

mov

p2,#10000000b

call

delay

mov

p2,#10100000b

call

delay

jmp

main

mov

r7,#100

;7

;8

;9

delay:

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

mov

p2,#11000000b

setb

p1.4

main:
;0

call

delay

mov

p2,#11110011b

call

delay

mov

p2,#10001001b

call

delay

mov

p2,#10100001b

call

delay

mov

p2,#10110010b

call

delay

mov

p2,#10100100b

call

delay

mov

p2,#10000100b

call

delay

mov

p2,#11110001b

call

delay

mov

p2,#10000000b

call

delay

mov

p2,#10100000b

call

delay

jmp

main

mov

r7,#100

delay:

delay_loop1:
mov

r6,#100

delay_loop2:
mov

r5,#100

djnz

r5,$

;1

;2

;3

;4

;5

;6

;7

;8

;9

djnz

r6,delay_loop2

djnz

r7,delay_loop1

ret
end

3. Program -3
$mod51
Counter_Low equ
Counter_High
Scanning

30h
equ

equ

org

0

mov

Counter_Low,#0

mov

Counter_High,#0

mov

Scanning,#100

main:

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

31h
32h

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

ret
TabelData_3:

;2

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

TabelData_Out:

;9

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
P1.3

1

2

3

4

5

6

7

8

P1.2
P1.1
P1.0

9

0 A B

C d

E F

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

jb

p3.6,key_6

mov

p2,#10000100b;6

key_5:

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

jb

p3.6,key_10

mov

p2,#11000000b;0

ljmp

mulai

key_9:

key_10:
jb

p3.5,key_11

mov

p2,#10010000b

ljmp

mulai

;A

key_11:
jb

p3.4,key_12

mov

p2,#10000110b

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:

;b

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.

5V
AT 8 9C5 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

5V

+
1 0u F

1 0K

P1. 0
VCC
P1. 1
P0. 0
P1. 2
P0. 1
P1. 3
P0. 2
P1. 4
P0. 3
P1. 5
P0. 4
P1. 6
P0. 5
P1. 7
P0. 6
RST
P0. 7
P3. 0
E A/VPP
P3. 1 AL E /PROG
P3. 2
PSE N
P3. 3
P2. 7
P3. 4
P2. 6
P3. 5
P2. 5
P3. 6
P2. 4
P3. 7
P2. 3
XT AL 2
P2. 2
XT AL 1
P2. 1
GND
P2. 0

40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21

8 x1 50

8 xL E D

5V

1 1. 0 59 2M Hz

3 3p F

3 3p F

Gambar 1. Rangkaian Untuk Menyalakan Led 8 buah.

Bahasa Pemograman
a) Lampu berjalan yang bergerak satu per satu dari kiri kekanan secara berulangulang.
ORG

0H

; Awal program dimulai pada alamat 0H

A,#07FH

; Isi Akumululator dengan data 7FH

Mulai:
MOV
Putar:
MOV
RR

P0,A

; Salin data dari Akumuklator ke P0 (nyalakan 1

A

ACALL Tunda
SJMP

Putar

lampu)

; Putar 1 bit data pada Akumulator ke arah kanan
; Panggil subrutin tunda untuk waktu Tunda

penyalaan

; Lompat ke label mulai (lakukan secara berulang)

; Led akan nyala jika diberi logik 0
Tunda:
MOV

R5,# 250

; Isi Register 5 dengan data 250

R6,#100

; Isi Register 6 dengan data 100

Tunda1:
MOV
Tunda2:
MOV

R7,#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

; Isi Register 7 dengan data 10

; 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

500 mS

b) Bahasa pemogramannya jika lampu ingin bergerak dari kanan ke kiri yaitu
Mulai:
MOV

A,#0FEH

; Intruksi yang diganti

Putar:
MOV
RL

P0,A
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

0H

; Awal program dimulai pada alamat 0H

Mulai:
MOV

P0,#11100111B

ACALL Tunda
MOV

; Panggil subrutin Tunda

P0,#11011011B

ACALL Tunda

; Isi port 0 dengan data 11100111B

; Isi port 0 dengan data 11011011B

; Panggil subrutin Tunda

MOV

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

ACALL Tunda
MOV

; Panggil subrutin Tunda

P0,#01111110B

; Isi port 0 dengan data 01111110B

ACALL Tunda

; Panggil subrutin Tunda

SJMP

; Lompat ke label mulai (lakukan berulang)

Mulai

; 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)

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

=
=

20 µS

800 µS

; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 200000 µ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.

5V
AT 8 9C5 1

+
1 0u F

1 0K

P1. 0
VCC
P1. 1
P0. 0
P1. 2
P0. 1
P1. 3
P0. 2
P1. 4
P0. 3
P1. 5
P0. 4
P1. 6
P0. 5
P1. 7
P0. 6
RST
P0. 7
P3. 0
E A/VPP
P3. 1 AL E /PROG
P3. 2
PSE N
P3. 3
P2. 7
P3. 4
P2. 6
P3. 5
P2. 5
P3. 6
P2. 4
P3. 7
P2. 3
XT AL 2
P2. 2
XT AL 1
P2. 1
GND
P2. 0

40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21

5V

8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

5V

8 x1 50

7
6
5
4
3
2
1

DPY
a

g
f
d
c
e
b
a

f
e

g
d

b
c

[LEDgn]

1 1. 0 59 2M Hz

3 3p F

3 3p F

Gambar 2. Rangkaian Counter dengan display seven segment
.

Bahasa Pemograman

ORG

0H

; Awal program dimulai pada alamat 0H

Mulai:
MOV

P2,#11000000B

ACALL Tunda
MOV

; Panggil subrutin Tunda

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

ACALL Tunda
MOV

MOV

MOV

MOV

MOV

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

; Panggil subrutin tunda

P2,#10000000B

ACALL Tunda

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

; Panggil subrutin Tunda

P2,#11111000B

ACALL Tunda

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

; Panggil subrutin Tunda

P2,#10000010B

ACALL Tunda

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

; Panggil subrutin Tunda

P2,#10010010B

ACALL Tunda

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

; Panggil subrutin Tunda

P2,#10011001B

ACALL Tunda
MOV

; Panggil subrutin Tunda

P2,#10110000B

ACALL Tunda
MOV

; Panggil subrutin Tunda

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

ACALL Tunda
MOV

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

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

; Panggil subrutin Tunda

P2,#10010000B

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

ACALL Tunda

; Panggil subrutin Tunda

SJMP

; Lompat ke label mulai (lakukan berulang)

Mulai

; Seven segmen akan menyala jika diberi logik 0
Tunda:
MOV

R5,# 250

; Isi Register 5 dengan data 250

R6,#100

; Isi Register 6 dengan data 100

Tunda1:
MOV
Tunda2:
MOV

R7,#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

; Isi Register 7 dengan data 10

; Kembali ke program utama

End

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

: 2 (R7) = 2 (10)

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

=

20 µS

=

2000 µS

; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 500000 µS
;

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

;

502020 µS

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.
M OT OR ST E PPE R

M1
D1
1 N40 02

D2
1 N40 02

Q1
BD1 40

D3
1 N40 02

D4
1 N40 02

Q2
BD1 40

Q3
BD1 40

Q4
BD1 40

5V

R1
1 K

R2
1 K

R3
1 K

R4
1 K

5V
AT 8 9C5 1

1 0K

+

1 0u F

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

5V

P1. 0
VCC
P1. 1
P0. 0
P1. 2
P0. 1
P1. 3
P0. 2
P1. 4
P0. 3
P1. 5
P0. 4
P1. 6
P0. 5
P1. 7
P0. 6
RST
P0. 7
P3. 0
E A/VPP
P3. 1 AL E /PROG
P3. 2
PSE N
P3. 3
P2. 7
P3. 4
P2. 6
P3. 5
P2. 5
P3. 6
P2. 4
P3. 7
P2. 3
XT AL 2
P2. 2
XT AL 1
P2. 1
GND
P2. 0

40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21

5V

1 1. 0 59 2M Hz

3 3p F

3 3p F

Gambar 3. Rangkaian penggerak Stepper Motor

Bahasa Pemograman

ORG

0H

Mulai:
MOV

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

ACALL Tunda
MOV

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

ACALL Tunda
MOV

; Panggil subrutin Tunda

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

ACALL Tunda
MOV

; Panggil subrutin Tunda

; Panggil subrutin Tunda

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

ACALL Tunda

; Panggil subrutin Tunda

SJMP

; Lompat ke label mulai (lakukan berulang)

Mulai

; Motor akan berputar jika diberi logik 0.
Tunda:
MOV

R5,# 250

; Isi Register 5 dengan data 250

R6,#100

; Isi Register 6 dengan data 100

Tunda1:
MOV
Tunda2:
MOV

R7,#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
End

; Isi Register 7 dengan data 10

; Kembali ke program utama

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

: 2 (R7) = 2 (10)

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

=

20 µS

=

2000 µS

; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 500000 µS
;

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

;

502020 µS

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 sejauh
180º dengan waktu tunda 200 mili detik yaitu :

ORG

0H

Mulai:
MOV

R0,#24

; Isi R0 dengan data 24 ( 180o putaran)

Putar:
MOV

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

ACALL Tunda
MOV

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

ACALL Tunda
MOV

; Panggil subrutin Tunda

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

ACALL Tunda
MOV

; Panggil subrutin Tunda

; Panggil subrutin Tunda

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 180o terdapat 96
; step. Dalam menjalankan motor stepper dilakukan setiap 4 step sekali. Sehingga
; untuk memutar 180o 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

R7,#10

; Isi Register 7 dengan data 10

Tunda2:
MOV

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)

=

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

20 µS
=

800 µS

; *** : 2 (R7 x R6 x R5) = 2 (10 x 40 x 250) = 200000 µS
;

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

;

200820 µS

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 R0 = 137, R1 = 33, dan
R3 = 56 !
10. Buat program untuk membagi bilangan pada R
dan R2 = 10)!
11. Jelaskan program dibawah ini :
SMOD 51
MAIN
CPL P1,0
CALL DELAY
JMP MAIN
DELAY
MOV R7, # 50
DE LAY1 MOV R 6, # 100
DELAY 2 MOV R 5, # 100.
DJNZ R5, $
DJNZ R 6, DELAY 2
DJNZ R 7, DELAY 1
RET
END.
13. Jelaskan program dibawah ini
ORG

0H

Mulai:
MOV

P0,#11100111B

ACALL Tunda
MOV

P0,#11011011B

ACALL Tunda
MOV

P0,#10111101B

ACALL Tunda
MOV

P0,#01111110B

ACALL Tunda
SJMP
RET
END.

Mulai.

0 :

R

1:

R

2.

(R0 = 100; R1 = 2 ;

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, PrenticeHall. 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.

Judul: Contoh Contoh

Oleh: Pendekar2000 Kebangkitan Islam


Ikuti kami