Rtc (Real Time Clock) Ds1307 Sebagai Pengatur Waktu Pada Sistem Traffic Light Adaptif

LAMPIRAN
A

Skematik Rangkaian Keseluruhan

LAMPIRAN
B

Program yang digunakan pada “RTC (Real Time Clock) DS1307 Sebagai
Pengatur Waktu Pada Sistem Traffic Light Adaptif”
$regfile = "m8def.dat"
$crystal = 16000000
$lib "ds1307clock.lib"
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 ,
Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E =
Portc.4
Config Lcd = 16 * 2
Cursor Off
Cls
Config Sda = Portd.7
Config Scl = Portd.6

Const Ds1307w = &HD0
Const Ds1307r = &HD1
Sqw Alias Pind.5
Tbl_menu Alias Pind.2
Tbl_up Alias Pind.3
Tbl_down Alias Pind.4
Pin_data Alias Portb.0
St_cp
'Enable
Sh_cp
'clock
Awal:
Enable Int0
Enable Interrupts
On Int0 Set_waktu
Dim
Dim
Dim
Dim
Dim

Dim
Dim

Jam As Byte
Menit As Byte
Detik As Byte
Tunda As Byte
Temp As Byte
Tunda_set As Byte
Slot As Byte

Dim Data1 As Byte
Dim Data2 As Byte
Locate 1 , 1
Lcd "Waktu: "

Alias

Portb.1


Alias

Portb.2

Locate 1 , 8
Lcd " : : "
Locate 2 , 1
Lcd "Slot:
Det:

"

Tunda = 0
Do
Gosub Ambil_waktu
Gosub Cek_slot
Gosub Tampil
If Slot = 1 Then
Data1 = &H42
Data2 = &H42

Gosub Kirim_data
Waitms 250
Data1 = 0
Data2 = 0
Gosub Kirim_data
Waitms 250
Else
Gosub Looping_lampu
End If
Loop
Kirim_data:
Shiftout Pin_data , Sh_cp , Data1 , 1
Shiftout Pin_data , Sh_cp , Data2 , 1
Set St_cp
Waitus 200
Reset St_cp
Return
Ambil_waktu:
I2cstart
I2cwbyte Ds1307w

I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte Detik , Ack
I2crbyte Menit , Ack
I2crbyte Jam , Nack
I2cstop
Detik = Makedec(detik)
Menit = Makedec(menit)
Jam = Makedec(jam)
If Temp Detik Then

Incr Tunda
End If
Temp = Detik
Return
Tampil:
Locate 1 , 8
If Jam < 10 Then
Locate 1 , 8

Lcd "0"
End If
Lcd Jam
Locate 1 , 11
If Menit < 10 Then
Locate 1 , 11
Lcd "0"
End If
Lcd Menit
Locate 1 , 14
If Detik < 10 Then
Locate 1 , 14
Lcd "0"
End If
Lcd Detik
Locate 2 , 14
If Tunda < 10 Then
Locate 2 , 14
Lcd "0"
End If

Lcd Tunda
Locate 2 , 7
Lcd Slot
Return
Set_waktu:
Disable Int0
Waitms 250
Do
If Tbl_up = 0 Then
Incr Menit
If Menit > 59 Then
Menit = 0
End If
Waitms 80

End If
If Tbl_down = 0 Then
Decr Menit
If Menit > 254 Then
Menit = 59

End If
Waitms 80
End If
Gosub Tampil
Waitms 80
Loop Until Tbl_menu = 0
Waitms 150
Do
If Tbl_up = 0 Then
Incr Jam
If Jam > 23 Then
Jam = 0
End If
Waitms 80
End If
If Tbl_down = 0 Then
Decr Jam
If Jam > 254 Then
Jam = 23
End If

Waitms 80
End If
Gosub Tampil
Waitms 80
Loop Until Tbl_menu = 0
Waitms 250

Detik = 0
Detik = Makebcd(detik)
Menit = Makebcd(menit)
Jam = Makebcd(jam)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte Detik
I2cwbyte Menit
I2cwbyte Jam
I2cstop
Locate 1 , 1


Lcd "Waktu: "
Locate 1 , 8
Lcd " : : "
Locate 2 , 1
Lcd "Slot:
Det:
Goto Awal
Return

"

Cek_slot:
If Jam >= 1 And Menit >= 0 Then
If Jam = 0 Then
If Jam = 0 Then
If Jam = 0 Then
If Jam = 0 Then
If Jam = 0 Then
If Jam = 0 Then
If Jam = 0 Then

If Jam