; Pin definitions for SCL and SDA

#define SDA portc,4   ; = RC.4
#define SCL portc,3   ; = RC.3

	include ii2.inc

;*****************************************************************
; PCF8583ReadByte
; Reads 1 byte from PCF8583
;
; Inputs:
; IISLAVEADR = slave-address
; IIADR      = address to read
;
; Output:
; IIDATA and W-Register = received byte from PCF8583
;*****************************************************************


PCF8583ReadByte

	call iistart            ; start

	banksel iislaveadr
	bcf status,carry
	rlf iislaveadr,w        ; Slave-Address
	iorlw B'10100000'       ; device-code for PCF8583 + write

	call iisend             ; send control-byte

	btfsc status,carry
	goto PCF8583ReadByte    ; device send NAK - then again

	banksel iiadr
	movfw iiadr             ; send address

	call iisend

	btfsc status,carry
	goto PCF8583ReadByte    ; device send NAK - then again

	call iistart            ; repeated start

	banksel iislaveadr
	bcf status,carry
	rlf iislaveadr,w        ; Slave-Address
	iorlw B'10100001'       ; device-code for PCF8583 + read

	call iisend             ; send control-byte

	btfsc status,carry
	goto PCF8583ReadByte    ; device send NAK - then again

	call iirec              ; read byte
	banksel iidata
	movwf iidata

	call iinak              ; send NAK
	call iistop             ; thats all
	return

;*****************************************************************
; PCF8583WriteByte
; Writes 1 byte to PCF8583
;
; Inputs:
; IISLAVEADR = slave-address
; IIADR      = address to read
; IIDATA     = data send to PCF8583
;
; Output     = nothing
;*****************************************************************

PCF8583WriteByte

	call iistart            ; start

	banksel iislaveadr
	bcf status,carry
	rlf iislaveadr,w        ; Slave-Address
	iorlw B'10100000'       ; device-code for PCF8583 + write

	call iisend             ; send control-byte

	btfsc status,carry
	goto PCF8583WriteByte    ; device send NAK - then again

	banksel iiadr
	movfw iiadr             ; send address

	call iisend

	btfsc status,carry 
	goto PCF8583WriteByte    ; device send NAK - then again

	banksel iidata
	movfw iidata            ; send data

	call iisend

	btfsc status,carry
	goto PCF8583WriteByte    ; device send NAK - then again

	call iistop             ; thats all
	return

;*****************************************************************
; PCF8583ReadClock
;*****************************************************************

PCF8583ReadClock

; read seconds - address 2

	movlw 2
	banksel iiadr
	movwf iiadr

	call PCF8583ReadByte

            banksel iidata
            movwf iidata
            banksel asec
            movwf asec

	andlw H'0F'          ; single
	banksel asec_e
	movwf asec_e

	banksel iidata       ; tenner
	swapf iidata,w       ; Bit 7:4 <-> 3:0
	andlw H'0F'          ; mask Bit 3:0
	banksel asec_z       ; store
	movwf asec_z

                 
; read minutes - address 3

	banksel iiadr
	incf iiadr,f  ; iiadr+1

	call PCF8583ReadByte
	
	banksel iidata
	movwf iidata
	banksel aminut
	movwf aminut
	
	andlw H'0F'
	banksel amin_e
	movwf amin_e

	banksel iidata
	swapf iidata,w       ; Bit 7:4 <-> 3:0
	andlw H'0F'
	banksel amin_z
	movwf amin_z

; read hours - address 4

	banksel iiadr
	incf iiadr,f  ; iiadr+1

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel ahour
	movwf ahour

	andlw H'0F'
	banksel ahour_e
	movwf ahour_e

	banksel iidata
	swapf iidata,w       ; Bit 7:4 <-> 3:0
	andlw H'0F'
	banksel ahour_z
	movwf ahour_z


; read month/dayofweek - address 6

	banksel iiadr
	incf iiadr,f  ; iiadr+1
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
            swapf iidata,f
	rrf iidata,w
          	andlw B'00000111'
            banksel adayofweek
            movwf adayofweek

	return



;*****************************************************************
; PCF8583SetClock
;*****************************************************************

PCF8583SetClock

; Set seconds address 2

	movlw 2
	banksel iiadr
	movwf iiadr

	banksel asec_e
	movfw asec_e
	banksel iidata
	movwf iidata

	banksel asec_z
	swapf asec_z,w
	banksel iidata
	iorwf iidata,f

	call PCF8583WriteByte

; Set minutes address 3

	banksel iiadr
	incf iiadr,f   ; iiadr+1

	banksel amin_e
	movfw amin_e
	banksel iidata
	movwf iidata

	banksel amin_z
	swapf amin_z,w
	banksel iidata
	iorwf iidata,f

	call PCF8583WriteByte

; Set hours address 4

	banksel iiadr
	incf iiadr,f   ; iiadr+1

	banksel ahour_e
	movfw ahour_e
	banksel iidata
	movwf iidata

	banksel ahour_z
	swapf ahour_z,w
	banksel iidata
	iorwf iidata,f

	call PCF8583WriteByte

; Set month address 6

	banksel iiadr
	incf iiadr,f   ; iiadr+1
	incf iiadr,f

	banksel adayofweek
            swapf adayofweek,w
            banksel iidata
            movwf iidata
	rlf iidata,f
            movlw B'11100000'
            andwf iidata,f  
         
           	call PCF8583WriteByte
       
        	return



;*************************************************
; ReadRam
;*************************************************


