Подключение внешних устройств к компьютерному интерфейсу ISA. Методы подключения устройств сопряжения

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Фрагмент текста работы

Вывод сигнала происходит циклически –выведя отсчеты от 0 до N, N+1 отсчет программа будет выводить как нулевой.   Интервал между отсчетами можно менять, перемещая ползунок регулятора “F”, при этом будет изменяться частота выходного сигнала. Значение “N” можно изменить с помощью мыши. После изменения значения в окошке “N” необходимо закончить текущий цикл цифро-аналогового преобразования и начать новый, чтобы программа смогла сформировать новый массив отсчетов. Из-за того, что программа, работая в ОС “WINDOWS” обращается к шине ISA  без буферизации данных, на экране осциллографа будет заметна нестабильность выходной частоты. Выход осуществляется нажатием на кнопку “Stop DAC”.

      При нажатии с помощью мыши на кнопку “Start ADC”(Начать аналогово-цифровое преобразование) кнопка изменит свое название на “Stop ADC” (Закончить аналогово-цифровое преобразование) и в окно редактирования будет выводиться значение напряжения подаваемого с переменного резистора на вход АЦП. Вывод с АЦП происходит циклически. Сначала программа задает режим работы ППА КР580ВВ55А для формирования  сигнала запуска АЦП, производит формирование сигнала запуска на выводе PC5 ППА,  после чего переводит ППА КР580ВВ55А в режим приема сигнала готовности данных от АЦП. После регистрации сигнала готовности выводом PC3 ППА программа переводит ППА в режим передачи данных с АЦП на шину ISA. Восьмибитное  значение, считанное с АЦП, преобразуется в соответствующее ему десятичное значение напряжения и выводится на экран. Далее программа снова формирует сигнал запуска АЦП и цикл повторяется. Выход осуществляется нажатием на кнопку “Stop ADC”.

           При нажатии на кнопку “Start LED’s shining” кнопка изменит свое название на “Stop LED’s shining” и начнется циклическое зажигание светодиодов подключенных к выводам PC4-PC7 ППА КР580ВВ55А.

           Это достигается возможностью задавать состояние любого вывода порта C независимо от других. Программа с интервалом 100мс устанавливает состояние предыдущего вывода порта C в 0, а текущего – в 1. После остановки периодического зажигания светодиодов нажатием на кнопку “Stop LED’s shining” в правой части окна программы появятся 4 checkbox’а: PC7 - PC4. При выборе любого из них с помощью мыши будет зажигаться светодиод на соответствующем выводе ППА КР580ВВ55А.

      В любой момент времени из программы можно выйти, нажав “exit”. 

Листинг программы FESTU1.pas, разработанной в среде Delphi, приведен в приложении 1.

4. Содержание отчета

-  структурная схема подключения адаптера КР580ВВ55А к интерфейсу ISA;

-  электрическая схема лабораторной установки

-  фрагменты программы (ассемблерных вставок), в которых выполняется ввод или вывод данных через порты 330-333Н;

-  распределение адресов внешних устройств: ЦАП, АЦП и светодиоды;

-  временные диаграммы работы микросхемы АЦП с сигналами “Запуск”, ”Готовность данных” и ”Шина данных АЦП”

Приложение1.

unit festu;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, ExtCtrls, Menus, ComCtrls;

type

  TLAB_CPU = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Edit1: TEdit;

    Label1: TLabel;

    Timer1: TTimer;

    label2: TLabel;

    ScrollBar1: TScrollBar;

    Edit2: TEdit;

    Label3: TLabel;

    PC7: TCheckBox;

    PC6: TCheckBox;

    PC5: TCheckBox;

    PC4: TCheckBox;

    MainMenu1: TMainMenu;

    exit: TMenuItem;

    help: TMenuItem;

      procedure Button3Click(Sender: TObject);

     procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure load(Sender: TObject);

    procedure PC7Click(Sender: TObject);

    procedure PC6Click(Sender: TObject);

    procedure PC5Click(Sender: TObject);

    procedure PC4Click(Sender: TObject);

    procedure exitClick(Sender: TObject);

    procedure helpClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  LAB_CPU: TLAB_CPU;

  counter:integer;

   counter1:integer;

        counter2:integer;

        counter3:integer;

        counter4:integer;

    b1:word;

  a:integer;

  b:integer;

  DAC_enabled:integer;

  shin_en:integer;

  ADC_enabled:integer;

  voltage: byte;

  volt:extended;

  c:byte;

  outport: array[0..255] of byte;

  volt_str:string;

