You are on page 1of 46

SEKOLAH MENENGAH KEJURUAN No. Form.

: F:ISO-KUR-06
NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance I

LED MATRIX

Gambar 1.(a). Rangkain LED Matrix

Gambar 1.(b). Konfigurasi LED Matrix

39
Gambar 1.(c). Bentuk LED Matrix 5x7

PROGRAM LED MATRIX 1

$mod51
clr P3.6
mov P0,#0ffh
mov P1,#0ffh
Main_0:
mov R0,#8
mov R1,#5
mov b,#0feh
mov P1,b
Main_1:
clr a
setb c
Main_2:
mov P0,a
call Delay
djnz R0,Main_3
mov R0,#8
mov a,b
rl a
mov P1,a
mov b,a
djnz R1,Main_1
jmp Main_0
Main_3:
rlc a
jmp Main_2
delay: mov r5,#8
loop15: mov r6,#100
loop16: mov r7,#100
loop17: djnz r7,loop17
djnz r6,loop16
djnz r5,loop15
ret
end

40
PROGRAM LED MATRIX 2

$mod51
clr P3.6
mov P0,#0ffh
mov P1,#0ffh
Main_0:
mov R0,#6
mov R1,#7
mov b,#01
mov P0,b
Main_1:
; clr a
mov a,#0ffh
clr c
Main_2:
mov P1,a
call Delay
djnz R0,Main_3
mov R0,#6
mov a,b
rl a
mov P0,a
mov b,a
djnz R1,Main_1
jmp Main_0
Main_3:
rlc a
jmp Main_2
delay: mov r5,#8
loop15: mov r6,#100
loop16: mov r7,#100
loop17: djnz r7,loop17
djnz r6,loop16
djnz r5,loop15
ret
end

PROGRAM LED MATRIX 3


$mod51
;----------------------------------------------------------
; Deklarasi Konstanta
;----------------------------------------------------------
EN bit P3.6
Stack equ 60h
Scan_Data equ 20
;----------------------------------------------------------

41
; Alokasi Memori byte
;----------------------------------------------------------
DSEG AT 30h
BuffCount: DS 1
BuffCol: DS 1
BuffScan: DS 1
BuffDsp: DS 5
;----------------------------------------------------------
CSEG
org 0
jmp Main
org 0bh
jmp IntTmr0
; org 1bh
; jmp IntTmr1
org 30h
Main:
clr EN
mov SP,#Stack
mov TMOD,#02h
setb ET0
setb TR0
setb EA
mov BuffCol,#0feh
mov R1,#BuffDsp
mov BuffScan,#Scan_Data
mov BuffCount,#0
call GetData
Main_1:
call Delay
inc BuffCount
call GetData
mov a,BuffCount
cjne a,#10,Main_1
mov BuffCount,#0
call GetData
sjmp Main_1
;----------------------------------------------------------
IntTmr0: djnz BuffScan,IntTmr0_Out
mov BuffScan,#Scan_Data
mov P1,#0ffh
call Delay_Flicker
mov P0,@R1
mov P1,BuffCol
push acc
mov a,Buffcol
cjne a,#0efh,IntTmr0_1
mov BuffCol,#0feh
mov R1,#BuffDsp
pop acc
reti
IntTmr0_1: inc R1
rl a
mov BuffCol,a
pop acc
IntTmr0_Out:
reti

42
;----------------------------------------------------------
GetData: mov DPTR,#DataBase_0
mov R0,#BuffDsp
mov a,BuffCount
mov b,#5
mul ab
clr c
add a,DPL
mov DPL,a
clr a
addc a,DPH
mov DPH,a
;
mov R2,#5
GetData_1:
clr a
movc a,@a+DPTR
mov @R0,a
djnz R2,GetData_2
ret
GetData_2:
inc DPTR
inc R0
sjmp GetData_1
;----------------------------------------------------------
delay: mov r5,#65
loop15: mov r6,#100
loop16: mov r7,#100
loop17: djnz r7,loop17
djnz r6,loop16
djnz r5,loop15
ret
Delay_Flicker:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ret
;----------------------------------------------------------
DataBase_0: db 2eh,51h,49h,45h,2eh ; 0
DataBase_1: db 0,42h,0ffh,40h,0 ; 1
DataBase_2: db 42h,61h,51h,49h,46h ; 2
DataBase_3: db 21h,41h,45h,4bh,31h ; 3
DataBase_4: db 18h,14h,12h,7fh,10h ; 4
DataBase_5: db 27h,45h,45h,45h,39h ; 5
DataBase_6: db 3ch,4ah,49h,49h,30h ; 6
DataBase_7: db 1,71h,9,5,3 ; 7
DataBase_8: db 36h,49h,49h,49h,36h ; 8
DataBase_9: db 6,49h,49h,29h,1eh ; 9

43
End

SEKOLAH MENENGAH KEJURUAN No. Form. : F:ISO-KUR-06


NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance II

MOTOR STEPER

44
Motor stepper adalah perangkat elektromekanis yang bekerja dengan mengubah pulsa
elektronis menjadi gerakan mekanis diskrit. Motor stepper bergerak berdasarkan urutan
pulsa yang diberikan kepada motor. Karena itu, untuk menggerakkan motor stepper
diperlukan pengendali motor stepper yang membangkitkan pulsa-pulsa periodik.
Penggunaan motor stepper memiliki beberapa keunggulan dibandingkan dengan
penggunaan motor DC biasa. Keunggulannya antara lain adalah : 

 Sudut rotasi motor proporsional dengan pulsa masukan sehingga lebih mudah diatur.
 Motor dapat langsung memberikan torsi penuh pada saat mulai bergerak

 Posisi dan pergerakan repetisinya dapat ditentukan secara presisi

 Memiliki respon yang sangat baik terhadap mulai, stop dan berbalik (perputaran)

 Sangat realibel karena tidak adanya sikat yang bersentuhan dengan rotor seperti pada
motor DC

 Dapat menghasilkan perputaran yang lambat sehingga beban dapat dikopel langsung