ReadRam1

	movlw  40
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n10
	movwf n10
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n20
	movwf n20

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n30
	movwf n30


	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he0
	movwf he0

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u0
	movwf u0

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu0
	movwf mu0

	movlw  50
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n11
	movwf n11
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n21
	movwf n21

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n31
	movwf n31

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he1
	movwf he1

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u1
	movwf u1

	banksel iiadr	
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu1
	movwf mu2

	movlw  60
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n12
	movwf n12
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n22
	movwf n22

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n32
	movwf n32

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he2
	movwf he2

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u2
	movwf u2

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu2
	movwf mu2

	movlw  70
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n13
	movwf n13
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n23
	movwf n23

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n33
	movwf n33


	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he3
	movwf he3

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u3
	movwf u3

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu3
	movwf mu3

	movlw  80
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n14
	movwf n14
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n24
	movwf n24

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n34
	movwf n34


	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he4
	movwf he4

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u4
	movwf u4
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu4
	movwf mu4


	movlw  90
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n15
	movwf n15
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n25
	movwf n25

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n35
	movwf n35


	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he5
	movwf he5

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u5
	movwf u5

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu5
	movwf mu5

	movlw  H'64'
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n16
	movwf n16
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n26
	movwf n26

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel n36
	movwf n36

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel he6
	movwf he6

	banksel iiadr
	incf iiadr,f

	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel u6
	movwf u6

	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel mu6
	movwf mu6
	
	movlw  H'6E'
	banksel iiadr
	movwf iiadr
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx1
	movwf zx1
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx1_hi
	movwf zx1_hi
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte


	banksel iidata
	movwf iidata
	banksel zx2
	movwf zx2
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx2_hi
	movwf zx2_hi
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx3
	movwf zx3
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx3_hi
	movwf zx3_hi
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx4
	movwf zx4
	
	banksel iiadr
	incf iiadr,f
	
	call PCF8583ReadByte

	banksel iidata
	movwf iidata
	banksel zx4_hi
	movwf zx4_hi
	

	return

;******************************************
; SetRam1
;******************************************


RamSet1

	

	movlw 40
	banksel iiadr
	movwf iiadr

	banksel n10  ; 1 helyiérték 
	movfw n10
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n20   ; 2 helyiérték 
	movfw n20
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n30   ; 3 helyiérték
	movfw n30
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he0     ;  hét napja
	movfw he0
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u0   ; műszak
	movfw u0
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu0   ; műszak
	movfw mu0
	banksel iidata
	movwf iidata

	call PCF8583WriteByte


	movlw 50
	banksel iiadr
	movwf iiadr

	banksel n11  ; 1 helyiérték 
	movfw n11
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n21   ; 2 helyiérték 
	movfw n21
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n31   ; 3 helyiérték
	movfw n31
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he1     ;  hét napja
	movfw he1
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u1   ; műszak
	movfw u1
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu1   ; műszak
	movfw mu1
	banksel iidata
	movwf iidata

	call PCF8583WriteByte


	movlw 60
	banksel iiadr
	movwf iiadr

	banksel n12  ; 1 helyiérték 
	movfw n12
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n22   ; 2 helyiérték 
	movfw n22
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n32   ; 3 helyiérték
	movfw n32
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he2     ;  hét napja
	movfw he2
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u2   ; műszak
	movfw u2
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu2   ; műszak
	movfw mu2
	banksel iidata
	movwf iidata

	call PCF8583WriteByte


	movlw 70
	banksel iiadr
	movwf iiadr

	banksel n13  ; 1 helyiérték 
	movfw n13
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n23   ; 2 helyiérték 
	movfw n23
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n33   ; 3 helyiérték
	movfw n33
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he3     ;  hét napja
	movfw he3
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u3   ; műszak
	movfw u3
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu3   ; műszak
	movfw mu3
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	

	movlw 80
	banksel iiadr
	movwf iiadr

	banksel n14  ; 1 helyiérték 
	movfw n14
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n24   ; 2 helyiérték 
	movfw n24
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n34   ; 3 helyiérték
	movfw n34
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he4     ;  hét napja
	movfw he4
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u4   ; műszak
	movfw u4
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu4   ; műszak
	movfw mu4
	banksel iidata
	movwf iidata

	call PCF8583WriteByte


	movlw 90
	banksel iiadr
	movwf iiadr

	banksel n15  ; 1 helyiérték 
	movfw n15
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n25   ; 2 helyiérték 
	movfw n25
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n35   ; 3 helyiérték
	movfw n35
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he5     ;  hét napja
	movfw he5
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u5   ; műszak
	movfw u5
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu5   ; műszak
	movfw mu5
	banksel iidata
	movwf iidata

	call PCF8583WriteByte


	movlw H'64'
	banksel iiadr
	movwf iiadr

	banksel n16  ; 1 helyiérték 
	movfw n16
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n26   ; 2 helyiérték 
	movfw n26
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel n36   ; 3 helyiérték
	movfw n36
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	
	banksel iiadr
	incf iiadr,f

	banksel he6     ;  hét napja
	movfw he6
	banksel iidata
	movwf iidata

	call PCF8583WriteByte
	
	banksel iiadr
	incf iiadr,f

	banksel u6   ; műszak
	movfw u6
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel mu6   ; műszak
	movfw mu6
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	movlw H'6E'
	banksel iiadr
	movwf iiadr

	banksel zx1  ; 1 helyiérték 
	movfw zx1
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx1_hi   ; műszak
	movfw zx1_hi
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx2   ; műszak
	movfw zx2
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx2_hi   ; műszak
	movfw zx2_hi
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx3   ; műszak
	movfw zx3
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx3_hi   ; műszak
	movfw zx3_hi
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx4   ; műszak
	movfw zx4
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	banksel iiadr
	incf iiadr,f

	banksel zx4_hi   ; műszak
	movfw zx4_hi
	banksel iidata
	movwf iidata

	call PCF8583WriteByte

	return


