RTC DS1302 interface - part 1 of 3

TO ALL THOSE BARE BONED AND LAND LEVEL FELLOWS like me who need to know how interface works with RTC DS1302. It's a special and unique form of transmission, not an I²C, SPI, UART but more an ONE-WIRE-like interface, not equal, indeed it's bi-directional on one wire also using two wires for clock and acknowledge signals. I've realized a simple sketch without using library. Everyone who would need to study this chip, very simple and cheap, can start from here (work in progress).
A mention to: ZBASICANDY
LAVERNE ERVIN
PETER H. ANDERSON
MARK KOH
LUIGI CHIAVERINA (my professor at High school, who did the final but extremely helpful comment).

scrive_orario by LYON

/* WRITE AND READ TIME TO AND FROM DS1302
ACTUAL TIME IN THE DEFINE SECTION
MODIFY CONSTANT VALUES
*/

#define RSTPort 2  //defining arduino ports
#define CLKPort 3
#define I_OPort 4
#define DelayTest 1

#define sec    0
#define minu   0
#define hou    0
#define date   0
#define day    0
#define mon    6
#define year   0
#define wp     0

void setup ()
{
  Serial.begin(112500);
  pinMode(RSTPort, OUTPUT);
  pinMode(CLKPort, OUTPUT);
  pinMode(I_OPort, OUTPUT);
  digitalWrite(RSTPort, LOW);
  digitalWrite(CLKPort, LOW);
  digitalWrite(I_OPort, LOW);
}

void loop()   //clear Write Protect (WP) bit and unhalt Control Halt (CH)
{
/* send  0 1 2 3 4 5 6 7      7 6 5 4 3 2 1 0
         0 1 1 1 0 0 0 1      1 0 0 0 1 1 1 0
         ^           ^ ^      ok for write operation
         |           | |      command register address is 10001110
         write       | |      definition register address is 00000000
                 clock |      flag 7 to 0
                       |
                       fixed
*/
  digitalWrite(RSTPort, HIGH);   //RESET 1
  delay(DelayTest);

  digitalWrite(I_OPort, LOW);   //start sending address register BIT 0  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   //low yet
  delay(DelayTest);

  digitalWrite(CLKPort, HIGH);   //first clock
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   //in write mode the bit is transferred when CLK is high
  delay(DelayTest);

  digitalWrite(I_OPort, HIGH);  //BIT 1  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  //2nd clock
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //BIT 2 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //BIT 3 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //BIT 4 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //BIT 5 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //BIT 6 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //BIT 7 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);    //end command address register
  
                                 //start definition register address, all bit to 0
for (int i = 0;i<=7;i++){
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
   }
  delay(DelayTest);
  digitalWrite(RSTPort, LOW);  //end transmission 

Serial.println("step 1 - wp cleared");
delay(500);

/*unhalting clock, clearing CH flag
*/
  digitalWrite(RSTPort, HIGH);   //RESET 1
  delay(DelayTest);                  //sending command register address
for (int i = 0;i<=6;i++){           //bit 0 to 6 0 
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
   }
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //BIT 7 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);    //end command register address
  delay(DelayTest);
  
    //start definition register all bit to 0
for (int i = 0;i<=7;i++){
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
   }

  digitalWrite(RSTPort, LOW);  //end transmission 

Serial.println("step 2 - ch unhalted");
delay(500);                      //a while of pause

/*BURST MODE WRITE
23.59.00 31ST DECEMBER 1999 FRIDAY  - A TRY FOR NOW


                  7 6 5 4 3 2 1 0     0 1 2 3 4 5 6 7
ADR CMD           1 0 1 1 1 1 1 0     0 1 1 1 1 1 0 1 
DEF               0 0 0 0 0 0 0 0 SEC 0 0 0 0 0 0 0 0  FROM DATA SHEET:
55D               0 1 0 1 0 1 0 1 MIN 1 0 1 0 1 0 1 0  0 +  101B(=5D) + 0101B(=5D)
23D               0 0 1 0 0 0 1 1 HRS 1 1 0 0 0 1 0 0  0 + 0 (24 HR MODE) + 1 (STAND ALONE FOR TWO)
                                                                         + 011B(3D)
31D               0 0 1 1 0 0 0 1 DAT 1 0 0 0 1 1 0 0  0 + 011B(=3D) + 0001B
12D               0 0 0 1 0 0 1 0 MON 0 1 0 0 1 0 0 0  0 + 001B + 0010B
06D               0 0 0 0 0 1 1 0 FRI 0 1 1 0 0 0 0 0  110B(=6D)
99S               1 0 0 1 1 0 0 1 YEA 1 0 0 1 1 0 0 1  ALSO STAND FOR 2099 BECAUSE WE HAVE 9D + 9D
WP                0 0 0 0 0 0 0 0 WP  0 0 0 0 0 0 0 0  CLEAR WP
 */

  digitalWrite(RSTPort, HIGH);   //RESET 1
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //start sending COMMAND address register BURST 
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  // CLOCK WRITE MODE BIT 0 0
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 1  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 2  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 3  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 4  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 5  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 7  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  //starting whith time values - DEFINITION ADDRESS REGISTERS
//seconds 0d
for (int i = 0;i<=7;i++){
  delay(DelayTest);
  digitalWrite(I_OPort, LOW); 
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
 } 
//minutes 55d
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending  address register BIT 0 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 1  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 2  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 3  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 4  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 5  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending  address register BIT 6 to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 7  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   

//HOURS 23d
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending  address register BIT 0 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 1  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 2  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 3  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 4  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 5  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 7  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   

//DATE 31d
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending  address register BIT 0 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 1  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 2  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 3  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 4  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);  //sending address register BIT 5  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 7  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   