ke porosnya

 Frekuensi perputaran dapat ditentukan secara bebas dan mudah pada range yang
luas.

 Pada dasaranya terdapat 3 tipe motor stepper yaitu: 

 1.      Motor stepper tipe Variable reluctance (VR)

Motor stepper jenis ini telah lama ada dan merupakan jenis motor yang secara
struktural paling mudah untuk dipahami. Motor ini terdiri atas sebuah rotor
besi lunak dengan beberapa gerigi dan sebuah lilitan stator. Ketika lilitan
stator diberi energi dengan arus DC, kutub-kutubnya menjadi termagnetasi.
Perputaran terjadi ketika gigi-gigi rotor tertarik oleh kutub-kutub stator.
Berikut ini adalah penampang melintang dari motor stepper tipe variable
reluctance (VR):

45
Gambar 2.1 Penampang melintang dari motor stepper tipe variable
reluctance (VR)

2.      Motor stepper tipe Permanent Magnet (PM)

Motor stepper jenis ini memiliki rotor yang berbentuk seperti kaleng bundar
(tin can) yang terdiri atas lapisan magnet permanen yang diselang-seling
dengan kutub yang berlawanan (perhatikan gambar 2.2). Dengan adanya
magnet permanen, maka intensitas fluks magnet dalam motor ini akan
meningkat sehingga dapat menghasilkan torsi yang lebih besar. Motor jenis
ini biasanya memiliki resolusi langkah (step) yang rendah yaitu antara
7,50 hingga 150 per langkah atau 48 hingga 24 langkah setiap putarannya.
Berikut ini adalah ilustrasi sederhana dari motor stepper tipepermanent
magnet:

46
Gambar 2.2 Ilustrasi sederhana dari motor stepper tipe permanent magnet (PM)

3.      Motor stepper tipe Hybrid (HB)

Motor stepper tipe hibrid memiliki struktur yang merupakan kombinasi dari
kedua tipe motor stepper sebelumnya. Motor stepper tipe hibrid memiliki gigi-
gigi seperti pada motor tipe VR dan juga memiliki magnet permanen yang
tersusun secara aksial pada batang porosnya seperti motor tipe PM. Motor tipe
ini paling banyak digunkan dalam berbagai aplikasi karena kinerja lebih baik.
Motor tipe hibrid dapat menghasilkan resolusi langkah yang tinggi yaitu
antara 3,60 hingga 0,90per langkah atau 100-400 langkah setiap putarannya.
Berikut ini adalah penampang melintang dari motor stepper tipe hibrid:

Gambar 2.3 Penampang melintang dari motor stepper tipe hibrid

47
Berdasarkan metode perancangan rangkain pengendalinya, motor stepper dapat dibagi
menjadi jenis unipolar dan bipolar. Rangkaian pengendali motor stepper unipolar lebih
mudah dirancang karena hanya memerlukan satu switch / transistor setiap lilitannya.
Untuk menjalankan dan menghentikan motor ini cukup dengan menerapkan  pulsa digital
yang hanya terdiri atas tegangan positif dan nol (ground) pada salah satu terminal lilitan
(wound) motor sementara terminal lainnya dicatu dengan tegangan positif konstan (V M)
pada bagian tengah (center tap) dari lilitan (perhatikan gambar 2.4).

Gambar 2.4 Motor stepper dengan lilitan unipolar

Untuk motor stepper dengan lilitan bipolar, diperlukan sinyal pulsa yang berubah-ubah
dari positif ke negatif dan sebaliknya. Jadi pada setiap terminal lilitan (A & B) harus
dihubungkan dengan sinyal yang mengayun dari positif ke negatif dan sebaliknya
(perhatikan gambar 2.5). Karena itu dibutuhkan rangkaian pengendali yang agak lebih
kompleks daripada rangkaian pengendali untuk motor unipolar. Motor stepper bipolar
memiliki keunggulan dibandingkan dengan motor stepper unipolar dalam hal torsi yang
lebih besar untuk ukuran yang sama.

48
Gambar 2.5 Motor stepper dengan lilitan bipolar

II. Pengendali Motor Stepper

  Berikut ini akan diberikan contoh perancangan dan perhitungan rangkaian pengendali
motor stepper sederhana. Motor stepper yang digunkan pada contoh ini bertipe hibrid
unipolar, memiliki empat fasa dan panjang langkah sebesar 1,80 per langkahi. Motor
diharapkan dapat berputar dalam dua arah dan memiliki dua kecepatan. Karena itu
diperlukan pengendali motor stepper yang memiliki empat keluaran pulsa dengan
kemampuan dua arah perputaran dan dua macam frekuensi pulsa guna mengatur kecepatan
motor.

Rangkaian pengendali motor stepper (stepper motor driver) menggunakan komponen


utama berupa sebuah IC logika XOR (74LS86) dan sebuah IC JK flip-flop (74LS76).
Rangkain dengan kedua IC tersebut berfungsi untuk menghasilkan empat pulsa keluaran
berurutan yang dapat berbalik urutannya dengan menerapkan logika tertentu pada
rangkaian. Rangkaian tersebut memerlukan pulsa clock untuk dapat beroperasi. Sebagai
sumber clock digunkan rangkaian berbasis IC timer 555. Rangkain pembangkit clock ini
dapat menghasilkan dua macam frekuensi pulsa keluaran guna mendukung dua kecepatan
motor stepper. Kemudian untuk mendukung pulsa-pulsa dengan arus besar (sekitar 1 - 3
A) digunakan transistor daya NPN tipe TIP31 sebagaisolid state switch. Untuk lebih
jelasnya perhatikanlah rangkaian utama dari pengendali motor stepper di bawah ini
(gambar 2.6):

  

Gambar 2.6 Skema rangkaian pengendali motor steppper

49
 Gambar 2.6 di atas adalah skema rangkaian pengendali motor stepper yang dapat
