Perpustakaan Unika
LAMPIRAN-LAMPIRAN
A. LISTING PROGRAM PENGONTROLAN AC MOBIL BERDASARKAN KEMIRINGAN JALAN (TANJAKAN) B.GAMBAR RANGKAIAN PENGONTROLAN AC MOBIL BERDASARKAN KEMIRINGAN JALAN (TANJAKAN) C. DATA SHEET MIKROKONTROLER (AT89S52) D. DATA SHEET ADC0809 E. DATA SHEET IC LM 35 F. DATA SHEET CA3140 G. DATA SHEET 74LS14
xiv
Perpustakaan Unika
EnLcd RSLcd KtrlMon
bit bit bit
p1.1 p1.0 20h.3
; program enable lcd di port 1.1 ; program RS lcd di port 1.0 ; label kontrolMonitor diisi pada bit 20.h.3
BKtrlMon BAmanBlow Blow2 Blow1 KomprAC KAmanBlow
bit bit bit bit bit bit
P1.2 P1.3 P1.4 P1.5 p1.6 p1.7
; label blower kontrol/monitor di port 1.2 ; label blower auto/manual blower di port 1.3 ; label blower2 (medium) di port 1.4 ; label blower1 (kecil) di port 1.5 ; label kompresor AC di port 1.6 ; label kontrol auto/manual blower di port 1.7
DtLcd DSuhu DMrg
equ equ equ
08h 22h 23h
; alamat label data lcd di 08h ; alamat label data suhu di 22h ; alamat label data miring di 23h
org JMP
00h Start
; alamat awal program ; loncat ke label start
org
30h
; alamat awal badan program
mov Call
20h,#0 ; label start isi 0 ke alamat 20h (reset status) InitLcd ; panggil label init lcd
Start:
clr setb setb setb
Loop:
blow2 ; menghapus isi label blower2 blow1 ; menset isi alamat bit blower1 =1 (blower kec rendah) komprac ;menset isi alamat bit kompresor AC =1 (ac on by car) KAmanBlow ;menset isi alamat bit blower auto KAmanBlow=1=auto
Call mov call mov mov mov Call
RdADC ; panggil label Read ADC a,DSuhu ; pindahkan data dari label data suhu ke akumulator Ubah2Bcd ; panggil label Ubah2BCD r1,#03 ; isi r1=03 r0,#024h ; isi r0=024h dtlcd,#08bh ;isi data lcd = 08bh (posisi cursor) WriteKarMem ; panggil write karakter memori (tulis data suhu)
Mov Call
dtlcd,#0cdh WriteIr
;isi data lcd = 0cdh (posisi cursor) ; panggil label writeInstruksi
mov a,DMrg ; pindahkan data dari label datamiring ke akumulator swap a ; menukarkan isi nibllbe bawah dengan nibble atas. anl a,#0fh ; meng-and kan isi alamat data=0fh dengan isi akumulator orl a,#030h; meng-or kan isi alamat data=030h dengan isi akumulator
xiii
Perpustakaan Unika
mov Call
dtlcd,a ; pindahkan data akumulator ke data lcd Writedt ; panggil label write data
mov anl orl mov Call
a,DMrg ; pindahkan data dari label datamiring ke akumulator a,#0fh ; meng-and kan isi alamat data=0fh dengan isi akumulator a,#030h; meng-or ka nisi alamat data=030h dengan isi akumulator dtlcd,a ; pindahkan data akumulator ke data lcd Writedt ; panggil label write data (tulis data kemiringan)
Call RdTmbl ; panggil label read tombol jb ktrlmon,loop ;if ktrlmon (kontrol monitor)=1=manual then loop(no action) Call CBatasOvr ; panggil label cek batas over jmp loop ; loncat ke loop ;--------------------------------------------------------------------------------RdTmbl: setb BKtrlMon ; menset isi alamat bit blowerkontrolmonitor =1 jb BKtrlMon,NopTbl1 ; jika BwKntrlMon=1= Nopresstombl1 jbc ktrlmon,setKtrl ; jika kntrlmon =1 diubah=0 ktrlmon=0=auto(set kontrol) setb ktrlmon ; menset isi alamat bit ktrlmon=1=manual mov dtlcd,#081h ; isi label datalcd=081h call writeir ; panggil label writeinstruksi mov dtlcd,#'M' ; isi label datalcd=label‘M’ call writedt ; panggil label writedata mov dtlcd,#'O' ; isi label datalcd=label‘O’ call writedt ; panggil label writedata mov dtlcd,#'N' ; isi label datalcd=label’N’ call writedt ; panggil label writedata mov dtlcd,#'-' ; isi label datalcd=label’-‘ call writedt ; panggil label writedata mov dtlcd,#' ' ; isi label datalcd=’#’ call writedt ; panggil label writedata clr KAmanBlow ; kamanb(kontrolautomanualblower)low=0=blower manual ret ; kembali ke program pemanggil
setktrl:
mov call mov call mov call mov call mov
dtlcd,#081h writeir dtlcd,#'K' writedt dtlcd,#'T' writedt dtlcd,#'R' writedt dtlcd,#'L'
; isi label datalcd=081h ; panggil label writeinstruksi ; isi label datalcd=label‘K’ ; panggil label writedata ; isi label datalcd=label’T’ ; panggil label writedata ; isi label datalcd=label’R’ ; panggil writedata ; isi label datalcd=’L’
xiv
Perpustakaan Unika
setb
call writedt ; panggil writedata mov dtlcd,#'-' ; isi label datalcd=’-‘ call writedt ; panggil writedata KAmanBlow ; menset isi alamat bit KAmanBlow=1=blower auto ret ; kembali ke program pemanggil
Noptbl1: setb BAmanBlow ; menset isi alamat BAmanBlow=1 jb BAmanBlow,NopTbl2 ; jika BAmanBlow=1=Nopresstombol2 jbc setb
KAmanBlow,setmanblw
;jika KAmanBlow=1 diubah=0 KAmanBlow (blwautoman)=0=manual KAmanBlow ; menset isi alamat KAmanBlow (blowautoman)=1=auto mov dtlcd,#0c0h ; isi label datalcd=0c0h mov dptr,#TBlowA ; isi dptr=TampilanBlowerAuto call writeln ; panggil label writeline jmp redispmrg ; lompat ke read display miring ret ; kembali ke program pemanggil
setmanblw: mov dtlcd,#0c0h ; isi label datalcd=0c0h (blwaman=0=manual) mov dptr,#TBlowM ; isi dptr=TampilanBlowerManual call writeln ; panggil label writeline
redispmrg:
mov mov call Mov Call Mov Call
NopTbl2:
dtlcd,#0c0h dptr,#TMrg writeln DtLcd,#0cfh WriteIR DtLcd,#0dfh WriteDt ret
; isi label datalcd=0c0h ; isi dptr=TampilanMiring ; panggil label writeline ; isi label datalcd=0cfh ; panggil labelwriteir ; isi label datalcd=0dfh=tanda derajat ; panggil label writedata ; kembali ke program pemanggil
;--------------------------------------------------------------------------------RdADC:
mov mov mov mov mov mov mov mov mov
p3,#0 ; isi P3=0 (set address ADC=00 LDR1) 08h,p2 ; pindah data dari p2 ke 08h (baca ADC) p3,#01 ; isi P3=01(set address ADC=01 LDR2) 09h,p2 ; pindah data dari p2 ke 09h p3,#02 ; isi P3=02 (set address ADC=02 LDR3) 0ah,p2 ; pindah data dari p2 ke 0ah p3,#03 ; isi p3=03 (set address ADC=03 Suhu) DSuhu,p2 ; isi label Data suhu=p2 a,#090 ; 90(1.8vdc)
xv
Perpustakaan Unika
cjne D1LbhBsr:
cjne
D2LbhBsr:
cjne
D3LbhBsr:
mov
beda3:
jmp jc
Beda2:
mov jmp jc
Beda1:
mov jmp jc mov
ExtRdMrg:
a,08h,Beda1 ; apakah akumulator=08h jika sama proses lanjutkan tapi jika tidak loncat kelabelBeda1 a,09h,Beda2 ; apakah akumulator=09h jika sama proses lanjutkan tapi jika tidak loncat ke labelBeda2 a,0ah,Beda3 ; apakah akumulator=0ah jika sama proses lanjutkan tapi jika tidak loncat ke labelBeda3 DMrg,#040h; isi label DataMiring=040h
ExtRdMrg ; loncat ke exitreadmiring D3LbhBsr ; bila sisa perbandingan=1loncat ke label D3LbhBsr, bila=0 proses dilanjutkan DMrg,#030h ; Isi label datamiring=030h ExtRdMrg ; loncat ke exitreadmiring D2LbhBsr ; bila sisa perbandingan=1 loncat ke label D2LbhBesr, bila=0 proses dilanjutkan DMrg,#20h ; isi label datamiring =20h ExtRdMrg ; loncat ke exitreadmiring D1LbhBsr ; bila sisa perbandingan=1 loncat ke label D1LbhBsr, bila=0 proses dilanjutkan DMrg,#00h ; isi label datamiring=00h ret
; kembali ke program pemanggil
;--------------------------------------------------------------------------CBatasOvr:
MrgBeda:
mov cjne
jmp jnc
mov Call clr clr clr
a,#035h ; isi akumulator=’035h’ a,dmrg,MrgBeda ; apakah akumulator=label data miring jika sama proses lanjutkan tapi jika tidak loncat ke label MiringBeda ceksuhu ; lompat ke ceksuhu ceksuhu ; bila sisa perbandingan=0 loncat ke Label ceksuhu, bila=1 proses dilanjutkan , if a(35)
; blow2=0, if dmrg>35 then set blow high ; blow1=0 ; komprac=0 (ac mati) ; kembali ke program pemanggil
xvi
Perpustakaan Unika
ceksuhu:
setb
komprac
; menset isi alamat bit komprac=1 (aktif)
mov
a,dsuhu
; pindahkan data dari label data suhu ke akumulator
cjne
KrgDr31:
tdksm28:
a,#028,TdkSm28
; jika nilai a tidak 028 loncat ke TdkSm28
setb
blow2
; menset isis alamat bit blower2=1 (aktif)
clr
blow1
; blow1=0 ; blower med suhu=28 <31
jnc
ret lbhdr28
clr setb
blow2 blow1
; bila sisa perbandingan=0 loncat ke label lbhdr28,bila=1 proses dilanjutkan ; blow2=0 ; menset isi alamat bit blower1=1 (aktif) ; blower slow suhu<28
ret Lbhdr28: Lbhdr31:
cjne clr clr
TdkSm31:
jnc
jmp
a,#031,TdkSm31 ; jika nilai a 031 loncat ke TdkSm31 bLow1 ; blow1=0 bLow2 ; blow2=0 ; blower high suhu=31 ret Lbhdr31 ; bila sisa perbandingan=0 loncat ke label Lbhdr31,bila=1 proses dilanjutkan KrgDr31
; lompat ke KrgDr31 ; jalankan prosedur KrgDr31
;-------------------------------------------------------------------------------------------;ubah biner ke bcd Ubah2BCD: mov NFinis: mov div mov dec cjne
R0,#026h ; isi r0=026h b,#010 ; isi register b=010 ab ; bagi isi akumulator dengan data register badan pada akumulator @r0,b ; pindahkan data regiater b ke r0 r0 ; R0=R0-1 a,#09,TdkSm9 ; apakah akumulator=09h jika sama proses lanjutkan tapi jika tidak loncat ke label tidak sama9
xvii
Perpustakaan Unika
EConv:
mov
TdkSm9:
jc
jmp
@r0,a ; pindahkan data register a ke r0 ret ; kembali ke program pemanggil EConv ; bila sisa perbandingan=1 loncat ke label EndConversi, bila=0 proses dilanjutkan NFinis ; loncat ke Notfinis
;------------------------------------------------------------------------------------IniTLCD: Mov DtLcd,#038H ; isi datalcd=038h ; Function Set Call WriteIR ; panggil label writeInstruksi Mov DtLcd,#08h ; isi datalcd=08h ; disp Off Call WriteIR ; panggil label writeInstruksi Mov DtLcd,#01 ; isi datalcd=01 ; Disp CLear Call WriteIR ; panggil label writeInstruksi Mov DtLcd,#06 ; isi datalcd=06 ;Entry Set Call WriteIR ; panggil writeInstruksi Mov DtLcd,#038H ; isi datalcd=038 ; Function Set Call WriteIR ; panggil writeInstruksi Mov DtLcd,#0eh ; isi datalcd=0eh ; disp On,blink Call WriteIR ; panggil writeInstruksi Mov DtLcd,#06h ; isi datalcd=06 ; entry mode set Call WriteIR ; panggil writeInstruksi mov dptr,#Nm ; isi dptr=nama mov dtlcd,#080h ; isi datalcd=080h Call WriteLn ; panggil label writeLine mov dptr,#Nim ; isi dptr=Nim mov dtlcd,#0C0h ; isi dtlcd=0c0h Call WriteLn ; panggil writeLn mov r5,#080 ; isi r5=080 Call delay50ms ; panggil delay50ms Call WriteIR ; panggil WriteIR mov dptr,#TSh ; isi dptr=TampilanSuhu mov dtlcd,#080h ; isi datalcd=080h Call WriteLn ; panggil writeLn mov dptr,#TMrg ; isi dptr=TampilanMiring mov dtlcd,#0C0h ; isi datalcd=0C0h
xviii
Perpustakaan Unika
Call
WriteLn
; panggil writeline
Mov Call Mov
DtLcd,#08eh WriteIR DtLcd,#0dfh
Call
WriteDt
; isi datalcd=08eh ; panggil writeInstruksi ; isi datalcd=0dfh ; tanda derajat ; panggil writedata
Mov Call Mov
DtLcd,#0cfh WriteIR DtLcd,#0dfh
Call
WriteDt Ret
; isi dtlcd=0cfh ; panggil writeInstruksi ; isi datalcd=0dfh ; tanda derajat ; panggil writedata ; kembali ke program pemanggil
;------------------------------------------------------------------------------------WriteKarMem: Call WriteIR ; panggil WriteIR nextkarMem: mov a,@r0 ; pindahkan satu-persatu data r0 ke akumulator clr c ; hapus c (c=0) add a,#030h ; 030h+a disimpan di akumulator mov dtlcd,a ; isi datalcd=akumulator Call WriteDt ; panggil writedata inc r0 ; r0=r0+1 djnz r1,nextkarmem ; jika r1-1=0 proses dilanjutkan, jika belum 0 loncat ke label nextkaraktermemori ret
; kembali ke program pemanggil
;------------------------------------------------------------------------------------;Tuliskan data ke baris 1 WriteLn: Call WriteIR ; panggil writeInstruksi mov r0,#016 ; isi r0=016 mov r1,#0 ; isi r1=0 nextdtakar: mov a,r1 ; isi akumulator=r1 Movc a,@a+dptr ; setiap penjumlahan isi data dptr dengan isi akumulator disimpan ke akumulator mov dtlcd,a ; isi data lcd=akumulator Call WriteDt ; panggil writedata inc r1 ; r1=r1+1 djnz r0,ndtkar ; jika r0-1=0 proses dilanjutkan, jika belum 0 loncat ke label nextdatakarakter
xix
Perpustakaan Unika
ret
; kembali ke program pemanggil
;------------------------------------------------------------------------------------;Kirimkan Instruksi Ke LCD WriteIR: clr RsLcd ; hapus Rslcd=0 ;RS = 0 Instruction Reg Mov P0,DtLcd ; isi p0=datalcd ; Code Instruksi Call ClockE ; panggil ClockEnable Ret ; kembali ke program pemanggil
;------------------------------------------------------------------------------------;Kirimkan Data Ke LCD WriteDt: setb RsLcd ; menset isi alamat Rslcd=1 ; RS = 1 Data Mov P0,DtLcd ; isi p0=datalcd ; Data Call ClockE : panggil clockEnable ; CLock Enable Signal ret ; kembali ke program pemanggil ;------------------------------------------------------------------------------------;Memberikan sinyal clock pd pin E-LCD ClockE:
clr EnLcd ; Enlcd=0 setb EnLcd ; menset isi alamat Enlcd=1 clr EnLcd ;Enlcd=0 ret ; kembali ke program pemanggil
;-------------------------------------------------------------------------------------------;Delay waktu Delay50Ms:
Wdly1ms:
mov mov mov setb jnb clr clr djnz
tmod,#01h th0,#03ch tl0,#0b0h tr0 tf0,WDly1ms
; isi tmod=01h ; isi th0=03ch ; isi tl0=0b0h ; menset isi alamat tr0=1 ; tf0-1=0 proses dilanjutkan, jika blm loncat ke label WriteDly1ms tf0 ; tf0=0 tr0 ; tr0=0 r5,Delay50Ms ; jika r5-1=0 proses dilanjutkan, jika
xx
Perpustakaan Unika
belum 0 loncat ke label Delay50Ms ret
Nm: Nim: TSh: TMrg: TBlowA: TBlowM:
Db ' Hi, C.Teddy.P ' Db ' 01.50.0017 ' Db '-Ktrl-Suhu:000 C' Db 'Kemiringan: ' Db 'Blower Set Auto ' Db 'Blower Manual '
Hapus:
Db '
;kembali ke program pemanggil
'
end
xxi
Perpustakaan Unika
Title:
xiii
Pengontrolan Ac Mobil Berdasarkan Kemiringan Jalan (Tanjakan) Chresnawan Teddy P (01.50.0017)