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

Dependencies:   mbed

Revision:
6:4ef63169c970
Parent:
5:8c012e2c1ba8
Child:
7:aeeb441a68b8
--- a/main.cpp	Mon Mar 23 14:20:12 2015 +0000
+++ b/main.cpp	Sun Mar 29 03:54:41 2015 +0000
@@ -15,34 +15,24 @@
 int skew_flag; //skew flag for while loop
 unsigned char pre = PREAMBLE, add = ADDRESS;
 unsigned char data[100] = "Hi!"; //data output
-int done = 0, i = 0, j = 128; //increment variables
+int done = 0,sent = 0 ,i = 0, j = 128; //increment variables
+void send_byte(int byte);
 
-int main() {
-    
-    //turn on red led to show programming has worked
-    myled = 0;
-    //initialize output pins
-    clock_pin = 0;
-    serial_out = 0;
-    //skew flag
-    skew_flag = 1;
-    //set timers
-    msecs = 1000;
-    sksecs = 800;
-    
-    //output preamble
-    while(!done)
-    {
+void send_byte(int byte)
+{
+    //not done(reset)
+    done = 0;
+
+    //output byte
+    while(!done) {
         //start timer for clock
         t.start();
         //wait until the timer has reached the set time.
-        while(t.read_ms() < msecs)
-        {
+        while(t.read_ms() < msecs) {
             //extract data just before clock goes high
-            if(!clock_pin && skew_flag && t.read_ms() > sksecs)
-            {
+            if(!clock_pin && skew_flag && t.read_ms() > sksecs) {
                 //extract data bit
-                serial_out = (pre / j) % 2;
+                serial_out = (byte / j) % 2;
                 skew_flag = 0;
                 j /= 2; //decrement j to get to next bit location
             }
@@ -55,86 +45,40 @@
         //reset skew flag
         skew_flag = 1;
         //last preamble bit sent - reset/increment variables
-        if(j==0)
-        {
+        if(j==0) {
             done = 1;
-            j = 128;   
-        }
-    }    
-    
-    //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;   
+            j = 128;
         }
-    }    
-    
-    //reset done
-    done = 0;
+    }
+}
+
+int main()
+{
 
-    //output a clock pulse and data.
-    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 = (data[i] / j) % 2;
-                skew_flag = 0;
-                j /= 2; //decrement j to get to next bit location
-            }
+    //turn on red led to show programming has worked
+    myled = 0;
+    //initialize output pins
+    clock_pin = 0;
+    serial_out = 0;
+    //skew flag
+    skew_flag = 1;
+    //set timers
+    msecs = 1000;
+    sksecs = 800;
+
+    //output preamble
+    send_byte(pre);
+    //output address
+    send_byte(add);
+    //output data
+    i=0;
+    while(!sent) {
+        send_byte(data[i]);
+        //finished sending data
+        if(i>2) {
+            sent = 1;
         }
-        //stop and reset the timer
-        t.stop();
-        t.reset();
-        //switch clock signal
-        clock_pin = !clock_pin;
-        //reset skew flag
-        skew_flag = 1;
-        //last bit sent - reset/increment variables
-        if(j==0)
-        {
-            j=128;
-            i++;
-        }
-        //finished sending data
-        if(i>2)
-        {
-            done = 1;    
-        }
+        i=i+1;
     }
     //turn off red led to show sending has finished
     myled = 1;