bergerak ke dua arah. Keluaran pengendali motor stepper ini ada empat (pena 15, 14, 11,
10 dari IC 74LS76). Pena-pena tersebut akan menghasilkan pulsa yang dapat
menggerakkan motor stepper. Berikut ini adalah ilustrasi struktur motor stepper
sederhana dan pulasa yang dibutuhkan untuk menggerakkannya:

                                

        
                                 

Gambar 2.7. (a) bentuk pulsa keluaran dari pengendali motor stepper (b) penerapan pulsa
pengendali pada motor stepper dan arah putaran yang bersesuaian

 Arah putaran motor dapat diatur dengan mengatur kondisi logika masukan pada pena 13
dari IC 74LS86. Jika diterapkan logika 0, maka motor akan berputar berlawanan dengan
arah jarum jam (counter clock wise) sedangkan jika diterapkan logika 1, maka motor
akan berputar dengan arah sesuai dengan ajah jarum jam (clockwise). Gambar 2.7.a di
atas adalah contoh bentuk pulsa keluaran yang menggerakkan motor stepper pada arah
sesuai dengan jarum jam (clockwise) (Gambar 2.7.b).

50
Gambar (a)

Gambar (b)

Gambar (c)
Gambar 2.8.(a). Rangkaian Motor Steper ULN2003, (b) Gambar urutan pemberian
sinyal, (c). Gambar Urutan warna kabel Motor stepper.

51
PROGRAM MOTOR STEPER

$mod51
;----------------------------------------------------------
; Deklarasi Konstanta
;----------------------------------------------------------
A1 bit P2.0
B1 bit P2.1
C1 bit P2.2
D1 bit P2.3
;----------------------------------------------------------
org 0
mov P1,#0ffh
clr P3.6
setb P2.7
mov SP,#60h
MainLoop: call Stepper_1_Kiri
call Delay_500ms
call Stepper_1_Kanan
call Delay_500ms
sjmp MainLoop
;----------------------------------------------------------
Stepper_1_Kiri:
mov R2,#150
Stepper_1_Kiri_1:
clr D1
setb A1
call Delay10ms
clr A1
setb B1
call Delay10ms
clr B1
setb C1
call Delay10ms
clr C1
setb D1
call Delay10ms
djnz R2,Stepper_1_Kiri_1
ret
;---------------------------------------------------------------
Stepper_1_Kanan:
mov R2,#150
Stepper_1_Kanan_1:
clr A1
setb D1
call Delay10ms
clr D1
setb C1
call Delay10ms
clr C1
setb B1
call Delay10ms
clr B1
setb A1
call Delay10ms
djnz R2,Stepper_1_Kanan_1

52
ret
;----------------------------------------------------------
; Delay Area
;----------------------------------------------------------
Delay20ms:
mov r7,#100
Loop1:
mov r6,#200
djnz r6,$
djnz r7,Loop1
ret
Delay10ms:
mov r7,#5
Loop:
mov r6,#100
djnz r6,$
djnz r7,Loop
ret
Delay1ms:
mov r6,#100
djnz r6,$
ret
Delay_500ms:
mov R7,#50
Delay_500ms_1:
mov R6,#100
Delay_500ms_2:
mov R5,#100
djnz R5,$
djnz R6,Delay_500ms_2
djnz R7,Delay_500ms_1
ret
Delay_1s:
call Delay_500ms
call Delay_500ms
ret
;----------------------------------------------------------
End

53
SEKOLAH MENENGAH KEJURUAN No. Form. : F:ISO-KUR-06
NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance III

MOTOR DC

Gambar 3(a). Rangkaian Driver Motor DC menggunakan Transistor NPN

54
Gambar 3(b). Rangkaian Driver Motor DC menggunakan IC L293D

Gambar 3(c). Rangkaian Driver Motor DC menggunakan Relay DPDT

PROGRAM MOTOR DC
$mod51
main:
setb P2.6
call Delay_1s
call Delay_1s
clr P2.6
call Delay_1s
call Delay_1s
jmp main

Delay_500ms:
mov R7,#50
Delay_500ms_1:
mov R6,#100
Delay_500ms_2:
mov R5,#100
djnz R5,$
djnz R6,Delay_500ms_2
djnz R7,Delay_500ms_1
ret
Delay_1s:
call Delay_500ms
call Delay_500ms
ret
end

SEKOLAH MENENGAH KEJURUAN No. Form. : F:ISO-KUR-06


NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri

55
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance IV

LCD

Mode 8 BIT

Gambar 4.(a). LCD 16 karakter

Gambar 4.(b) Rangkaian LCD 16 karakter

56
PROGRAM LCD
$mod51
;----------------------------------------------------------
; Deklarasi Konstanta
;----------------------------------------------------------
EN bit P3.6
RS bit P3.7
Stack equ 60h
Pertama equ 80h
Kedua equ 0c0h
DataBusLcd equ P0
;PortAdc equ P1
;Scan_Data equ 20
;----------------------------------------------------------
; Alokasi Memori byte
;----------------------------------------------------------
DSEG AT 30h
;BuffCount: DS 1
;BuffCol: DS 1
;BuffScan: DS 1
;BuffDsp: DS 5
;----------------------------------------------------------
CSEG
org 0
mov P1,#0ffh
clr EN
mov SP,#Stack
call InitLCD
call TampilkanMessage1
; mov a,#'0'
; call WriteData
sjmp $
;----------------------------------------------------------
InitLcd:
call Delay10ms
mov ACC,#3fh
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
mov ACC,#38h
call Write2Reg
mov ACC,#1
call Write2Reg
mov ACC,#6
call Write2Reg
mov ACC,#Pertama ;***** Baris Pertama
call Write2Reg ; *****
call OnLcd
ret
;----------------------------------------------------------
WriteDataLcd:
push ACC

