
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.
;================================================================
;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
 
 
 
 
 
0 Comments
Informasi Pilihan Identitas:
Google/Blogger : Khusus yang punya Account Blogger.
Lainnya : Jika tidak punya account blogger namun punya alamat Blog atau Website.
Anonim : Jika tidak ingin mempublikasikan profile anda (tidak disarankan).