Berikut adalah source code jam digital AT89S52 + RTC DS1307.Untuk membuatnya dalam circuit nyata perhatikan source code, disitu ada port - port apa saja yang digunakan pada ic mikrokontrolernya .Contoh untuk tombol menu terdapat di port P2.1 ic mikrokontroler , agar lebih mudah membuatnya coba buat dulu di software proteus skematiknya dengan membaca source codenya.Setelah jadi di proteus compile source codenya dan coba simulasikan .
;==============================================================;
; Jam digital dengan rtc ds1307 + cd4094
;==============================================================;
; INISIALISASI PORT
;==============================================================;
;==============================================================;
; Jam digital dengan rtc ds1307 + cd4094
;==============================================================;
; INISIALISASI PORT
;==============================================================;
Down BIT P2.2
Menu bit p2.1
Up BIT P2.0
Menu bit p2.1
Up BIT P2.0
CD4094_CP BIT P3.2
CD4094_D BIT P3.1
CD4094_Str BIT P3.0
CD4094_D BIT P3.1
CD4094_Str BIT P3.0
I2C_SDA BIT P1.1
I2C_SCL BIT P1.0
I2C_SCL BIT P1.0
led bit p3.3
buzzer bit p3.4
buzzer bit p3.4
LEDDIGIT1 DATA 30H
LEDDIGIT2 DATA 31H
LEDDIGIT3 DATA 32H
LEDDIGIT4 DATA 33H
LEDDIGIT5 DATA 34H
LEDDIGIT6 DATA 35H
LEDDIGIT7 DATA 36H
LEDDIGIT8 DATA 37H
LEDDIGIT9 DATA 38H
LEDDIGIT10 DATA 39H
LEDDIGIT11 DATA 3AH
LEDDIGIT12 DATA 3BH
LEDDIGIT13 DATA 3CH
LEDDIGIT14 DATA 3DH
puluhan1 DATA 3eh
LEDDIGIT2 DATA 31H
LEDDIGIT3 DATA 32H
LEDDIGIT4 DATA 33H
LEDDIGIT5 DATA 34H
LEDDIGIT6 DATA 35H
LEDDIGIT7 DATA 36H
LEDDIGIT8 DATA 37H
LEDDIGIT9 DATA 38H
LEDDIGIT10 DATA 39H
LEDDIGIT11 DATA 3AH
LEDDIGIT12 DATA 3BH
LEDDIGIT13 DATA 3CH
LEDDIGIT14 DATA 3DH
puluhan1 DATA 3eh
detikan data 3fh
PULUHAN DATA 40H
RTCDETIK DATA 41H ;00
RTCMENIT DATA 42H ;01
RTCJAM DATA 43H ;02
RTCHARI DATA 44H ;03
RTCTANGGAL DATA 45H ;04
RTCBULAN DATA 46H ;05
RTCTAHUN DATA 47H ;06
RTCCONTROL DATA 48H ;07
DECL EQU 49H
DECH EQU 4AH
TMP EQU 4BH
;==============================================================;
; PROGRAM UTAMA
;============================================================;
ORG 00H
setb menu
setb up
setb down
PROGRAMLOOP:
CALL READALLRTC
mov detikan,rtcjam
mov puluhan1,#0
mov puluhan,rtcdetik
PULUHAN DATA 40H
RTCDETIK DATA 41H ;00
RTCMENIT DATA 42H ;01
RTCJAM DATA 43H ;02
RTCHARI DATA 44H ;03
RTCTANGGAL DATA 45H ;04
RTCBULAN DATA 46H ;05
RTCTAHUN DATA 47H ;06
RTCCONTROL DATA 48H ;07
DECL EQU 49H
DECH EQU 4AH
TMP EQU 4BH
;==============================================================;
; PROGRAM UTAMA
;============================================================;
ORG 00H
setb menu
setb up
setb down
PROGRAMLOOP:
CALL READALLRTC
mov detikan,rtcjam
mov puluhan1,#0
mov puluhan,rtcdetik
LOOP: JB MENU,Loop1
call tunda1detik
call tunda1detik
CALL READALLRTC
JMP EDIT_RTC
call tunda1detik
call tunda1detik
CALL READALLRTC
JMP EDIT_RTC
loop1: call readallrtc
call streamrtc
call sendmsgled
sjmp loop
;==============================================================;
; setting waktu
;==============================================================;
EDIT_RTC: CLR CD4094_CP
CLR CD4094_STR
ACALL CLRDISPLED
call streamrtc
call sendmsgled
sjmp loop
;==============================================================;
; setting waktu
;==============================================================;
EDIT_RTC: CLR CD4094_CP
CLR CD4094_STR
ACALL CLRDISPLED
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,LEDDIGIT5
ACALL CD4094_SHIFT
MOV A,LEDDIGIT6
ACALL CD4094_SHIFT
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,LEDDIGIT5
ACALL CD4094_SHIFT
MOV A,LEDDIGIT6
ACALL CD4094_SHIFT
SETB CD4094_STR
CLR CD4094_STR
CALL TUNDA1DETIK
CALL STREAMRTC
CLR CD4094_STR
CALL TUNDA1DETIK
CALL STREAMRTC
UP_JAM: JB UP,DOWN_JAM
call tunda1detik
CALL DELAY250US
JNB UP,$
MOV A,RTCJAM
CJNE A,#23H,UP_JAM2
MOV A,#0
JMP UP_JAM3
UP_JAM2: ADD A,#1
UP_JAM3: DA A
MOV RTCJAM,A
CALL TULIS_RTC_JAM
JMP EDIT_RTC
DOWN_JAM: JB DOWN,CEK_MENIT
call tunda1detik
CALL DELAY250US
JNB DOWN,$
MOV A,RTCJAM
MOV DPTR,#TABEL_DEC
MOVC A,@A+DPTR
DEC A
CJNE A,#0FFH,DOWN_JAM2
MOV A,#23
DOWN_JAM2: MOV DPTR,#TABEL_HEX
MOVC A,@A+DPTR
MOV RTCJAM,A
CALL TULIS_RTC_JAM
JMP EDIT_RTC
call tunda1detik
CALL DELAY250US
JNB UP,$
MOV A,RTCJAM
CJNE A,#23H,UP_JAM2
MOV A,#0
JMP UP_JAM3
UP_JAM2: ADD A,#1
UP_JAM3: DA A
MOV RTCJAM,A
CALL TULIS_RTC_JAM
JMP EDIT_RTC
DOWN_JAM: JB DOWN,CEK_MENIT
call tunda1detik
CALL DELAY250US
JNB DOWN,$
MOV A,RTCJAM
MOV DPTR,#TABEL_DEC
MOVC A,@A+DPTR
DEC A
CJNE A,#0FFH,DOWN_JAM2
MOV A,#23
DOWN_JAM2: MOV DPTR,#TABEL_HEX
MOVC A,@A+DPTR
MOV RTCJAM,A
CALL TULIS_RTC_JAM
JMP EDIT_RTC
CEK_MENIT: JB MENU,EDIT_RTC
call tunda1detik
CALL DELAY250US
JNB MENU,$
call tunda1detik
CALL DELAY250US
JNB MENU,$
CEK_MENIT_2:CLR CD4094_CP
CLR CD4094_STR
ACALL CLRDISPLED
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,LEDDIGIT3
ACALL CD4094_SHIFT
MOV A,LEDDIGIT4
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
SETB CD4094_STR
CLR CD4094_STR
CALL STREAMRTC
CALL TUNDA1DETIK
CLR CD4094_STR
ACALL CLRDISPLED
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,LEDDIGIT3
ACALL CD4094_SHIFT
MOV A,LEDDIGIT4
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
MOV A,#0
ACALL CD4094_SHIFT
SETB CD4094_STR
CLR CD4094_STR
CALL STREAMRTC
CALL TUNDA1DETIK
UP_MENIT: JB UP,DOWN_MENIT
call tunda1detik
CALL DELAY250US
JNB UP,$
MOV A,RTCMENIT
CJNE A,#59H,UP_MENIT2
MOV A,#0
JMP UP_MENIT3
call tunda1detik
CALL DELAY250US
JNB UP,$
MOV A,RTCMENIT
CJNE A,#59H,UP_MENIT2
MOV A,#0
JMP UP_MENIT3
UP_MENIT2: ADD A,#1
UP_MENIT3: DA A
MOV RTCMENIT,A
CALL TULIS_RTC_MENIT
JMP CEK_MENIT_2
UP_MENIT3: DA A
MOV RTCMENIT,A
CALL TULIS_RTC_MENIT
JMP CEK_MENIT_2
DOWN_MENIT: JB DOWN,KELUAR1
call tunda1detik
CALL DELAY250US
JNB DOWN,$
MOV A,RTCMENIT
MOV DPTR,#TABEL_DEC
MOVC A,@A+DPTR
DEC A
CJNE A,#0FFH,DOWN_MENIT2
MOV A,#59
DOWN_MENIT2:MOV DPTR,#TABEL_HEX
MOVC A,@A+DPTR
MOV RTCMENIT,A
CALL TULIS_RTC_MENIT
JMP CEK_MENIT_2
call tunda1detik
CALL DELAY250US
JNB DOWN,$
MOV A,RTCMENIT
MOV DPTR,#TABEL_DEC
MOVC A,@A+DPTR
DEC A
CJNE A,#0FFH,DOWN_MENIT2
MOV A,#59
DOWN_MENIT2:MOV DPTR,#TABEL_HEX
MOVC A,@A+DPTR
MOV RTCMENIT,A
CALL TULIS_RTC_MENIT
JMP CEK_MENIT_2
KELUAR1: JB MENU,CEK_MENIT_2
call tunda1detik
CALL DELAY250US
JNB MENU,$
CALL TULIS_RTC_DETIK
mov detikan,rtcjam
JMP LOOP
;==============================================================;
; HEXA KE DESIMAL
;==============================================================;
TABEL_HEX:
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H
DB 11H,12H,13H,14H,15H,16H,17H,18H,19H,20H
DB 21H,22H,23H,24H,25H,26H,27H,28H,29H,30H
DB 31H,32H,33H,34H,35H,36H,37H,38H,39H,40H
DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,50H
DB 51H,52H,53H,54H,55H,56H,57H,58H,59H,60H
DB 61H,62H,63H,64H,65H,66H,67H,68H,69H,70H
DB 71H,72H,73H,74H,75H,76H,77H,78H,79H,80H
DB 81H,82H,83H,84H,85H,86H,87H,88H,89H,90H
DB 91H,82H,93H,94H,95H,96H,97H,98H,99H
TABEL_DEC:
DB 00,01,02,03,04,05,06,07,08,09,00,00,00,00,00,00
DB 10,11,12,13,14,15,16,17,18,19,00,00,00,00,00,00
DB 20,21,22,23,24,25,26,27,28,29,00,00,00,00,00,00
DB 30,31,32,33,34,35,36,37,38,39,00,00,00,00,00,00
DB 40,41,42,43,44,45,46,47,48,49,00,00,00,00,00,00
DB 50,51,52,53,54,55,56,57,58,59,00,00,00,00,00,00
DB 60,61,62,63,64,65,66,67,68,69,00,00,00,00,00,00
DB 70,71,72,73,74,75,76,77,78,79,00,00,00,00,00,00
DB 80,81,82,83,84,85,86,87,88,89,00,00,00,00,00,00
DB 90,91,82,93,94,95,96,97,98,99,00,00,00,00,00,00
;==============================================================;
; TAMPILAN 7SEGMENT
;==============================================================;
SENDMSGLED: CLR CD4094_CP
CLR CD4094_STR
ACALL CLRDISPLED
MOV A,LEDDIGIT1
ACALL CD4094_SHIFT
MOV A,LEDDIGIT2
ACALL CD4094_SHIFT
MOV A,LEDDIGIT3
ACALL CD4094_SHIFT
MOV A,LEDDIGIT4
ACALL CD4094_SHIFT
MOV A,LEDDIGIT5
ACALL CD4094_SHIFT
MOV A,LEDDIGIT6
ACALL CD4094_SHIFT
SETB CD4094_STR
CLR CD4094_STR
RET
call tunda1detik
CALL DELAY250US
JNB MENU,$
CALL TULIS_RTC_DETIK
mov detikan,rtcjam
JMP LOOP
;==============================================================;
; HEXA KE DESIMAL
;==============================================================;
TABEL_HEX:
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H
DB 11H,12H,13H,14H,15H,16H,17H,18H,19H,20H
DB 21H,22H,23H,24H,25H,26H,27H,28H,29H,30H
DB 31H,32H,33H,34H,35H,36H,37H,38H,39H,40H
DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,50H
DB 51H,52H,53H,54H,55H,56H,57H,58H,59H,60H
DB 61H,62H,63H,64H,65H,66H,67H,68H,69H,70H
DB 71H,72H,73H,74H,75H,76H,77H,78H,79H,80H
DB 81H,82H,83H,84H,85H,86H,87H,88H,89H,90H
DB 91H,82H,93H,94H,95H,96H,97H,98H,99H
TABEL_DEC:
DB 00,01,02,03,04,05,06,07,08,09,00,00,00,00,00,00
DB 10,11,12,13,14,15,16,17,18,19,00,00,00,00,00,00
DB 20,21,22,23,24,25,26,27,28,29,00,00,00,00,00,00
DB 30,31,32,33,34,35,36,37,38,39,00,00,00,00,00,00
DB 40,41,42,43,44,45,46,47,48,49,00,00,00,00,00,00
DB 50,51,52,53,54,55,56,57,58,59,00,00,00,00,00,00
DB 60,61,62,63,64,65,66,67,68,69,00,00,00,00,00,00
DB 70,71,72,73,74,75,76,77,78,79,00,00,00,00,00,00
DB 80,81,82,83,84,85,86,87,88,89,00,00,00,00,00,00
DB 90,91,82,93,94,95,96,97,98,99,00,00,00,00,00,00
;==============================================================;
; TAMPILAN 7SEGMENT
;==============================================================;
SENDMSGLED: CLR CD4094_CP
CLR CD4094_STR
ACALL CLRDISPLED
MOV A,LEDDIGIT1
ACALL CD4094_SHIFT
MOV A,LEDDIGIT2
ACALL CD4094_SHIFT
MOV A,LEDDIGIT3
ACALL CD4094_SHIFT
MOV A,LEDDIGIT4
ACALL CD4094_SHIFT
MOV A,LEDDIGIT5
ACALL CD4094_SHIFT
MOV A,LEDDIGIT6
ACALL CD4094_SHIFT
SETB CD4094_STR
CLR CD4094_STR
RET
CLRDISPLED: MOV A,#0FFH
CD4094_SHIFT: MOV R4,#8
CD4094_SHLOOP:RLC A
MOV CD4094_D,C
SETB CD4094_CP
CLR CD4094_CP
DJNZ R4,CD4094_SHLOOP
RET
CD4094_SHIFT: MOV R4,#8
CD4094_SHLOOP:RLC A
MOV CD4094_D,C
SETB CD4094_CP
CLR CD4094_CP
DJNZ R4,CD4094_SHLOOP
RET
;==============================================================;
; DELAY
;==============================================================;
TUNDA1DETIK: MOV R7,#1
TUNDA1DETIKL2: MOV R6,#100
TUNDA1DETIKL1: MOV R5,#230
DJNZ R5,$
DJNZ R6,TUNDA1DETIKL1
DJNZ R7,TUNDA1DETIKL2
RET
; DELAY
;==============================================================;
TUNDA1DETIK: MOV R7,#1
TUNDA1DETIKL2: MOV R6,#100
TUNDA1DETIKL1: MOV R5,#230
DJNZ R5,$
DJNZ R6,TUNDA1DETIKL1
DJNZ R7,TUNDA1DETIKL2
RET
Tunda_1_2_Detik: MOV R7,#12
jmp Tunda1DetikL2
jmp Tunda1DetikL2
;==============================================================;
DELAY250US: PUSH ACC
MOV A,#250
DJNZ ACC,$
POP ACC
RET
;==============================================================;
; DATA TAMPILAN 7 SEGMENT
;==============================================================;
GETLEDNUM: INC A
MOVC A,@A+PC
RET
CHARLED0:
DB 0f6h ;0
DB 082h ;1
DB 0d5h ;2
DB 0c7h ;3
DB 0a3h ;4
DB 067h ;5
DB 077h ;6
DB 0c2h ;7
DB 0ffh ;8
DB 0e7h ;9
DB 10001000B ;A
DB 10000011B ;B
DB 11000110B ;C
DB 10100001B ;D
DB 10000110B ;E
DB 10001110B ;F
;==============================================================;
; AMBIL DATA RTC SIMPAN KE RAM MIKRO
;==============================================================;
STREAMRTC: MOV A,RTCDETIK
SWAP A
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT2,A
MOV A,RTCDETIK
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT1,A
MOV A,RTCMENIT
SWAP A
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT4,A
MOV A,RTCMENIT
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT3,A
MOV A,RTCJAM
SWAP A
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT6,A
MOV A,RTCJAM
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT5,A
ret
DELAY250US: PUSH ACC
MOV A,#250
DJNZ ACC,$
POP ACC
RET
;==============================================================;
; DATA TAMPILAN 7 SEGMENT
;==============================================================;
GETLEDNUM: INC A
MOVC A,@A+PC
RET
CHARLED0:
DB 0f6h ;0
DB 082h ;1
DB 0d5h ;2
DB 0c7h ;3
DB 0a3h ;4
DB 067h ;5
DB 077h ;6
DB 0c2h ;7
DB 0ffh ;8
DB 0e7h ;9
DB 10001000B ;A
DB 10000011B ;B
DB 11000110B ;C
DB 10100001B ;D
DB 10000110B ;E
DB 10001110B ;F
;==============================================================;
; AMBIL DATA RTC SIMPAN KE RAM MIKRO
;==============================================================;
STREAMRTC: MOV A,RTCDETIK
SWAP A
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT2,A
MOV A,RTCDETIK
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT1,A
MOV A,RTCMENIT
SWAP A
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT4,A
MOV A,RTCMENIT
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT3,A
MOV A,RTCJAM
SWAP A
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT6,A
MOV A,RTCJAM
ANL A,#00FH
ACALL GETLEDNUM
MOV LEDDIGIT5,A
ret
;=================;
; TULIS / BACA RTC
;==============================================================;
tulis_sqw: MOV A,#11010000B
MOV B,#07H ;ALAMAT
MOV R1,#10010000b ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_sqw_RTC
RET
ERROR_sqw_RTC: JMP TULIS_sqw
; TULIS / BACA RTC
;==============================================================;
tulis_sqw: MOV A,#11010000B
MOV B,#07H ;ALAMAT
MOV R1,#10010000b ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_sqw_RTC
RET
ERROR_sqw_RTC: JMP TULIS_sqw
TULIS_RTC_BULAN: MOV A,#11010000B
MOV B,#05H ;ALAMAT
MOV R1,RTCBULAN ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_BULAN_RTC
RET
MOV B,#05H ;ALAMAT
MOV R1,RTCBULAN ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_BULAN_RTC
RET
ERROR_BULAN_RTC: JMP TULIS_RTC_BULAN
TULIS_RTC_TANGGAL:MOV A,#11010000B
MOV B,#04H ;ALAMAT
MOV R1,RTCTANGGAL ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_TANGGAL_RTC
RET
MOV B,#04H ;ALAMAT
MOV R1,RTCTANGGAL ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_TANGGAL_RTC
RET
ERROR_TANGGAL_RTC:JMP TULIS_RTC_TANGGAL
TULIS_RTC_TAHUN: MOV A,#11010000B
MOV B,#06H ;ALAMAT
MOV R1,RTCTAHUN ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_TAHUN_RTC
RET
MOV B,#06H ;ALAMAT
MOV R1,RTCTAHUN ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_TAHUN_RTC
RET
ERROR_TAHUN_RTC: JMP TULIS_RTC_TAHUN
TULIS_RTC_JAM: MOV A,#11010000B
MOV B,#02H ;ALAMAT
MOV R1,RTCJAM ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_JAM_RTC
RET
ERROR_JAM_RTC: JMP TULIS_RTC_JAM
TULIS_RTC_MENIT: MOV A,#11010000B
MOV B,#01H ;ALAMAT
MOV R1,RTCMENIT ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_MENIT_RTC
RET
ERROR_MENIT_RTC: jMP TULIS_RTC_MENIT
TULIS_RTC_DETIK: MOV A,#11010000B
MOV B,#00H ;ALAMAT
MOV R1,#00H ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_DETIK_RTC
RET
ERROR_DETIK_RTC: JMP TULIS_RTC_DETIK
BACA_RTC: MOV A,#11010001B ;SLAVEADD DS1307
MOV B,#00H ;ALAMAT 00H
ACALL I2C_READBYTE
JC ERROR_B_RTC
;MOV PULUHAN,A ;SIMPAN DI PULUHAN
mov rtcdetik,a
RET
ERROR_B_RTC: JMP BACA_RTC
STARTRTC: MOV A,RTCDETIK
ANL A,#7FH
MOV R1,A
MOV A,#11010000B
MOV B,#0
ACALL I2C_WRITEBYTE ; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATA BYTE
MOV R1,#10H
MOV A,#11010000B
MOV B,#07 ;ADDRESS FOR CONTROL
ACALL I2C_WRITEBYTE ; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATA BYTE
READALLRTC: MOV A,#11010001B ;SLAVEADDRESS
MOV B,#0
MOV R1,#RTCDETIK
MOV R2,#9
ACALL I2C_READDATA ; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATAMEMORYOFFSET, R2 = COUNTER
RET
;==============================================================;
; PENGENDALI BUS IIC
; BANDWIDTH SEKITAR 80 KHZ (MODE-NORMAL-SPEED)
; MODUL INI BUTUH “ERRORSEQU.INC”
;==============================================================;
ERR_DL_WRONGCOMMAND EQU 1
ERR_DL_BADCONVERT EQU 2
ERR_DL_OUTOFMEMORY EQU 3
ERR_DL_INVALIDCHECKSUM EQU 4
ERR_DL_INVALIDCMDFORMAT EQU 5
ERR_DL_WRITEFAIL EQU 6
ERR_DL_VERIFYGOTERROR EQU 7
ERR_IIC_BUSFAILTOSTART EQU 11
ERR_IIC_INVALIDSLAADDR EQU 12
ERR_IIC_INVALIDADDRESS EQU 13
ERR_IIC_PREMATURENOACK EQU 14
DELAY_3MC:
NOP
NOP
NOP
RET
DELAY_4MC:
NOP
NOP
NOP
NOP
RET
RELEASE_SCL_HIGH:
SETB I2C_SCL
JNB I2C_SCL,$
RET
;==============================================================;
I2C_START: SETB I2C_SDA
SETB I2C_SCL
JNB I2C_SDA, I2C_BUSBUSY
JNB I2C_SCL, I2C_BUSBUSY
CLR I2C_SDA
PUSH ACC
POP ACC
CLR I2C_SCL
PUSH ACC
POP ACC
CLR C
RET
I2C_BUSBUSY: SETB C
RET
;==============================================================;
I2C_STOP: CLR I2C_SDA
CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
SETB I2C_SDA
RET
;==============================================================;
I2C_SENDBYTE: PUSH B
MOV B,#8
I2C_SENDBYTEL: RLC A ;1MC |
MOV I2C_SDA,C ;2MC |
CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
CLR I2C_SCL ;1MC +-+
DJNZ B,I2C_SENDBYTEL ;2MC |
CALL RELEASE_SCL_HIGH
CALL DELAY_4MC
MOV C,I2C_SDA ;1MC | READ ACK/NOACK
CLR I2C_SCL ;1MC +-+
CALL DELAY_3MC
POP B ;2MC |
RET
; LOW = 6MC HIGH = 5MC
;==============================================================;
I2C_GETBYTE: PUSH B
PUSH PSW ;SAVE CY
MOV B,#8
SETB I2C_SDA ;1MC |
I2C_GETBYTEL: CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
MOV C,I2C_SDA ;1MC |
RLC A ;1MC |
CLR I2C_SCL ;1MC +-+
CALL DELAY_3MC
DJNZ B,I2C_GETBYTEL ;2MC |
POP PSW ;1MC | LOAD CY
MOV I2C_SDA,C ;2MC |
CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
CLR I2C_SCL ;1MC +-+
SETB I2C_SDA ;1MC |
NOP
NOP
POP B ;1MC | LOAD CY
RET
; LOW = 6MC HIGH = 5MC
;==============================================================;
;==============================================================;
I2C_WRITEBYTE: CALL I2C_START
JC L_ERROR1
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
MOV A,R1
CALL I2C_SENDBYTE ;SEND DATA BYTE
JC L_ERROR4
CALL I2C_STOP
CLR C
CALL I2C_WRITEDELAY
CLR A
MOV B,A ;MAX 5MS
I2C_WRITEBYTEL: DJNZ ACC,I2C_WRITEBYTEL
DJNZ B,I2C_WRITEBYTEL
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATA BYTE
;==============================================================;
I2C_READBYTE: CALL I2C_START
JC L_ERROR1
MOV DPL,A ;SAVE SLAVEADDRESS
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
CALL I2C_START
JC L_ERROR1
MOV A,DPL ;LOAD SLAVEADDRESS AGAIN
SETB ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
SETB C ;SET TO NOACK
CALL I2C_GETBYTE ;GET DATA BYTE
CALL I2C_STOP
CLR C
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS
;==============================================================;
I2C_WRITEDATA: CALL I2C_START
JC L_ERROR1
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
I2C_WRITEDATAL: MOV A,@R1
CALL I2C_SENDBYTE ;SEND DATA BYTE
INC R1
JC L_ERROR4
DJNZ R2,I2C_WRITEDATAL
I2C_WRITEDATAE: CALL I2C_STOP
CLR C
CALL I2C_WRITEDELAY
I2C_WRITEDELAY: CLR A
MOV B,A ;MAX 5MS (( 2 *256 ) * 256 )
I2C_WRITEDATAF: DJNZ ACC,I2C_WRITEDATAF
DJNZ B,I2C_WRITEDATAF
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATAMEMORYOFFSET, R2 = COUNTER,
;==============================================================;
L_ERROR1: MOV A,#ERR_IIC_BUSFAILTOSTART
CALL I2C_STOP
RET
L_ERROR2: MOV A,#ERR_IIC_INVALIDSLAADDR
CALL I2C_STOP
RET
L_ERROR3: MOV A,#ERR_IIC_INVALIDADDRESS
CALL I2C_STOP
RET
L_ERROR4: MOV A,#ERR_IIC_PREMATURENOACK
CALL I2C_STOP
RET
;==============================================================;
I2C_READDATA: CALL I2C_START
JC L_ERROR1
MOV DPL,A ;SAVE SLAVEADDRESS
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
CALL I2C_START
JC L_ERROR1
MOV A,DPL ;LOAD SLAVEADDRESS AGAIN
SETB ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
DEC R2
I2C_READDATAL: CLR C ;SET TO ACK
CALL I2C_GETBYTE ;GET DATA BYTE
MOV @R1,A
INC R1
DJNZ R2,I2C_READDATAL
SETB C ;SET TO NOACK
CALL I2C_GETBYTE ;GET DATA BYTE
MOV @R1,A
CALL I2C_STOP
CLR C
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATAMEMORYOFFSET,
END
Demikian source code jam digitalnya semoga bermanfaat
MOV B,#02H ;ALAMAT
MOV R1,RTCJAM ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_JAM_RTC
RET
ERROR_JAM_RTC: JMP TULIS_RTC_JAM
TULIS_RTC_MENIT: MOV A,#11010000B
MOV B,#01H ;ALAMAT
MOV R1,RTCMENIT ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_MENIT_RTC
RET
ERROR_MENIT_RTC: jMP TULIS_RTC_MENIT
TULIS_RTC_DETIK: MOV A,#11010000B
MOV B,#00H ;ALAMAT
MOV R1,#00H ;DATANYA
ACALL I2C_WRITEBYTE
JC ERROR_DETIK_RTC
RET
ERROR_DETIK_RTC: JMP TULIS_RTC_DETIK
BACA_RTC: MOV A,#11010001B ;SLAVEADD DS1307
MOV B,#00H ;ALAMAT 00H
ACALL I2C_READBYTE
JC ERROR_B_RTC
;MOV PULUHAN,A ;SIMPAN DI PULUHAN
mov rtcdetik,a
RET
ERROR_B_RTC: JMP BACA_RTC
STARTRTC: MOV A,RTCDETIK
ANL A,#7FH
MOV R1,A
MOV A,#11010000B
MOV B,#0
ACALL I2C_WRITEBYTE ; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATA BYTE
MOV R1,#10H
MOV A,#11010000B
MOV B,#07 ;ADDRESS FOR CONTROL
ACALL I2C_WRITEBYTE ; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATA BYTE
READALLRTC: MOV A,#11010001B ;SLAVEADDRESS
MOV B,#0
MOV R1,#RTCDETIK
MOV R2,#9
ACALL I2C_READDATA ; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATAMEMORYOFFSET, R2 = COUNTER
RET
;==============================================================;
; PENGENDALI BUS IIC
; BANDWIDTH SEKITAR 80 KHZ (MODE-NORMAL-SPEED)
; MODUL INI BUTUH “ERRORSEQU.INC”
;==============================================================;
ERR_DL_WRONGCOMMAND EQU 1
ERR_DL_BADCONVERT EQU 2
ERR_DL_OUTOFMEMORY EQU 3
ERR_DL_INVALIDCHECKSUM EQU 4
ERR_DL_INVALIDCMDFORMAT EQU 5
ERR_DL_WRITEFAIL EQU 6
ERR_DL_VERIFYGOTERROR EQU 7
ERR_IIC_BUSFAILTOSTART EQU 11
ERR_IIC_INVALIDSLAADDR EQU 12
ERR_IIC_INVALIDADDRESS EQU 13
ERR_IIC_PREMATURENOACK EQU 14
DELAY_3MC:
NOP
NOP
NOP
RET
DELAY_4MC:
NOP
NOP
NOP
NOP
RET
RELEASE_SCL_HIGH:
SETB I2C_SCL
JNB I2C_SCL,$
RET
;==============================================================;
I2C_START: SETB I2C_SDA
SETB I2C_SCL
JNB I2C_SDA, I2C_BUSBUSY
JNB I2C_SCL, I2C_BUSBUSY
CLR I2C_SDA
PUSH ACC
POP ACC
CLR I2C_SCL
PUSH ACC
POP ACC
CLR C
RET
I2C_BUSBUSY: SETB C
RET
;==============================================================;
I2C_STOP: CLR I2C_SDA
CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
SETB I2C_SDA
RET
;==============================================================;
I2C_SENDBYTE: PUSH B
MOV B,#8
I2C_SENDBYTEL: RLC A ;1MC |
MOV I2C_SDA,C ;2MC |
CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
CLR I2C_SCL ;1MC +-+
DJNZ B,I2C_SENDBYTEL ;2MC |
CALL RELEASE_SCL_HIGH
CALL DELAY_4MC
MOV C,I2C_SDA ;1MC | READ ACK/NOACK
CLR I2C_SCL ;1MC +-+
CALL DELAY_3MC
POP B ;2MC |
RET
; LOW = 6MC HIGH = 5MC
;==============================================================;
I2C_GETBYTE: PUSH B
PUSH PSW ;SAVE CY
MOV B,#8
SETB I2C_SDA ;1MC |
I2C_GETBYTEL: CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
MOV C,I2C_SDA ;1MC |
RLC A ;1MC |
CLR I2C_SCL ;1MC +-+
CALL DELAY_3MC
DJNZ B,I2C_GETBYTEL ;2MC |
POP PSW ;1MC | LOAD CY
MOV I2C_SDA,C ;2MC |
CALL RELEASE_SCL_HIGH
CALL DELAY_3MC
CLR I2C_SCL ;1MC +-+
SETB I2C_SDA ;1MC |
NOP
NOP
POP B ;1MC | LOAD CY
RET
; LOW = 6MC HIGH = 5MC
;==============================================================;
;==============================================================;
I2C_WRITEBYTE: CALL I2C_START
JC L_ERROR1
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
MOV A,R1
CALL I2C_SENDBYTE ;SEND DATA BYTE
JC L_ERROR4
CALL I2C_STOP
CLR C
CALL I2C_WRITEDELAY
CLR A
MOV B,A ;MAX 5MS
I2C_WRITEBYTEL: DJNZ ACC,I2C_WRITEBYTEL
DJNZ B,I2C_WRITEBYTEL
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATA BYTE
;==============================================================;
I2C_READBYTE: CALL I2C_START
JC L_ERROR1
MOV DPL,A ;SAVE SLAVEADDRESS
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
CALL I2C_START
JC L_ERROR1
MOV A,DPL ;LOAD SLAVEADDRESS AGAIN
SETB ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
SETB C ;SET TO NOACK
CALL I2C_GETBYTE ;GET DATA BYTE
CALL I2C_STOP
CLR C
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS
;==============================================================;
I2C_WRITEDATA: CALL I2C_START
JC L_ERROR1
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
I2C_WRITEDATAL: MOV A,@R1
CALL I2C_SENDBYTE ;SEND DATA BYTE
INC R1
JC L_ERROR4
DJNZ R2,I2C_WRITEDATAL
I2C_WRITEDATAE: CALL I2C_STOP
CLR C
CALL I2C_WRITEDELAY
I2C_WRITEDELAY: CLR A
MOV B,A ;MAX 5MS (( 2 *256 ) * 256 )
I2C_WRITEDATAF: DJNZ ACC,I2C_WRITEDATAF
DJNZ B,I2C_WRITEDATAF
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATAMEMORYOFFSET, R2 = COUNTER,
;==============================================================;
L_ERROR1: MOV A,#ERR_IIC_BUSFAILTOSTART
CALL I2C_STOP
RET
L_ERROR2: MOV A,#ERR_IIC_INVALIDSLAADDR
CALL I2C_STOP
RET
L_ERROR3: MOV A,#ERR_IIC_INVALIDADDRESS
CALL I2C_STOP
RET
L_ERROR4: MOV A,#ERR_IIC_PREMATURENOACK
CALL I2C_STOP
RET
;==============================================================;
I2C_READDATA: CALL I2C_START
JC L_ERROR1
MOV DPL,A ;SAVE SLAVEADDRESS
CLR ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
MOV A,B
CALL I2C_SENDBYTE ;SEND WORD ADDRESS
JC L_ERROR3
CALL I2C_START
JC L_ERROR1
MOV A,DPL ;LOAD SLAVEADDRESS AGAIN
SETB ACC.0
CALL I2C_SENDBYTE ;SEND SLAVEADDRESS
JC L_ERROR2
DEC R2
I2C_READDATAL: CLR C ;SET TO ACK
CALL I2C_GETBYTE ;GET DATA BYTE
MOV @R1,A
INC R1
DJNZ R2,I2C_READDATAL
SETB C ;SET TO NOACK
CALL I2C_GETBYTE ;GET DATA BYTE
MOV @R1,A
CALL I2C_STOP
CLR C
RET
; ACC = SLAVEADDRESS, B = WORDADDRESS, R1 = DATAMEMORYOFFSET,
END
Demikian source code jam digitalnya semoga bermanfaat
Bisa kirimi schematicnya ga bang.riyadi88@gmail.com
ReplyDeleteCoba Cek Emailnya semoga bermanfaat
ReplyDeleteschematicnya sdh sya terima bang
ReplyDeletesource code nya saya compile ke hex juga sdh ok
dischematicnya ada beberapa komponen yg belum saya hafal.bisa di posting ga nama nama komponennya
saya pakai proteus 8
terima kasih
Mas Imam, perkenalkan saya Teri Rahman, tinggal di Garut. Tolong Mas diemailkan file skematik untuk jam digital ini Mas. alamat emailnya: smk.attazkiyyahgarut@gmail.com.
ReplyDeleteTerima kasih.
Coba cek emailnya semoga bermanfaat
DeleteBoleh minta skema rangkaian nya nggak? Thanks...
DeleteEmail saya "fadli_yes@yahoo.co.id"
Deletecoba cek emailnya
Deletemas saya boleh minta sechematicnya ini email saya tyaservicebtgd@gmail.com
ReplyDeletetrus buat compilenya pake software apa? maklum lagi belajar mas
makasih mas atas kebaikanya.moga semakin bertambah ilmunya
@tya service Coba cek emailnya semoga bermanfaat
ReplyDeletemakasih banyak mas sechematic nya semoga ilmunya makin bertambah dan bermanfaat bagi orang bayak.makasih banyak.ditunggu ide-ide cemerlang berikut nya
DeleteMas Imam, bisa minta skematiknya gak, ini email saya ranoput@gmail.com, trima kasih.
ReplyDeleteCoba Cek Emailnya Semoga Bermanfaat
Deletemas imam kalau boleh berbagi mohon kirim ke email sya nurdin.encep@yahoo.co.id trimakasih sebelum nya
ReplyDeleteSilahkan cek emailnya semoga bermanfaat
Deletemas imam boleh minta skematiknya sekaligus dengan source code yang sudah di compile, kalau boleh kirim email ke agusdwicahyanto130896@gmail.com terima kasih.
ReplyDeleteCoba Cek Emailnya Semoga Bermanfaat
Deletemas imam boleh minta skematik,kalau boleh kirim email ke edwinoktofrialdi@gmail.com terima kasih
ReplyDeleteMas Edwin Coba Cek Emailnya Semoga Bermanfaat
Deletemas imam boleh minta skematikny dan dengan source code yang sudah di compile, kalau boleh kirim email yogadannu@gmail.com terima mas
ReplyDeletemas boleh minta skema nya dan source code nya.kirik ke oshenizer@gmail.com terima kasih
ReplyDelete@ Mas Dannu dan Mas Afif Coba cek emailnya ,semoga bermanfaat
ReplyDeletemas boleh minta skema nya dan source code nya.kirim kearifdarmansyah04@gmail.com
ReplyDeleteCoba cek emailnya ,semoga bermanfaat
DeleteAssalamualaikum, Mas Imam, bisa minta skematiknya lagi seru-seru belajar. ini email saya (amyuhara@gmail.com) makasih banyak sebelumnya. Zzakallah.
ReplyDelete@rzn amyuhara coba cek emailnya semoga bermanfaat
DeleteAssalamualaikum, Mas Imam terimakasih banyak
DeleteBagus artikelnya.. Tapi sayang ga ada.skematiknya.. Kirimi dong di nandabagusprasetya@gmail.com
ReplyDeletecoba cek emailnya semoga bermanfaat
DeleteThanks gan.. Uda sampe. Tinggal di coba di proteus..
DeleteIjin coba jamnya mas Imam
ReplyDeleteYa silahkan semoga bermanfaat
DeleteIjin minta schemanya gan...mau nular ilmunya email saya yoyokelektro@gmail.com
ReplyDeletecoba cek emailnya semoga bermanfaat
Deletemas imam boleh minta schematic sama sourd codenya gak? saya juga pengen belajar nihh nambah2 ilmu moga bermanfaat email saya arfiafmi@gmail.com
ReplyDeletecoba cek emailnya semoga bermanfaat
Deleteterimakasih mas imam
ReplyDeleteohh iyaa mas , cara ngehidupin buzzernya agar setiap jam bunyi gimana mas ?
boleh minta listing program buzzernya
semoga bermanfaat
terima kasih
mas imam boleh minta schematic sama sourd codenya gak? saya juga pengen belajar nihh nambah2 ilmu moga bermanfaat email saya : muhnasir.tmj@gmail.com. Thanks sebelumnya
ReplyDeleteMas imam minta scematic ny dong.
ReplyDeletedefrinursubagja@gmail.com
Mas imam minta scematic ny dong.
ReplyDeletedefrinursubagja@gmail.com
coba cek emailnya semoga bermanfaat
DeleteIjin coba projectnya mas, kirim schematicnya ke : sugganda1970@gmail.com
ReplyDeletecoba cek emailnya semoga bermanfaat
DeleteSharing ilmunya sangat menarik. Mohon dikirimkan juga skematik dan source code nya ya mas Imam ke email saya asruljit@gmail.com
ReplyDeleteMoga ilmu mas imam barokah.
Terima kasih
Asrul yanuar
coba cek emailnya semoga bermanfaat
Deleteassalammu'alaikum,, ijin minta skema nya jcahya14@gmail.com
ReplyDeletesemoga ilmunya bermanfaat :)
terima kasih
Jeka Cahya
Luar Biasa, sekalian skematik ke kangmastj@gmail.com ya om...
ReplyDeleteSemoga menjadi amal barokah atas ilmu gratis yg dibagikan, amiiin...
Coba cek emailnya....semoga bermanfaat
ReplyDeleteMas maaf boleh saya minta skema nya.. email :khof.fha@gmail.com trimakasih
ReplyDeleteassalamualaikum mas boleh minta skematiknya ? kirim ke email saya saja krahardian58@gmail.con
ReplyDeleteAssalamualaikum mas imam, msh sering check blog nggak nich, bagi2 skemanya yg ini dong ke saya buat belajar, kl berkenan kirim ke priadi.amfi@gmail.com yach... trims
ReplyDeleteWalaikum salam
DeleteUntuk skema silahkan kunjungi di sini
https://drive.google.com/open?id=0B5Clr7D8G3WSRXRSZjFLakhwUzdrUHpZcTNUVGRocHNZWUJj
Untuk yang membutuhkan skemanya silahkan kunjungi link ini
ReplyDeletehttps://drive.google.com/open?id=0B5Clr7D8G3WSRXRSZjFLakhwUzdrUHpZcTNUVGRocHNZWUJj
Maf mas bisa kirimin coding+skemati ya mas
ReplyDeleteKreatifgame@gmail.com
mas boleh minta schematic diagramnya krn yg di google drive ternyata untuk AT89s51.. bila berkenan kirim skematiknya ke deecha_pipe@yahoo.com ...matur nuhun
ReplyDeletemas imam boleh minta schematic+code+ nama komponen sya proteus 8 kirim ke: fais_iskha@yahoo.co.id
ReplyDeleteMas imam, boleh minta schematic + codingnya? Bila berkenan bisa kirim ke yuliaazizah98@gmail.com
ReplyDeleteTerimakasih sebelumnya
Mas imam mhn maaf boleh minta schematic+coding ke email :arifdarmansyah04@gmail.com..terima kasih sebelumnya..semoga ilmunya menjadi berkah
ReplyDeleteMas imam mhn maaf boleh minta schematic+coding ke email : joshellena@gmail.com
ReplyDeleteterima kasih sebelumnya..semoga ilmunya menjadi berkah
Mas boleh minta skema nya. Email saya: bambangk20@gmail.com
ReplyDeleteList itu kalau di compile pake MIdE 51 kok gk bisa ya mas. Cara compile menjadi file hex nya bagaimana?
Ass. Maaf boleh minta sourcecode jam led gak.v pake yang dot matrik p8 atau p10
ReplyDeleteV jangan yg pake jadwal solat yg biasa z. Trus tulisannya yg berganti fontnya
Ini alamt emal saya
asep.m43@yahoo.com
Assalamu'alaikum mas imam boleh minta skemanya mas sma sourcecodenya..
ReplyDeletescouteng41@gmail.com
Postingan sudah lama ya mas, tp kalo diperkenanakan mohon utk bisa kirimi skemanya.
ReplyDeleteTerima kasih sebelumnya.
jlukito26.jl@gmail.com
Bang boleh dikrim skema nya ga terimakasih bang
ReplyDelete