57
WriteDataLcd1:
clr A
movc A,@A+DPTR
jz SelesaiWriteDataLcd
call WriteData
inc DPTR
jmp WriteDataLcd1
SelesaiWriteDataLcd:
pop ACC
ret
;----------------------------------------------------------
ClearLcd:
push ACC
mov ACC,#1
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
OnLcd:
push ACC
mov ACC,#0ch
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
BarisPertama:
mov a,#Pertama
call Write2Reg
ret
;----------------------------------------------------------
BarisKedua:
mov a,#Kedua
call Write2Reg
ret
;----------------------------------------------------------
Write2Reg:
call Delay10ms
clr RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
ret
;----------------------------------------------------------
WriteData:
setb RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
ret
;----------------------------------------------------------
TampilkanMessage1:
mov DPTR,#Msg1
call WriteDataLcd

58
call BarisKedua
mov DPTR,#Msg2
call WriteDataLcd
ret
Msg1: db ' TEST BARIS 1 ',0
Msg2: db ' TEST BARIS 2 ',0
;----------------------------------------------------------
Delay10ms:
mov r7,#5
Loop:
mov r6,#100
djnz r6,$
djnz r7,Loop
ret
Delay1ms:
mov r6,#100
djnz r6,$
ret

end

Mode 4 BIT

;*****************************************************************
ORG 00H
LJMP Mulai

;**********************
;*** Seting display ***
;**********************

ClearDisplay EQU 001H


CursorHome EQU 002H
EntryMode EQU 007H
DisplayOFF EQU 008H
DisplayON EQU 00CH
ShiftRight EQU 01CH
ShiftLeft EQU 018H
FunctionSet EQU 038H
LineOne EQU 080H
LineTwo EQU 0C0H

59
;***************
RS BIT P1.0
RW BIT P1.1
E BIT P1.2
BL BIT P1.3

;***************
ORG 10H
Mulai:
;CLR BL
CLR RW
CLR E
LCALL SetingLCD
loop:
MOV R1,#LineOne
MOV A,R1
LCALL KirimPerintah
MOV DPTR,#Karakter1
LCALL KirimPesan
MOV R1,#LineTwo
MOV A,R1
LCALL KirimPerintah
MOV DPTR,#Karakter2
LCALL KirimPesan

berhenti:
clr BL
sjmp berhenti
;***************
SetingLCD:
MOV A,#CursorHome
LCALL KirimPerintah
MOV A,#EntryMode
LCALL KirimPerintah
MOV A,#FunctionSet
LCALL KirimPerintah
MOV A,#DisplayOFF
LCALL KirimPerintah
MOV A,#ClearDisplay
LCALL KirimPerintah
MOV A,#DisplayON
LCALL KirimPerintah
MOV A,#06h
LCALL KirimPerintah
;MOV A,#0EH
;LCALL KirimPerintah
RET

;***************
KirimPesan:
;MOV A,#ClearDisplay
;LCALL KirimPerintah
;MOV A,#LineOne
;CALL KirimPerintah

Send:
CLR A

60
MOVC A,@A+DPTR
CJNE A,#'z',Kirim
Ret
Kirim:
LCALL KirimKarakter
INC DPTR
SJMP Send
;***************
KirimPerintah:
CLR RS
SETB E
MOV P0,A
CLR E
LCALL Delay
RET

;****************
KirimKarakter:
SETB RS
SETB E
MOV P0,A
CLR E
LCALL Delay
RET

Delay:
MOV R6,#50
Delay1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,Delay1
RET

;**************
Karakter1:
DB 'TEST LCD SMT51v1','x'
Karakter2:
DB '* Nama Saya *','z'

END

61
SEKOLAH MENENGAH KEJURUAN No. Form. : F:ISO-KUR-06
NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance V

ADC

Gambar 5. Rangkaian Temperatur Digital

PROGRAM APLIKASI ADC


$mod51
;----------------------------------------------------------
; Deklarasi Konstanta
;----------------------------------------------------------
EN bit P3.6
RS bit P3.7
CSAdc bit P2.7
RunAdc bit P3.4
Stack equ 60h
Pertama equ 80h
Kedua equ 0c0h
DataBusLcd equ P0
DataBusAdc equ DataBusLcd
;----------------------------------------------------------
BSEG
FlagDataValidAdc: dbit 1
FlagReadAdc: dbit 1
;----------------------------------------------------------
; Alokasi Memori byte
;----------------------------------------------------------
DSEG AT 30h

62
BuffDataAdc: ds 1
BuffCountAdc: ds 1
BuffCountAdc1: ds 2
BuffSamplingADC: ds 1
;----------------------------------------------------------
CSEG
org 0
jmp Main
org 0bh
jmp IntTmr0
org 30h
Main:
mov P1,#0ffh
clr EN
setb CSAdc
clr RunAdc
nop
nop
nop
setb RunAdc
mov SP,#Stack
call Init
call InitLCD
call TampilkanMessage1
call Delay_1s
call Delay_1s
call ClearLcd
call MsgAdc
MainLoop: jnb FlagReadAdc,MainLoop_1
clr FlagReadAdc
call ReadAdc
MainLoop_1:
jnb FlagDataValidAdc,MainLoop
clr FlagDataValidAdc
call TampilkanSuhu
sjmp MainLoop
;----------------------------------------------------------
IntTmr0: djnz BuffSamplingADC,IntTmr0_Out
mov BuffSamplingADC,#10
setb FlagReadAdc
IntTmr0_Out:
reti
;----------------------------------------------------------
Init: mov TMOD,#11h
setb TR0
setb ET0
setb EA
mov BuffSamplingADC,#10
ret
;----------------------------------------------------------
ReadAdc: clr EN
clr CSAdc
mov a,DataBusAdc
setb CSAdc
mov BuffCountAdc,a
call KonversiBcd
setb FlagDataValidAdc

