Advertisement
Guest User

Untitled

a guest
Sep 4th, 2015
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.15 KB | None | 0 0
  1. int clkPin = 23; //Clock pin
  2. int wePin = 22; //Write Enable
  3. int read_addr1[] = {0, 1}; // Address1 pins
  4. int read_addr2[] = {2, 3}; // Address2 pins
  5. int write_addr[] = {4, 5};
  6. int read_data1[] = {24,25,26,27,28,29,30,31};
  7. int read_data2[] = {32,33,34,35,36,37,38,39};
  8. int write_data[] = {6,7,8,9,10,11,12,13};
  9.  
  10. void setup() {
  11.   // initialize serial communication
  12.   Serial.begin(9600);
  13.  
  14.   // initialize pins as output
  15.   pinMode(clkPin, OUTPUT);
  16.   pinMode(wePin, OUTPUT);
  17.   digitalWrite(clkPin, LOW);
  18.   digitalWrite(wePin, LOW);
  19.  
  20.   //initialize address 1 & 2
  21.   for (int i=0; i<2; i++) {
  22.       pinMode(read_addr1[i], OUTPUT);
  23.       digitalWrite(read_addr1[i], LOW);
  24.       pinMode(read_addr2[i], OUTPUT);
  25.       digitalWrite(read_addr2[i], LOW);
  26.       pinMode(write_addr[i], OUTPUT);
  27.       digitalWrite(write_addr[i], LOW);
  28.   }
  29.  
  30.   for (int i=0; i<8; i++) {
  31.       pinMode(read_data1[i], INPUT);
  32.       pinMode(read_data2[i], INPUT);
  33.       pinMode(write_data[i], INPUT);
  34.   }
  35.  
  36. }
  37.  
  38. #define BUFFER_SIZE 32
  39. char buffer[BUFFER_SIZE];
  40. char *ptoken;
  41. int pos = 0, address1,address2, valueToWrite;
  42.  
  43. void loop() {
  44.   int incomingByte;
  45.  
  46.   // see if there's incoming serial data:
  47.   if (Serial.available() > 0) {
  48.       delay(50);
  49.      
  50.       while (Serial.available() > 0) {
  51.           incomingByte = Serial.read();
  52.           if (pos < (BUFFER_SIZE-1)) {
  53.               buffer[pos] = incomingByte;
  54.               pos++;
  55.           }
  56.       }
  57.       buffer[pos] = 0;
  58.      
  59.       pos = 0;
  60.       ptoken = strtok(buffer, " ");
  61.       if (strcmp(ptoken, "write") == 0) {
  62.           ptoken = strtok (NULL, " ");
  63.           address1 = IntAddress(atoi(ptoken));
  64.           ptoken = strtok (NULL, " ");
  65.           valueToWrite = atoi(ptoken);
  66.          
  67.           Serial.print("write address = ");
  68.           Serial.print(address1);
  69.           Serial.print(" value=");
  70.           Serial.println(valueToWrite);
  71.          
  72.           writeToRegister(address1, valueToWrite);
  73.          
  74.       } else if (strcmp(ptoken, "read") == 0) {
  75.           ptoken = strtok (NULL, " ");
  76.           address1 = IntAddress(atoi(ptoken));
  77.           ptoken = strtok (NULL, " ");
  78.           address2 = IntAddress(atoi(ptoken));
  79.          
  80.           Serial.print("read from ");
  81.           Serial.print(address1);
  82.           Serial.print("=");
  83.           Serial.println(readFromRegister(address1, read_addr1, read_data1));
  84.          
  85.           Serial.print("read from ");
  86.           Serial.print(address2);
  87.           Serial.print("=");
  88.           Serial.println(readFromRegister(address2, read_addr2, read_data2));
  89.          
  90.       } else {
  91.           Serial.print("Invalid command '");
  92.           Serial.print(ptoken);
  93.           Serial.println("'");
  94.       }
  95.      
  96.   }
  97.  
  98. }
  99.  
  100. int IntAddress(char *address){
  101.          if(strcmp(address,"r0")==0){
  102.               return 0;
  103.           }else if(strcmp(address,"r1")==0){
  104.               return 1;
  105.           }else if(strcmp(address,"r2")==0){
  106.               return 2;
  107.           }else if(strcmp(address,"r3")==0){
  108.               return 3;
  109.           }
  110.     return -1;
  111. }
  112.  
  113. void writeToRegister(int addr, int value)
  114. {
  115.     digitalWrite(wePin, HIGH);
  116.     writeValue(addr, write_addr, 2);
  117.     writeValue(value, write_data, 8);
  118.    
  119.     //Clock Pulse
  120.     digitalWrite(clkPin, LOW);
  121.     digitalWrite(clkPin, HIGH);
  122.  
  123.     digitalWrite(clkPin, LOW);
  124.     digitalWrite(wePin, LOW);
  125. }
  126.  
  127. int readFromRegister(int addr, int addrPin[], int dataOutPin[])
  128. {
  129.     digitalWrite(wePin, LOW);
  130.     writeValue(addr, addrPin, 2);
  131.    
  132.     //Clock Pulse
  133.     digitalWrite(clkPin, LOW);
  134.     digitalWrite(clkPin, HIGH);
  135.     digitalWrite(clkPin, LOW);
  136.    
  137.     //Read data from pins
  138.     return readValue(dataOutPin, 8);
  139. }
  140.  
  141. void writeValue(int value, int pin[], int pinCount) {
  142.    
  143.     for (int i = 0; i < pinCount; i++) {
  144.         if ((value & (1 << i)) != 0)
  145.             digitalWrite(pin[i], HIGH);
  146.         else
  147.             digitalWrite(pin[i], LOW);
  148.     }
  149. }
  150.  
  151. int readValue(int pin[], int pinCount) {
  152.     int value = 0;
  153.     int mask = 1;
  154.    
  155.     for (int i = 0; i < pinCount; i++) {
  156.         unsigned char d = digitalRead(pin[i]);
  157.        
  158.         if (d == HIGH)
  159.             value |= mask;
  160.            
  161.         mask <<= 1;
  162.     }
  163.    
  164.     return value;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement