Saturday, January 14, 2012

Programmable Timer menggunakan AT89s51 dan bascom

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