63
ret
;----------------------------------------------------------
KonversiBcd:
mov a,BuffCountAdc
mov b,#10
div ab
swap a
orl a,b
mov BuffDataAdc,a
ret
;----------------------------------------------------------
TampilkanSuhu:
mov a,#Pertama + 7
call Write2Reg
mov a,BuffDataAdc
anl a,#0f0h
swap a
clr c
add a,#30h
call WriteData
mov a,BuffDataAdc
anl a,#0fh
clr c
add a,#30h
call WriteData
ret
;----------------------------------------------------------
InitLcd:
call Delay10ms
mov ACC,#3fh
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
mov ACC,#38h
call Write2Reg
mov ACC,#1
call Write2Reg
mov ACC,#6
call Write2Reg
mov ACC,#Pertama ;***** Baris Pertama
call Write2Reg ; *****
call OnLcd
ret
;----------------------------------------------------------
WriteDataLcd:
push ACC
WriteDataLcd1:
clr A
movc A,@A+DPTR
jz SelesaiWriteDataLcd
call WriteData
inc DPTR
jmp WriteDataLcd1
SelesaiWriteDataLcd:

64
pop ACC
ret
;----------------------------------------------------------
ClearLcd:
push ACC
mov ACC,#1
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
OnLcd:
push ACC
mov ACC,#0ch
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
BarisPertama:
mov a,#Pertama
call Write2Reg
ret
;----------------------------------------------------------
BarisKedua:
mov a,#Kedua
call Write2Reg
ret
;----------------------------------------------------------
Write2Reg:
call Delay10ms
clr RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
mov P0,#0ffh
ret
;----------------------------------------------------------
WriteData:
setb RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
mov P0,#0ffh
ret
;----------------------------------------------------------
TampilkanMessage1:
mov DPTR,#Msg1
call WriteDataLcd
call BarisKedua
mov DPTR,#Msg2
call WriteDataLcd
ret
Msg1: db ' PROGRAM ',0
Msg2: db ' TEST ADC ',0

65
;----------------------------------------------------------
MsgAdc: mov DPTR,#Msg3
call WriteDataLcd
ret
Msg3: db 'Suhu : C ',0
;----------------------------------------------------------
; Delay Area
;----------------------------------------------------------
Delay20ms:
mov r7,#100
Loop1:
mov r6,#200
djnz r6,$
djnz r7,Loop1
ret
Delay10ms:
mov r7,#5
Loop:
mov r6,#100
djnz r6,$
djnz r7,Loop
ret
Delay1ms:
mov r6,#100
djnz r6,$
ret
Delay_500ms:
mov R7,#50
Delay_500ms_1:
mov R6,#100
Delay_500ms_2:
mov R5,#100
djnz R5,$
djnz R6,Delay_500ms_2
djnz R7,Delay_500ms_1
ret
Delay_1s:
call Delay_500ms
call Delay_500ms
ret
;----------------------------------------------------------
End

66
SEKOLAH MENENGAH KEJURUAN No. Form. : F:ISO-KUR-06
NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance VI

Real Time Clock (RTC)

Gambar 6. Rangkaian Real Time Clock (RTC)

PROGRAM APLIKASI RTC

$mod51
;----------------------------------------------------------
; Deklarasi Konstanta
;----------------------------------------------------------
EN bit P3.6
RS bit P3.7
SCL bit P2.5
SDA bit P2.4
Stack equ 60h
Pertama equ 80h
Kedua equ 0c0h
DataBusLcd equ P0
Itc_Ctrl_RTC equ 11010000b
Second_addr equ 0
Minute_addr equ 1
Hour_addr equ 2
Day_addr equ 3
Date_addr equ 4
Month_addr equ 5
Year_addr equ 6
Control_addr equ 7
;PortAdc equ P1
;Scan_Data equ 20
;----------------------------------------------------------
BSEG
Flag_1_Detik: dbit 1
FlagCheckDetik: dbit 1
;----------------------------------------------------------
; Alokasi Memori byte

67
;----------------------------------------------------------
DSEG AT 30h
BuffDetik: DS 1
itc_buff: DS 1 ;data buffer to be sent/rcv
via I2C
Itc_ctrl: ds 1
itc_addrl: DS 1 ;Address low byte
;BuffCount: DS 1
;BuffCol: DS 1
;BuffScan: DS 1
;BuffDsp: DS 5
;----------------------------------------------------------
CSEG
org 0
jmp Main
org 0bh
jmp IntTmr0
org 30h
Main:
mov P1,#0ffh
clr EN
mov SP,#Stack
call InitLCD
call InitRTC
call Init
call TampilkanMessage1
call Delay_500ms
; call Delay_1s
call ClearLcd
call TampilkanWaktu
call TampilkanHari
call TampilkanTanggal
MainLoop: jnb Flag_1_Detik,MainLoop_1
clr Flag_1_Detik
call TampilkanWaktu
call TampilkanHari
call TampilkanTanggal
MainLoop_1:
jnb FlagCheckDetik,MainLoop
clr FlagCheckDetik
call CheckDetik
sjmp MainLoop
;----------------------------------------------------------
IntTmr0: setb FlagCheckDetik
reti
;----------------------------------------------------------
Init: mov TMOD,#1
setb TR0
setb ET0
setb EA
ret
;----------------------------------------------------------
InitRtc: mov itc_addrl,#Second_addr
mov itc_ctrl,#Itc_Ctrl_RTC
call rtc_byte_rd
mov a,itc_buff
anl a,#01111111b

68
mov itc_buff,a
call rtc_byte_wr
call Delay20ms
;
mov itc_addrl,#Control_addr
mov itc_buff,#10h
call rtc_byte_wr
call Delay20ms
;
mov itc_addrl,#Minute_addr
mov itc_ctrl,#Itc_Ctrl_RTC
mov itc_buff,#55h
call rtc_byte_wr
;
mov itc_addrl,#Hour_addr
mov itc_ctrl,#Itc_Ctrl_RTC
mov itc_buff,#02h
call rtc_byte_wr
;
mov itc_addrl,#Day_addr
mov itc_ctrl,#Itc_Ctrl_RTC
mov itc_buff,#2h
call rtc_byte_wr
;
mov itc_addrl,#Date_addr
mov itc_ctrl,#Itc_Ctrl_RTC
mov itc_buff,#13h
call rtc_byte_wr
;
mov itc_addrl,#Month_addr
mov itc_ctrl,#Itc_Ctrl_RTC
mov itc_buff,#02h
call rtc_byte_wr
;
mov itc_addrl,#Year_addr
mov itc_ctrl,#Itc_Ctrl_RTC
mov itc_buff,#07h
call rtc_byte_wr
ret
;
;----------------------------------------------------------
rtc_byte_wr: push acc
call start_cond ;Sending start condition
;
mov a,#11010000b
call itcsend ;Sending Control Byte
ackrtc0: call ack_rcv
jc ackrtc0
;
mov a,itc_addrl ;
call itcsend ;Sending address low byte
ackrtc1: call ack_rcv
jc ackrtc1
;
mov a,itc_buff ;
call itcsend ;Sending data
ackrtc2: call ack_rcv