//MONTH 12d
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 0 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 1  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 2  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 3  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 4  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 5  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 7  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   

//DAY 6d FRIDAY
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 0 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 1  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 2  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 3  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 4  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 5  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 7  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   

//YEAR 99d
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending  address register BIT 0 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 1  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);   
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 2  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 3  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 4  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 5  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 7  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   

//WP
for (int i = 0;i<=7;i++){
  delay(DelayTest);
  digitalWrite(I_OPort, LOW); 
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
 } 
 
delay(DelayTest);
digitalWrite(RSTPort, LOW);//END TRASMISSION END PROGRAM NOW TO READ SKETCH

Serial.println("END WRITE SECTION - wait one minute");

delay(60000);

Serial.println("START READ SECTION");
/*__________________________________ READING SECTION
SINGLE BYTE MODE READ
time MINUTE REGISTER READ

                  7 6 5 4 3 2 1 0     0 1 2 3 4 5 6 7
ADR CMD           1 0 0 0 0 0 1 1     1 1 0 0 0 0 0 1 
*/
  digitalWrite(RSTPort, HIGH);   //RESET 1
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //start sending COMMAND address register SINGLE MODE BYTE READ
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  // CLOCK WRITE MODE one byte BIT 0 1
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 1  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);  
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 2  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                 
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 3  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 4  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending address register BIT 5  to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                     
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, LOW);   //sending  address register BIT 6 to 0
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                    
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);   
  delay(DelayTest);
  digitalWrite(I_OPort, HIGH);   //sending address register BIT 7  to 1
  delay(DelayTest);
  digitalWrite(CLKPort, HIGH);                      
//  digitalWrite(CLKPort, LOW);   the last low state posted later below

  digitalWrite(I_OPort,LOW);      //LOW TO THE I_OPort for the reading section
  pinMode(I_OPort, INPUT);        //no delay
  digitalWrite(CLKPort, LOW);          //reading signal on the falling side BIT 0
  delay(DelayTest);
  int a = digitalRead(I_OPort);  //start read inside the clock
  digitalWrite(CLKPort, HIGH);          //reading signal on the falling side
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 1
  delay(DelayTest);
  int b = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 2
  delay(DelayTest);
  int c = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 3
  delay(DelayTest);
  int d = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 4
  delay(DelayTest);
  int e = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 5
  delay(DelayTest);
  int f = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 6
  delay(DelayTest);
  int g = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);
  digitalWrite(CLKPort, LOW);          //BIT 7
  delay(DelayTest);
  int h = digitalRead(I_OPort); 
  digitalWrite(CLKPort, HIGH);
  delay(DelayTest);

  digitalWrite(CLKPort, LOW);            // END READING
  delay(DelayTest);
  digitalWrite(RSTPort, LOW);

Serial.println(a);
Serial.println(b);
Serial.println(c);
Serial.println(d);
Serial.println(e);
Serial.println(f);
Serial.println(g);
Serial.println(h);
Serial.println(" - fine programma");

int i = 0;//PROGRAM TERMINATE DOING NOTHING

while (i == 0);{
i = 1; 
}

}

Another "answer" can be found at...

Note: You do not need to be using the nuelectronics shield to benefit from the material on that page.