Aplikasi Mikrokontroller

Temperature Control & Time Setting



Gambar 8.1. Rangkaian setting waktu dan dan suhu untuk simulasi kontrol ON-OFF dengan display ke Seven Segmen.

Simulasi sistem yang akan dibangun adalah suatu rangkaian yang mempunyai fasilitas setting UP dan Down untuk setting suhu dan waktu, setiap selesai melakukan setting baik suhu dan waktu maka harus diikuti dengan tombol enter. Sesuai dengan persyaratan pada sistem kontrol pada incubator maupun sterilisator maka timer akan mulai bekerja bila suhu telah tercapai sesuai dengan setting. Relay yang terpasang akan ON-OFF sesuai dengan perbandingan setting dan suhu yang terbaca.

Listing Programnya Anda Dapat Lihat

;================================================================
;DRAFT LISTING PROGRAM SETTING SUHU DAN WAKTU SISTEM CONTROL SUHU
;Pada program ini suhu dan waktu pada sistem dapat disetting dg
;menggunakan tombol up/ down dan bila tombol enter ditekan maka
;data akan diterima oleh sistem uC.
;Untuk melihat hasil pembacaan suhu atau waktu dapat digunakan
;tombol up/ down.Pada program ini akan ditampilkan waktu
;detik dan menit dengan Format MM:DD Program ini bekerja dengan
;sistem interupsi yang dibangkitkan dari Timer 0 oleh TF0
;*******************Copyright*****************************
; Forever:Mov @elektronika-elektronika.blogspot.com
; sjmp Forever
;Powered By Google
;Aplikasi Mikrokontroller; Temperature Control & Time Setting
;================================================================
ADC_WR bit P1.5
ADC_INT bit P1.6
ControlBit bit 20h.0
DataADC equ 60h
DataSetting equ 61h
SettingSatuan equ 65h
SettingPuluhan equ 66h
SettingRatusan equ 67h
SuhuSatuan equ 68h
SuhuPuluhan equ 69h
SuhuRatusan equ 6ah
;
pencacah20 equ 70h
pencacah60 equ 71h
menit equ 72h
jam equ 73h
menit1 equ 74h
menit10 equ 75h
jam1 equ 76h
jam10 equ 77h
detik equ 78h
detik1 equ 79h
detik10 equ 7ah
org 0h
ljmp start
;==================================
;Lokasi vektor interupsi TF0 ->0Bh
;==================================
org 3h
reti
org 0bh
ajmp timerinterrupt
org 13h
reti
org 23h
reti
;
;============================================
;Subrutine untuk membaca data dari ADC dan
;disimpan di memori dataADC
;============================================
ADC:
clr ADC_WR ; start of conversion
setb ADC_WR
not_EOC:
jb ADC_INT,not_EOC
lcall delay
mov a,p2
mov dataADC,a
ret
;
;=========================================
;PROCEDURE CONTROL
;BEKERJA DENGAN CARA MEMBANDINGKAN DATA ADC
;DAN DATA SETTING, HASIL DIOUTPUTKAN PADA
;BIT P1.4
;=========================================
ControlSuhu:
mov a,Datasetting
mov b,dataADC
clr c
subb a,b
jnz OnHeater
ret
OnHeater:
jc OffHeater
Clr p1.4 ;hidupkan heater
Setb ControlBit
ret
OffHeater:
Setb p1.4 ;matikan heater
Clr ControlBit
ret
;
;=================================================
;Subrutine untuk menampilkan waktu ke Seven Segmen
;=================================================
DisplayWaktu:
Setb P1.3
Setb P1.2
Setb P1.1
Setb P1.0
Mov DPTR,#Decoder7Segmen
mov A,detik1
Movc A,@A+DPTR
Mov P0,A
Clr P1.0
Acall delay
;
Mov DPTR,#Decoder7Segmen
Mov A,detik10
Movc A,@A+DPTR
Setb P1.0
Mov P0,A
Clr P1.1
Acall delay
;
Mov DPTR,#Decoder7Segmen
Mov A,Menit1
Movc A,@A+DPTR
Setb P1.1
Mov P0,A
Clr P1.2
Acall delay
;
Mov DPTR,#Decoder7Segmen
Mov A,Menit10
Movc A,@A+DPTR
Setb P1.2
Mov P0,A
Clr P1.3
Acall delay
ret
;
DisplaySuhu:
Setb P1.3
Setb P1.2
Setb P1.1
Setb P1.0
;
mov DPTR,#Pecahan
MOv A,DataADC
Movc A,@A+DPTR
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Mov P0,A
Clr P1.0
Acall delay
;
mov DPTR,#Satuan
MOv A,DataADC
Movc A,@A+DPTR
Mov SuhuSatuan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Setb P1.0
Mov P0,A
Clr P1.1
Acall delay
;
mov DPTR,#Puluhan
MOv A,DataADC
Movc A,@A+DPTR
Mov SuhuPuluhan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Setb P1.1
Mov P0,A
Clr P1.2
Acall delay
;
mov DPTR,#Ratusan
MOv A,DataADC
Movc A,@A+DPTR
Mov SuhuRatusan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Setb P1.2
Mov P0,A
Clr P1.3
Acall delay
;
;==============================================================================
;Menyatukan hasil Pembacaaan Suhu dari Look Up Table dalam bentuk satu variabel
;DataADC = SuhuRatusan*100 + SuhuPuluhan*10 + SuhuSatuan
;==============================================================================
mov a,SuhuPuluhan
mov b,#10d
mul ab
mov DataADC,a
mov a,SuhuRatusan
mov b,#100d
mul ab
add a,DataADC
add a,Suhusatuan
mov DataADC,a
ret
;
;==============================================================================
;Untuk keperluan perbandingan pada saat forever waktu
;Dengan display suhu OFF
;==============================================================================
DisplaySuhuOff:
mov DPTR,#Pecahan
MOv A,DataADC
Movc A,@A+DPTR
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
;
mov DPTR,#Satuan
MOv A,DataADC
Movc A,@A+DPTR
Mov SuhuSatuan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
;
mov DPTR,#Puluhan
MOv A,DataADC
Movc A,@A+DPTR
Mov SuhuPuluhan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
;
mov DPTR,#Ratusan
MOv A,DataADC
Movc A,@A+DPTR
Mov SuhuRatusan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
;
;==============================================================================
;Menyatukan hasil Pembacaaan Suhu dari Look Up Table dalam bentuk satu variabel
;DataADC = SuhuRatusan*100 + SuhuPuluhan*10 + SuhuSatuan
;==============================================================================
mov a,SuhuPuluhan
mov b,#10d
mul ab
mov DataADC,a
mov a,SuhuRatusan
mov b,#100d
mul ab
add a,DataADC
add a,Suhusatuan
mov DataADC,a
ret
;
;=============================================
;Subrutine untuk display Setting to 7 Segmen
;=============================================
DisplaySetting:
Setb P1.3
Setb P1.2
Setb P1.1
Setb P1.0
Mov P0,#11000000b
Clr P1.0
Acall delay
;
Mov DPTR,#Satuan
Mov A,DataSetting
Movc A,@A+DPTR
Mov SettingSatuan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Setb P1.0
Mov P0,A
Clr P1.1
Acall delay
;
Mov DPTR,#Puluhan
Mov A,DataSetting
Movc A,@A+DPTR
Mov SettingPuluhan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Setb P1.1
Mov P0,A
Clr P1.2
Acall delay
;
Mov DPTR,#Ratusan
Mov A,DataSetting
Movc A,@A+DPTR
Mov SettingRatusan,A
Mov DPTR,#Decoder7Segmen
Movc A,@A+DPTR
Setb P1.2
Mov P0,A
Clr P1.3
Acall delay
;============================================================================
;Menyatukan hasil data setting dari Look Up Table dalam bentuk satu variabel
;DataSetting = SettingRatusan*100 + SettingPuluhan*10 + SettingSatuan
;============================================================================
mov a,SettingPuluhan
mov b,#10d
mul ab
mov DataSetting,a
mov a,SettingRatusan
mov b,#100d
mul ab
add a,DataSetting
add a,SettingSatuan
mov DataSetting,a
ret
;
delay: mov R0,#0
delay1: mov R2,#0fh
djnz R2,$
djnz R0,delay1
ret
;
;======================================================
;Subrutine untuk menampilkan kode inisial nama masing2
;anggota kelompok pada 7 segmen
;=====================================================
;
KodeDisplay:
Setb P1.3
Setb P1.2
Setb P1.1
Setb P1.0
Clr A
Movc A,@A+DPTR
Mov P0,A
Clr P1.0
Acall delay
inc DPTR
;
Clr A
Movc A,@A+DPTR
Setb P1.0
Mov P0,A
Clr P1.1
Acall delay
inc DPTR
;
Clr A
Movc A,@A+DPTR
Setb P1.1
Mov P0,A
Clr P1.2
Acall delay
inc DPTR
;
Clr A
Movc A,@A+DPTR
Setb P1.2
Mov P0,A
Clr P1.3
Acall delay
ret
;
MovingDisplay:
mov R7,#50
Lagi1: Mov DPTR,#KodeKlp1
Acall KodeDisplay
Djnz R7,Lagi1
jnb p3.3,wait11
;
mov R7,#50
Lagi2: Mov DPTR,#KodeKlp2
Acall KodeDisplay
Djnz R7,Lagi2
jnb p3.3,wait11
;
mov R7,#50
Lagi3: Mov DPTR,#KodeKlp3
Acall KodeDisplay
Djnz R7,Lagi3
jnb p3.3,wait11
;
mov R7,#50
Lagi4: Mov DPTR,#KodeKlp4
Acall KodeDisplay
Djnz R7,Lagi4
jnb p3.3,wait11
ret
;
wait11: ljmp wait1
;
;==============================================
;Subrutine untuk inisialisasi kerja dari timer
;dengan menggunakan mode 1 timer 0 16 bit
;dan pengaktivan interupsi TF0
;==============================================
InitTimer:
clr ControlBit
mov pencacah20,#20
acall UpdateDisplay
anl TMOD,#11110000b
orl TMOD,#00000001b
mov tl0,#0afh
mov th0,#03ch
setb ET0
setb EA
setb TR0
ret
;
;==============================================================
;This is the most importan subrutine, to serve interuption when
;TF0 Timer 0 Call
;Instruksi berikut digunakan untuk memberikan layanan
;interupsi, dan akan terjadi setiap 0.05 detik.
;dan data 50.000 ( 3CAFh ) diloadkan ke TL1 dan TH1
;setiap subrutine ini dilayani.
;Pada subrutine ini pencacah20 akan didecrement sampai
;menghasilkan nilai Pencacah20=0, yang terjadi setiap
;20 X 50000 uS = 20 X 0,05s = 1 s,apabila ini terjadi maka
;akan dipanggil subrutine jamdigital, untuk melakukan increment
;data detik, menit, atau jam
;==============================================================
timerinterrupt:
mov tl0,#0afh
mov th0,#03ch
djnz pencacah20,Endinterupsi
mov pencacah20,#20
acall jamdigital
Endinterupsi:
reti
;
;=============================================================
;Subrutine untuk menambah jumlah cacahan dari jam digital
;Detik dan menit, bila detik sudah menunjukan 60 maka
;counter menit akan bekerja untuk menambah jumlah hitungannnya
;Subritine ini akan dipanggil setiap detik sesuai dg interupsi
;=============================================================
JamSetting:
dec detik
mov a,#0
cjne a,detik,UpdateDisplaySetting
mov detik,#60
;
satumenitSetting:
dec menit
mov A,#0
cjne A,menit,UpdateDisplaySetting
mov menit,#60
; setb P3.3; Mematikan beban
; ljmp endProses
;
UpdateDisplaySetting:
mov a,detik
mov b,#10
div ab
mov detik1,b
mov detik10,a
;
mov a,menit
mov b,#10
div ab
mov menit1,b
mov menit10,a
ret
;
;==========================================================
;Subrutine yang digunakan untuk menyesuaikan dengan waktu
;yang sedang berlaku. Yaitu dengan menekan tombol P3.6
;dan P3.7 untuk setting waktu detik dan menit
;==========================================================
ScanSettingJam:
JNB P3.7,JamSetting
JNB P3.6,SatuMenitSetting
JNB P3.3,wait2
ret
;
;===================================================================
;Subrutine yang digunakan untuk setting suhu yang diinginkan
;dengan menggunakan tombol up/ down dengan display pada seven segmen.
;pada saat setting juga dideteksi tombol enter, untuk memulai proses
;control suhu
;====================================================================
ScanSettingSuhu:
mov R7,#1
Down: mov DataSetting,R7
acall DisplaySetting
jnb p3.3,wait3
jb P3.7,up
inc R7
acall delay
sjmp down
;
Up: Mov DataSetting,R7
acall DisplaySetting
jnb P3.3,wait3
jb p3.6,down
dec R7
acall delay
sjmp down
ret
;
;=============================================================
;Subrutine untuk menambah jumlah cacahan dari jam digital
;Detik dan menit, bila detik sudah menunjukan 60 maka
;counter menit akan bekerja untuk menambah jumlah hitungannnya
;Subritine ini akan dipanggil setiap detik sesuai dg interupsi
;=============================================================
jamdigital:
dec detik
mov a,#0
cjne a,detik,UpdateDisplay
;
cjne a,menit,next
Setb p1.4
ljmp endProses
;
next:
mov detik,#59
;
satumenit:
dec menit
mov A,#0
cjne A,menit,UpdateDisplay
mov menit,#0
;
UpdateDisplay:
mov a,detik
mov b,#10
div ab
mov detik1,b
mov detik10,a
;
mov a,menit
mov b,#10
div ab
mov menit1,b
mov menit10,a
ret
;
;======================================================================
;Rutine untuk display kode dan deteksi tombol enter
;1. Display kode masing-masing kelompok dengan memunculkan inisial
; huruf nama masing-masing anggota kelompok pada 7 segmen.
; Pada contoh ini dimunculkan kode 4 3 2 1
;2. Deteksi tombol enter dari port P3.3, apabila tidak ditekan maka
; akan memunculkan display 4 3 2 1 terus menerus, bila tombol ditekan
; maka akan melanjutkan instruksi dibawahnya.
;3. Scan Setting waktu yang diperlukan untuk pengoperasian alat dan
; setting akan disimpan bila tombol enter ditekan
;4. Scan Setting suhu yang diinginkan, dan disimpan bila tombol enter
; ditekan
;5. Label Start Operating akan mulai bekerja dengan melakukan control suhu
; sampai suhu tercapai bila suhu tercapai maka timer akan segera
; diinisialisasi dan beban mulai dihidupkan
;======================================================================
Start:
acall MovingDisplay
jb p3.3,start
;
Wait1:
jnb p3.3, wait1
mov detik,#60
mov menit,#60
;
SettingWaktu:
acall ScansettingJam
acall DisplayWaktu
sjmp SettingWaktu
;
wait2:
jnb p3.3, wait2
;
SettingSuhu:
acall ScanSettingSuhu
sjmp SettingSuhu
;
wait3:
jnb p3.3,wait3
;
StartOperating:
acall ADC
acall DisplaySuhu
acall ControlSuhu
jb ControlBit,StartOperating
;
acall InitTimer
;
Clr P1.4;Menghidupkan Beban
;
;======================================================================
;Main rutine
;1. Memanggil subrutine Control Suhu untuk tetap mempertahankan suhu
; Setting
;2. Memanggil Subrutine Display Waktu Untuk mengetahui waktu sisa
; dari waktu pengoperasian beban
;3. Scan tombol P3.3 untuk kembali ke awal, Scan tombol P3.6 untuk
; menampilkan display suhu, scan tombol P3.7 untuk menampilkan
; display Waktu
;4. Looping Forever akan terjadi untuk dua pilihan tersebut diatas
;======================================================================
ForeverWaktu:
Acall adc
Acall displaySuhuOff
Acall ControlSuhu
Acall DisplayWaktu
jnb P3.3,startAgain
jnb P3.6,ForeverSuhu
sjmp ForeverWaktu
ForeverSuhu:
acall adc
Acall DisplaySuhu
Acall ControlSuhu
jnb p3.3, startAgain
jnb P3.7,ForeverWaktu
sjmp ForeverSuhu
;
StartAgain:
jnb p3.3,startAgain
clr TR0
clr ET0
clr EA
sjmp start
;
;=====================================================================
;What do you think, I am use for?
;Pada saat label endProses dipanggil maka program akan terus menerus
;bersarang dan terkunci selamanya pada label ini
;=====================================================================
endProses:
mov P0,#11000000b
Clr P1.3
Clr P1.2
Clr P1.1
Clr P1.0
jnb p3.3,startAgain
sjmp endProses
;
;======================================================================
; L O O K U P T A B L E
; Decoder to Seven Segmen -> g f e d c b a
;======================================================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
;======================================================================
; L O O K U P T A B L E
; Suhu = DataADC*100/255
;======================================================================
;
Pecahan:
db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6
db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2
db 6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8
db 2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4
db 8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0
;
Satuan:
db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9
db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9
db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8
db 9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8
db 8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,0
;
Puluhan:
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
db 3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
db 5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
db 7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0
;
Ratusan:
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
;
KodeKlp1:
DB 10100011b,10000111b,10101011b,10001000b
KodeKlp2:
DB 10001000b,10100011b,10000111b,10101011b
KodeKlp3:
DB 10101011b,10001000b,10100011b,10000111b
KodeKlp4:
DB 10000111b,10101011b,10001000b,10100011b
end

Post a Comment

0 Comments