69
jc ackrtc2
;
call stop_cond ;Sending stop condition
;
ack_pollrtc: call start_cond ;Sending start condition
;
mov a,#11010000b
call itcsend ;Sending Control Byte
call ack_rcv
jc ack_pollrtc
;
pop acc
ret
;
;----------------------------------------------------------
rtc_byte_rd: push acc
call start_cond ;Sending Start Condition
;
mov a,#11010000b ;Write Condition
call itcsend ;Sending Control Byte
ackrtc3: call ack_rcv
jc ackrtc3
;
mov a,itc_addrl ;
call itcsend ;Sending address high byte
ackrtc4: call ack_rcv
jc ackrtc4
;
call start_cond ;Sending second start cond.
mov a,#11010001b ;Read Condition
call itcsend ;Sending second control byte
ackrtc5: call ack_rcv
jc ackrtc5
;
call itcrcv ;Receiving data byte from device
call nack_rcv ;Sending No Ack condition
call stop_cond ;Sending stop condition
pop acc
ret
;
;----------------------------------------------------------
itcsend: push b
mov b,#8
itcsendloop: rlc a
mov sda,c
nop
setb scl
call delay_10mcl
clr scl
call delay_10mcl
djnz b,itcsendloop
setb sda
pop b
ret
;
;----------------------------------------------------------
itcrcv: push b

70
push acc
mov b,#8
itcrcvloop: setb scl
call delay_10mcl
mov c,sda
rlc a
clr scl
call delay_10mcl
djnz b,itcrcvloop
mov itc_buff,a
pop acc
pop b
ret
;
;******************************************************
start_cond: setb sda ;1
nop ;1
setb scl ;1
call delay_10mcl ;2
clr sda ;1
call delay_10mcl ;2
clr scl ;1
ret ;2, total = 11 M
;
;******************************************************
ack_rcv: setb scl ;1
call delay_10mcl ;2
mov c,sda ;1
call delay_10mcl ;2
clr scl ;1
ret ;2, total = 9 M
;
;******************************************************
nack_rcv: setb scl ;1
call delay_10mcl ;2
clr scl ;1
ret ;2, total = 6 M
;
;******************************************************
ack_send: clr sda ;1
nop ;1
setb scl ;1
call delay_10mcl ;2
clr scl ;1
ret ;2 total = 8 M
;
;******************************************************
stop_cond: clr sda ;1
nop ;1
setb scl ;1
call delay_10mcl ;2
setb sda ;1
ret ;2 total = 8 M
;
;******************************************************
delay_10mcl: nop
nop

71
nop
nop
nop
ret
;
;*********************************************************************
InitLcd:
call Delay10ms
mov ACC,#3fh
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
mov ACC,#38h
call Write2Reg
mov ACC,#1
call Write2Reg
mov ACC,#6
call Write2Reg
mov ACC,#Pertama ;***** Baris Pertama
call Write2Reg ; *****
call OnLcd
ret
;----------------------------------------------------------
WriteDataLcd:
push ACC
WriteDataLcd1:
clr A
movc A,@A+DPTR
jz SelesaiWriteDataLcd
call WriteData
inc DPTR
jmp WriteDataLcd1
SelesaiWriteDataLcd:
pop ACC
ret
;----------------------------------------------------------
ClearLcd:
push ACC
mov ACC,#1
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
OnLcd:
push ACC
mov ACC,#0ch
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
BarisPertama:
mov a,#Pertama
call Write2Reg
ret

72
;----------------------------------------------------------
BarisKedua:
mov a,#Kedua
call Write2Reg
ret
;----------------------------------------------------------
Write2Reg:
call Delay10ms
clr RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
ret
;----------------------------------------------------------
WriteData:
setb RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
ret
;----------------------------------------------------------
SendGrsMrg2LCD:
mov a,#'/'
call WriteData
ret
;----------------------------------------------------------
Sendttk2_2LCD:
mov a,#':'
call WriteData
ret
;----------------------------------------------------------
TampilkanMessage1:
mov DPTR,#Msg1
call WriteDataLcd
call BarisKedua
mov DPTR,#Msg2
call WriteDataLcd
ret
Msg1: db ' PROGRAM ',0
Msg2: db ' TEST RTC ',0
;----------------------------------------------------------
TampilkanHari:
mov itc_addrl,#Day_addr
mov itc_ctrl,#Itc_Ctrl_RTC
call rtc_byte_rd
call TampilkanHari2LCD
ret
TampilkanHari2LCD:
mov a,#Pertama ; + 8
call Write2Reg
SendHari2Ser: ;==========
mov a,itc_buff
cjne a,#1,TampilkanHari_1

