dllbridge

03_05

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