Mikrokontroler AT merupakan mikrokontroler yang multiguna. Pada proyek ini akan dibahas tentang aplikasi mikrokontoler AT89s51 sebagai programmable timer. Timer ini terdiri dari tampilan sebanyak 4 digit common anoda dan 4 tombol untuk START, UP, DOWN, RESET dan 1 buah relay
Tombol RESET digunakan untuk memulai dari awal kerja mikrokontroler,
Tombol START digunakan untuk memulai perhitungan waktu,
tombol UP untuk menaikkan nilai awal timer sedangkan tombol DOWN digunakan untuk menurunkan nilai awal timer
Berikut ini disajikan source code menggunakan bascom
'timer15p.bas
'timer 15 menit presetable
'oleh DJK
'tanggal 6 Jan 2012
'$regfile = "8052.dat"
$crystal = 12000000
'-------------------alokasi memori-----------------
Dim Detik_sat As Byte
Dim Detik_pul As Byte
Dim Menit_sat As Byte
Dim Menit_pul As Byte
Dim Jam_sat As Byte
Dim Jam_pul As Byte
Dim X50ms As Byte
Dim T500ms As Byte
Dim Detik As Byte
Dim Menit As Byte
Dim Jam As Byte
Dim Mulai As Boolean
Const Padam = 1
Const Nyala = 0
'deklarasi pin
Relay Alias P1.0
Dot Alias P1.1
Digit1 Alias P2.0 'LSB
Digit2 Alias P2.1
Digit3 Alias P2.2
Digit4 Alias P2.3 'MSB
Digit5 Alias P2.4
Digit6 Alias P2.5
Testpoint Alias P1.5
Pb_start Alias P3.4
Pb_menit Alias P3.3 'p3.3
Pb_jam Alias P3.2 'p3.2
'----------------Konfigurasi interupsi----------
Config Timer1 = Timer , Gate = Internal , Mode = 1
Enable Interrupts
Enable Timer1
'Enable Int0
'Enable Int1
'On Int1 Ubahmenit
'On Int0 Ubahjam
On Timer1 Waktu
'Set Tcon.0
'Set Tcon.2
Dot = 1
Jam = 0
Menit = 15
Detik = 0
'------------------program utama-------------------
'Load Timer1 , 50000
Th1 = High(15595) ' (15510) '65535 - 50000 + 75
Tl1 = Low(15595) ' (15510) '65535 - 50000 + 75
Mulai = 0
Start Timer1
Relay = 1
Main:
If Pb_start = 0 Then
Start Timer1
Mulai = 1
Relay = 0
End If
Gosub Hitung
Gosub Tampil
Goto Main
'************************************************************
'konversi variabel detik,menit dan jam menjadi digit terpisah
'************************************************************
Hitung:
Detik_sat = Detik Mod 10
Detik_pul = Detik / 10
Menit_sat = Menit Mod 10
Menit_pul = Menit / 10
Jam_sat = Jam Mod 10
Jam_pul = Jam / 10
Return
Tampil:
P0 = Lookup(detik_sat , Ca)
Digit6 = Padam : Digit5 = Padam : Digit4 = Padam : Digit3 = Padam : Digit2 = Padam : Digit1 = Nyala
'P2 = &HF1
Waitms 1
P0 = Lookup(detik_pul , Ca)
Digit6 = Padam : Digit5 = Padam : Digit4 = Padam : Digit3 = Padam : Digit2 = Nyala : Digit1 = Padam
' P2 = &HF2
Waitms 1
P0 = Lookup(menit_sat , Ca)
Digit6 = Padam : Digit5 = Padam : Digit4 = Padam : Digit3 = Nyala : Digit2 = Padam : Digit1 = Padam
' P2 = &HF4
Waitms 1
P0 = Lookup(menit_pul , Ca)
Digit6 = Padam : Digit5 = Padam : Digit4 = Nyala : Digit3 = Padam : Digit2 = Padam : Digit1 = Padam
' P2 = &HF8
Waitms 1
P0 = Lookup(jam_sat , Ca)
Digit6 = Padam : Digit5 = Nyala : Digit4 = Padam : Digit3 = Padam : Digit2 = Padam : Digit1 = Padam
' P2 = &HF4
Waitms 1
P0 = Lookup(jam_pul , Ca)
Digit6 = Nyala : Digit5 = Padam : Digit4 = Padam : Digit3 = Padam : Digit2 = Padam : Digit1 = Padam
' P2 = &HF8
Waitms 1
Return
'----------------interupt------------------
Waktu:
'Load Timer1 , 50000
Th1 = High(15595) ' (15510) '65535 - 50000 + 45
Tl1 = Low(15595) ' (15510) '65535 - 50000 + 45
Testpoint = Not Testpoint
Incr X50ms
T500ms = X50ms Mod 5
If T500ms = 0 Then
Dot = Not Dot
If Mulai = 0 Then
If Pb_menit = 0 Then
Gosub Menitup
End If
If Pb_jam = 0 Then
Gosub Menitdn
End If
End If
End If
If Mulai = 0 Then Goto Keluar_int
If X50ms = 20 Then 'sudah 1000ms
X50ms = 0
If Detik = 0 Then
If Menit = 0 Then
If Jam = 0 Then
Relay = 1
Stop Timer1
Else 'jam lainnya
Decr Jam
Menit = 59
Detik = 59
Goto Keluar_int
' Return
End If 'jam
Else 'menit lainnya
Decr Menit
Detik = 59
Goto Keluar_int
' Return
End If 'menit
Else 'detik lainnya
Decr Detik
Goto Keluar_int
' Return
End If 'detik
End If 't50ms
Keluar_int:
Return
'*******************
'subrutin ubah menit
'*******************
Menitup:
Incr Menit
If Menit >= 60 Then Menit = 0
Return
'*******************
'subrutin ubah menit
'*******************
Menitdn:
Decr Menit
If Menit <= 0 Then Menit = 60
Return
'*****************
'Subrutin Ubah jam
'*****************
Ubahjam:
Incr Jam
If Jam >= 24 Then Jam = 0
Return
Ca: 'common anode, aktif rendah
' Pgfedcba
Data &B11000000 'tampilan 0 ca
Data &B11111001 'tampilan 1 ca
Data &B10100100 'tampilan 2 ca
Data &B10110000 'tampilan 3 ca
Data &B10011001 'tampilan 4 ca
Data &B10010010 'tampilan 5 ca
Data &B10000010 'tampilan 6 ca
Data &B11111000 'tampilan 7 ca
Data &B10000000 'tampilan 8 ca
Data &B10010000 'tampilan 9 ca
Cc: 'common cathode, aktif tinggi
' Pgfedcba
Data &B00111111 'tampilan 0 cc
Data &B00000110 'tampilan 1 cc
Data &B01011011 'tampilan 2 cc
Data &B01001111 'tampilan 3 cc
Data &B01100110 'tampilan 4 cc
Data &B01101101 'tampilan 5 cc
Data &B01111101 'tampilan 6 cc
Data &B00000111 'tampilan 7 cc
Data &B01111111 'tampilan 8 cc
Data &B01101111 'tampilan 9 cc
.
klik di sini untuk source code bascom
klik di sini untuk timer15p.hex
No comments:
Post a Comment