73
mov DPTR,#MsgSenin
sjmp TampilkanHari_7
TampilkanHari_1:
cjne a,#2,TampilkanHari_2
mov DPTR,#MsgSelasa
sjmp TampilkanHari_7
TampilkanHari_2:
cjne a,#3,TampilkanHari_3
mov DPTR,#MsgRabu
sjmp TampilkanHari_7
TampilkanHari_3:
cjne a,#4,TampilkanHari_4
mov DPTR,#MsgKamis
sjmp TampilkanHari_7
TampilkanHari_4:
cjne a,#5,TampilkanHari_5
mov DPTR,#MsgJumat
sjmp TampilkanHari_7
TampilkanHari_5:
cjne a,#6,TampilkanHari_6
mov DPTR,#MsgSabtu
sjmp TampilkanHari_7
TampilkanHari_6:
cjne a,#7,TampilkanHari_Out
mov DPTR,#MsgMinggu
TampilkanHari_7:
call WriteDataLcd
TampilkanHari_Out:
ret
MsgSenin:
db 'MON',0
MsgSelasa:
db 'TUE',0
MsgRabu:
db 'THU',0
MsgKamis:
db 'WED',0
MsgJumat:
db 'FRI',0
MsgSabtu:
db 'SAT',0
MsgMinggu:
db 'SUN',0
;----------------------------------------------------------
TampilkanTanggal:
mov itc_addrl,#Date_addr
mov itc_ctrl,#Itc_Ctrl_RTC
call rtc_byte_rd
mov a,#Pertama + 8
call Write2Reg
call send_byte_2_LCD
call SendGrsMrg2LCD
;
mov itc_addrl,#Month_addr
call rtc_byte_rd
call send_byte_2_LCD
call SendGrsMrg2LCD

74
;
mov itc_addrl,#Year_addr
call rtc_byte_rd
call send_byte_2_LCD
ret
send_byte_2_LCD:
mov a,itc_buff
anl a,#0f0h
swap a
call AmbilData
call WriteData
mov a,itc_buff
anl a,#0fh
call AmbilData
call WriteData
ret
AmbilData:
inc a
movc a,@a+pc
ret
ASCII: db '0123456789ABCDEF'
;----------------------------------------------------------
TampilkanWaktu:
mov itc_addrl,#Hour_addr
mov itc_ctrl,#Itc_Ctrl_RTC
call rtc_byte_rd
mov a,#Kedua + 4
call Write2Reg
call send_byte_2_LCD
call Sendttk2_2LCD
;
mov itc_addrl,#Minute_addr
call rtc_byte_rd
call send_byte_2_LCD
call Sendttk2_2LCD
;
mov itc_addrl,#Second_addr
call rtc_byte_rd
call send_byte_2_LCD
ret
;----------------------------------------------------------
CheckDetik:
mov itc_addrl,#Second_addr
mov itc_ctrl,#Itc_Ctrl_RTC
call rtc_byte_rd
mov a,itc_buff
cjne a,BuffDetik,CheckDetik_1
ret
CheckDetik_1:
setb Flag_1_Detik
mov BuffDetik,a
ret
;----------------------------------------------------------
; Delay Area
;----------------------------------------------------------
Delay20ms:
mov r7,#100

75
Loop1:
mov r6,#200
djnz r6,$
djnz r7,Loop1
ret
Delay10ms:
mov r7,#5
Loop:
mov r6,#100
djnz r6,$
djnz r7,Loop
ret
Delay1ms:
mov r6,#100
djnz r6,$
ret
Delay_500ms:
mov R7,#50
Delay_500ms_1:
mov R6,#100
Delay_500ms_2:
mov R5,#100
djnz R5,$
djnz R6,Delay_500ms_2
djnz R7,Delay_500ms_1
ret
Delay_1s:
call Delay_500ms
call Delay_500ms
ret
;----------------------------------------------------------
End

76
SEKOLAH MENENGAH KEJURUAN No. Form. : F:ISO-KUR-06
NEGERI 1 CIMAHI
Kelompok : Instrumentasi Industri
Jurusan Kontrol Proses Job Sheet Mikrontroler
Jl. Mahar Martanegara No. 48 Kota Cimahi Andvance VII

EEPROM

Gambar 7. Rangkain EEPROM

PROGRAM APLIKASI EEPROM


$mod51
;----------------------------------------------------------
; Deklarasi Konstanta
;----------------------------------------------------------
EN bit P3.6
RS bit P3.7
SCL bit P2.5
SDA bit P2.4
Stack equ 60h
Pertama equ 80h
Kedua equ 0c0h
DataBusLcd equ P0
Itc_Ctrl_EEPROM equ 10100000b
;----------------------------------------------------------
; Alokasi Memori byte
;----------------------------------------------------------
DSEG AT 30h
itc_buff: DS 1 ;data buffer to be
sent/rcv via I2C
Itc_ctrl: ds 1
itc_addrl: DS 1 ;Address low byte
itc_addrh: DS 1
;----------------------------------------------------------
CSEG
org 0
Main:
mov P1,#0ffh
clr EN
mov SP,#Stack
call InitLCD
call TampilkanMessage1

77
call Delay_1s
call Delay_1s
call ClearLcd
mov itc_addrl,#0
mov itc_addrh,#0
mov itc_buff,#'2'
call MsgWrite
mov a,itc_buff
call WriteData
call itc_byte_wr
call Delay20ms
mov itc_buff,#0
call itc_byte_rd
call MsgRead
mov a,itc_buff
call WriteData
MainLoop:
sjmp MainLoop
;----------------------------------------------------------
inc_itc_addr: push acc
mov a,itc_addrl
add a,#01h
jc addr_cry
mov itc_addrl,a
inc_addr_exit: pop acc
ret
;
addr_cry: mov itc_addrl,a
inc itc_addrh
jmp inc_addr_exit
;
;*****************************************************
dec_itc_addr: push acc
mov a,itc_addrl
dec a
mov itc_addrl,a
cjne a,#0ffh,dec_addr_exit
dec itc_addrh
dec_addr_exit: pop acc
ret
;
;*****************************************************
itc_byte_wr: push acc
push b
call start_cond ;Sending start condition
;
mov a,itc_addrh
anl a,#80h
jnz chip2wr
mov a,#10100000b
jmp itc_bwr_cont
;
chip2wr: mov a,#10100010b
;
itc_bwr_cont: mov b,a ;save control byte in b
call itcsend ;Sending Control Byte
ack00: call ack_rcv