output:byte;

ccc:integer;

bbb:integer;

ed2txt:integer;

ready:byte;

hfile:^char;

n_quant:byte;

start:byte;

implementation

uses help;

{$R *.DFM}

   {создание массива отсчетов для вывода на ЦАП. количество отсчетов

   задается переменной n_quant }

procedure init_sine;          

var a:byte;

begin

   for a:=0 to n_quant  do begin

 outport[a]:=round(127+127*sin(a*(360/n_quant)*Pi/180));

  end;

 end;

 {процедура обработки нажатия кнопки 'Start LEDs shining' ;

 выполняет зажигание светодиодов по кругу процедурой TLAB_CPU.Timer1Timer   }

procedure TLAB_CPU.Button3Click(Sender: TObject);

begin

    shin_en:=1;

   counter:=counter+1;

   timer1.interval:=100 ;

    label1.Caption:='Message';

    label2.Visible:=false;

    scrollbar1.Visible:=false;

    label3.Visible:=false;

    edit2.Visible:=false;

    pc7.visible:=true;

    pc6.visible:=true;

    pc5.visible:=true;

    pc4.visible:=true;

    pc7.checked:=false;

    pc6.checked:=false;

    pc5.checked:=false;

    pc4.checked:=false;

   if (counter=1)  then

      begin button3.caption:='Stop LED"s shining' ;

         timer1.Enabled:=true; edit1.text:='         Shining started!';

          button1.Visible:=false;

     button2.Visible:=false;

       pc7.visible:=false;

    pc6.visible:=false;

    pc5.visible:=false;

    pc4.visible:=false;

            end;

      if counter=2 then begin button3.caption:='Start LED"s shining';

                     timer1.Enabled:=false; edit1.text:='        Shining stopped!';

                        button1.Visible:=true;

     button2.Visible:=true;

           lab_cpu.Color:=clgreen;

                      end;

  if counter=2 then   counter:=0;

    {начальная инициализация портов: PA-ввод, PB-ввод, PC-вывод}

 asm

 mov dx,333h

 mov al,10010001b

 out dx,al

 end;

end;

        {процедура обработки нажатия кнопки 'Start ADC';

        выполняет имерение напряжения на входе АЦП и выдает его значение

         на экран}

procedure TLAB_CPU.Button2Click(Sender: TObject); 

begin

label1.Caption:='VOLTAGE';

label2.Visible:=false;

scrollbar1.Visible:=false;

label3.Visible:=false;

    edit2.Visible:=false;

     pc7.visible:=false;

    pc6.visible:=false;

    pc5.visible:=false;

    pc4.visible:=false;

  counter4:=counter4+1;

 if counter4=1 then  begin button2.caption:='Stop ADC' ;

         timer1.Enabled:=false;

          button1.Visible:=false;

     button3.Visible:=false;

           end;

      if counter4=2 then begin button2.caption:='Start ADC';

                     timer1.Enabled:=false;

                      button1.Visible:=true;

                        button3.Visible:=true;

                        end;

  if counter4=2 then   counter4:=0;

  {цикл считывания значений с АЦП}

 repeat

asm                {начальная инициализация портов. PC0-3 -ввод PC4-7вывод

                                                  PA -ввод PB-вывод}

 mov ax,10011011b       {запись управляющего слова в аккумулятор}

      mov dx,333h        {запись адреса порта D в регистр dx }

      out dx,ax          {запись управляющего слова в порт D}

end;

{цикл ожидания сигнала запуска АЦП}

  repeat

     asm       

  mov dx,332h                     {запись в dx  адреся PC    }

 in al,dx                       {чтение из PC в аккумулятор }

 mov start,al                     {перемещение данных с PC в переменную start }

   end ;

  until start=32;

 {цикл опроса PC на наличие сигнала готовности   данных от АЦП . Готовность

 регистрируется   PC3 , состояние порта в этот момент 00000000b}

    repeat

 {чтение состояния PC:}

   asm

  mov dx,332h                     {запись в dx  адреся PC    }

 in al,dx                       {чтение из PC в аккумулятор }

 mov ready,al                     {перемещение данных с PC в переменную ready }

   end ;

  until   ready=0;

{считывание данных с АЦП портом А в переменную   voltage  }

        asm

        mov dx,330h            {запись в dx адреса PA}

          in  al,dx            {чтение из PA в аккумулятор}

           mov voltage,al      {перемещение данных из аккумулятора в переменную

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.