Using FRDM Board to output data and a clock for communications example.

Dependencies:   mbed

Revision:
5:8c012e2c1ba8
Parent:
4:39a777388acd
Child:
6:4ef63169c970
--- a/main.cpp	Mon Mar 23 13:54:41 2015 +0000
+++ b/main.cpp	Mon Mar 23 14:20:12 2015 +0000
@@ -6,13 +6,14 @@
 
 #define MAX 100 //set the size of the character data storage array
 #define PREAMBLE 0x7E //preamble of 01111110
+#define ADDRESS 0x02 //address of 00000010
 
 DigitalOut myled(LED1); // red led on board
 DigitalOut clock_pin(D8), serial_out(D7); //send clock pulse and tx
 Timer t; //timer for controlling the clock and data skew
 int msecs, sksecs; //clock time needed for data transfer and skew time
 int skew_flag; //skew flag for while loop
-unsigned char pre = PREAMBLE;
+unsigned char pre = PREAMBLE, add = ADDRESS;
 unsigned char data[100] = "Hi!"; //data output
 int done = 0, i = 0, j = 128; //increment variables
 
@@ -26,8 +27,8 @@
     //skew flag
     skew_flag = 1;
     //set timers
-    msecs = 2000;
-    sksecs = 1800;
+    msecs = 1000;
+    sksecs = 800;
     
     //output preamble
     while(!done)
@@ -64,6 +65,41 @@
     //reset done
     done = 0;
 
+    //output address
+    while(!done)
+    {
+        //start timer for clock
+        t.start();
+        //wait until the timer has reached the set time.
+        while(t.read_ms() < msecs)
+        {
+            //extract data just before clock goes high
+            if(!clock_pin && skew_flag && t.read_ms() > sksecs)
+            {
+                //extract data bit
+                serial_out = (add / j) % 2;
+                skew_flag = 0;
+                j /= 2; //decrement j to get to next bit location
+            }
+        }
+        //stop and reset the timer
+        t.stop();
+        t.reset();
+        //switch clock signal
+        clock_pin = !clock_pin;
+        //reset skew flag
+        skew_flag = 1;
+        //last preamble bit sent - reset/increment variables
+        if(j==0)
+        {
+            done = 1;
+            j = 128;   
+        }
+    }    
+    
+    //reset done
+    done = 0;
+
     //output a clock pulse and data.
     while(!done)
     {