dllbridge

03_04

Aug 16th, 2025
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.84 KB | None | 0 0
  1.  
  2.  
  3.  
  4. //  EXT_ROM_Ram_03 2025 August 14 ( 10:24 )
  5. //  КР580ВВ55А РАБОТАЕТ! с резистором pull-up к /WR
  6. //  
  7. //  Второй тест для проверки КР580ВВ55А или 82C55A
  8.  
  9.  
  10.  
  11.  
  12.  
  13.   const int CS_PIN    = 11;                                                            // /CS (Chip Select)    82C55
  14. //const int RESET_PIN = 19;   //  A5                                                   // Reset                82C55
  15.   #define RESET_PIN     A5                                                             // Reset                82C55
  16.   const int OE_PIN    = 12;                                                            // Output Enable     74HCT573
  17.   const int LE_PIN    = 13;                                                            // Latch  Enable     74HCT573
  18.  
  19.  
  20. const int DATA_PINS[] = {2, 3, 4, 5, 6, 7, 8, 9};                                    // Пины данных для 74HCT573
  21.  
  22.  
  23. ////////////////////////////////////////////////
  24. void setup()
  25. {
  26.  
  27.      pinMode(CS_PIN,    OUTPUT);  digitalWrite(CS_PIN,   1);                            // Запрет выбора ВВ55
  28.      pinMode(RESET_PIN, OUTPUT);
  29.      pinMode(OE_PIN,    OUTPUT);  digitalWrite(OE_PIN, LOW);                            //  74HCT573 output enable
  30.      pinMode(LE_PIN,    OUTPUT);  digitalWrite(LE_PIN,   1);
  31.  
  32.      for(int i = 0; i < 8; i++)
  33.      {
  34.          pinMode(DATA_PINS[i], OUTPUT);
  35.      }
  36.  
  37.  
  38.     digitalWrite(RESET_PIN, 1);        delay(50);                                           //    Сброс КР580ВВ55А
  39.     digitalWrite(RESET_PIN, 0);        delay(50);
  40.      
  41.  
  42.  
  43.      
  44.      // STEP 1                                                    //  запишем байт в 74HCT573 ( /WR, /RD, A1, A0 )
  45.                                                                   // Для управления ВВ55
  46.      set_value(0b00000111);                                       //   A1 = 1, A0 = 1 ( выбирают регистр РУС)
  47.      digitalWrite(LE_PIN,   0);                                   //  /WR = 0, /RD = 1  (разрешение записи)
  48.      
  49.  
  50.      // STEP 2  
  51.  
  52.  
  53.      set_value(0b10000000);                                       // 10000000 - все порты ВВ55, как выходы ( режим 0 )
  54.      digitalWrite(CS_PIN,   0);                                   // Выбран (для записи) ВВ55
  55.      digitalWrite(OE_PIN,   1);  
  56.      digitalWrite(CS_PIN,   1);    
  57.      digitalWrite(OE_PIN,   0);
  58.  
  59.      // STEP 3        Попробуем записать число 85 в порт А
  60.  
  61.      digitalWrite(LE_PIN,   1);      
  62.      set_value(0b00000100);                                       //   A1 = 0, A0 = 0 ( выбираем порт А )
  63.      digitalWrite(LE_PIN,   0);                                   //  /WR = 0, /RD = 1  (разрешение записи)    
  64.  
  65.      set_value(0b10101010);                                       // 10000000 - все порты ВВ55, как выходы ( режим 0 )
  66.      digitalWrite(CS_PIN,   0);  delay( 40);                      // Выбран (для записи) ВВ55
  67.      digitalWrite(OE_PIN,   1);
  68.      digitalWrite(CS_PIN,   1);      
  69.      digitalWrite(OE_PIN,   0);  
  70.      digitalWrite(LE_PIN,   1);  
  71.  
  72.      delay(2010);
  73.      to_port_A(0b01010101);  
  74. }
  75.  
  76.  
  77.  
  78.  
  79. /////////////////////////////////////////////////
  80. void loop()
  81. {
  82.    
  83.                                                //  Один бит движется влево, затем вправо ( 8 раз это повторяется ).
  84.      for(int i1 = 0; i1 <  8; i1++)   {
  85.      for(int i2 = 0; i2 <  8; i2++)   { to_port_A(1 << i2); delay(250);  }
  86.      for(int i3 = 7; i3 >= 0; i3--)   { to_port_A(1 << i3); delay(250);  }  }  
  87.  
  88.      
  89.  
  90.      for(int i = 0; i < 10; i++)               // Здесь биты через один горят в шахматном порядке. ( 10 повторов ).
  91.      {
  92.          to_port_A(170);   delay( 500);        //                                                 170 = 0b10101010
  93.          to_port_A( 85);   delay(1000);        //                                                  85 = 0b01010101  
  94.      }
  95.  
  96.      for(int i = 0; i < 256; i++)              //                           Перебор битов, как в двоичном счётчике.
  97.      {  
  98.          to_port_A(i);
  99.          delay(100);                           //                Задержка (0,1 секунда) для визуального наблюдения.
  100.      }
  101. }
  102.  
  103.  
  104.  
  105.  
  106.  
  107. //  
  108. //    *1  Чтобы 573 перешла в Z-состояние и pull-up резистор подтянул сигнал /WR_55 к 1. Это нужно для "защёлкивания"
  109. //        байта с шины данных именно для ВВ55. 82C55A не капризна, при записи байта.
  110. //
  111. //
  112. //
  113. //
  114. //
  115. //
  116. //
  117. //
  118.  
  119.  
  120.  
  121. ////////////////////////////////////////////////
  122. void to_port_A(byte  value)
  123. {
  124.      
  125.      digitalWrite(LE_PIN,   1);    
  126.      set_value(0b00000100);                                       //   A1 = 0,  A0 = 0  ( выбираем порт А )
  127.      digitalWrite(LE_PIN,   0);                                   //  /WR = 0, /RD = 1  (разрешение записи)  
  128.  
  129.      set_value(   value);                                         // 10000000 - все порты ВВ55, как выходы ( режим 0 )
  130.      digitalWrite(CS_PIN,   0);                                  
  131.      digitalWrite(OE_PIN,   1);                                   // Откл.   573 (*1)
  132.      digitalWrite(CS_PIN,   1);                                   // Откл.  ВВ55
  133.      digitalWrite(OE_PIN,   0);                                   // Вкл.    573
  134. }
  135.  
  136.  
  137. ////////////////////////////////////////////////
  138. void to_port_B(byte  value)
  139. {
  140.      digitalWrite(LE_PIN,   1);    
  141.      set_value(0b00000101);                                       //    A1 = 0,  A0 = 1 ( выбираем порт B )
  142.      digitalWrite(LE_PIN,   0);                                   //   /WR = 0, /RD = 1  (разрешение записи)  
  143.  
  144.      set_value(   value);                                         // 10000000 - все порты ВВ55, как выходы ( режим 0 )
  145.      digitalWrite(CS_PIN,   0);                                   // Обращаемся для записи байта к ВВ55
  146.      digitalWrite(OE_PIN,   1);  
  147.      digitalWrite(CS_PIN,   1);      
  148.      digitalWrite(OE_PIN,   0);  
  149. }
  150.  
  151.  
  152.  
  153. ////////////////////////////////////////////////
  154. void set_value(byte value)                                        //   Функция установки байта на пины D2-D9
  155. {
  156.      
  157.      for(int i = 0; i < 8; i++)                                   //  Выставляем данные на выходы
  158.      {
  159.          digitalWrite(DATA_PINS[i], bitRead(value, i));
  160.      }
  161. }
  162.  
  163.  
  164.  
  165.  
  166.  
Advertisement
Add Comment
Please, Sign In to add comment