78
jc ack00
;
mov a,itc_addrh ;
anl a,#7fh ;7th bit masked with 0
call itcsend ;Sending address high byte
ack01: call ack_rcv
jc ack01
;
mov a,itc_addrl ;
call itcsend ;Sending address low byte
ack02: call ack_rcv
jc ack02
;
mov a,itc_buff ;
call itcsend ;Sending data
ack03: call ack_rcv
jc ack03
;
call stop_cond ;Sending stop condition
;
ack_polling: call start_cond ;Sending start condition
mov a,b ;copy control byte to a
call itcsend ;Sending Control Byte
call ack_rcv
jc ack_polling
;
pop b
pop acc
ret
;*****************************************************
itc_byte_rd: push acc
push b
call start_cond ;Sending Start Condition
;
mov a,itc_addrh
anl a,#80h
jnz chip2rd
mov a,#10100000b
jmp itc_brd_cont
;
chip2rd: mov a,#10100010b
;
itc_brd_cont: mov b,a ;save control byte in b
call itcsend ;Sending Control Byte
ack04: call ack_rcv
jc ack04
;
mov a,itc_addrh ;
anl a,#7fh ;7th bit masked with 0
call itcsend ;Sending address high byte
ack05: call ack_rcv
jc ack05
;
mov a,itc_addrl ;
call itcsend ;Sending address low byte
ack06: call ack_rcv
jc ack06

79
;
call start_cond ;Sending second start cond.
mov a,b ;copy control byte to a
orl a,#01h ;read
call itcsend ;Sending second control byte
ack07: call ack_rcv
jc ack07
;
call itcrcv ;Receiving data byte from device
call nack_rcv ;Sending No Ack condition
call stop_cond ;Sending stop condition
pop b
pop acc
ret
;----------------------------------------------------------
itcsend: push b
mov b,#8
itcsendloop: rlc a
mov sda,c
nop
setb scl
; call wd_pulse
clr scl
; call wd_pulse
djnz b,itcsendloop
setb sda
pop b
ret
;
itcrcv: push b
push acc
mov b,#8
itcrcvloop: setb scl
call delay_10mcl
mov c,sda
rlc a
clr scl
call delay_10mcl
djnz b,itcrcvloop
mov itc_buff,a
pop acc
pop b
ret
;
;******************************************************
start_cond: setb sda ;1
nop ;1
setb scl ;1
call delay_10mcl ;2
clr sda ;1
call delay_10mcl ;2
clr scl ;1
ret ;2, total = 11 M
;
;******************************************************
ack_rcv: setb scl ;1
call delay_10mcl ;2

80
mov c,sda ;1
call delay_10mcl ;2
clr scl ;1
ret ;2, total = 9 M
;
;******************************************************
nack_rcv: setb scl ;1
call delay_10mcl ;2
clr scl ;1
ret ;2, total = 6 M
;
;******************************************************
ack_send: clr sda ;1
nop ;1
setb scl ;1
call delay_10mcl ;2
clr scl ;1
ret ;2 total = 8 M
;
;******************************************************
stop_cond: clr sda ;1
nop ;1
setb scl ;1
call delay_10mcl ;2
setb sda ;1
ret ;2 total = 8 M
;
;******************************************************
delay_10mcl: nop
nop
nop
nop
nop
ret
;
;*********************************************************************
InitLcd:
call Delay10ms
mov ACC,#3fh
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
call Write2Reg
call Delay1ms
mov ACC,#38h
call Write2Reg
mov ACC,#1
call Write2Reg
mov ACC,#6
call Write2Reg
mov ACC,#Pertama ;***** Baris Pertama
call Write2Reg ; *****
call OnLcd
ret
;----------------------------------------------------------
WriteDataLcd:

81
push ACC
WriteDataLcd1:
clr A
movc A,@A+DPTR
jz SelesaiWriteDataLcd
call WriteData
inc DPTR
jmp WriteDataLcd1
SelesaiWriteDataLcd:
pop ACC
ret
;----------------------------------------------------------
ClearLcd:
push ACC
mov ACC,#1
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
OnLcd:
push ACC
mov ACC,#0ch
call Write2Reg
pop ACC
ret
;----------------------------------------------------------
BarisPertama:
mov a,#Pertama
call Write2Reg
ret
;----------------------------------------------------------
BarisKedua:
mov a,#Kedua
call Write2Reg
ret
;----------------------------------------------------------
Write2Reg:
call Delay10ms
clr RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
ret
;----------------------------------------------------------
WriteData:
setb RS;
mov DataBusLcd,A;
setb EN;
call delay10ms;
clr EN;
call delay10ms;
ret
;----------------------------------------------------------
TampilkanMessage1:
mov DPTR,#Msg1

82
call WriteDataLcd
call BarisKedua
mov DPTR,#Msg2
call WriteDataLcd
ret
Msg1: db ' PROGRAM ',0
Msg2: db ' TEST EEPROM ',0
;----------------------------------------------------------
MsgWrite: call BarisPertama
mov DPTR,#Msg3
call WriteDataLcd
ret
Msg3: db 'Write : ',0
;----------------------------------------------------------
MsgRead: call BarisKedua
mov DPTR,#Msg4
call WriteDataLcd
ret
Msg4: db 'Read : ',0
;----------------------------------------------------------
; Delay Area
;----------------------------------------------------------
Delay20ms:
mov r7,#100
Loop1:
mov r6,#200
djnz r6,$
djnz r7,Loop1
ret
Delay10ms:
mov r7,#5
Loop:
mov r6,#100
djnz r6,$
djnz r7,Loop
ret
Delay1ms:
mov r6,#100
djnz r6,$
ret
Delay_500ms:
mov R7,#50
Delay_500ms_1:
mov R6,#100
Delay_500ms_2:
mov R5,#100
djnz R5,$
djnz R6,Delay_500ms_2
djnz R7,Delay_500ms_1
ret
Delay_1s:
call Delay_500ms
call Delay_500ms
ret
;----------------------------------------------------------
End

83
84

You might also like