Разработка конструкции печатной платы

Трассировочный чертеж верхней стороны


 


Трассировочный чертеж нижней стороны



Разработка программного обеспечения

Чтобы с модулем АЦП можно было работать в DOS как с логическим устройством, требуется драйвер. Устанавливаемые драйверы устройств могут быть написаны только на языке ассемблера.  Они могут обслуживать два типа устройств: символьные и блочные - в зависимости от того, как устройство обрабатывает данные. Блочные устройства обмениваются блоками данных, поэтому они занимаются накоплением данных. Символьные устройства обмениваются данными побайтно, поэтому они лучше подходят для управляющих

устройств, таких как данный модуль АЦП. Программа драйвера устройства содержит три части:

1) заголовок драйвера, который именует устройство и содержит информацию об остальных частях драйвера,

2) стратегия драйвера, которая хранит информацию об области данных, создаваемой MS DOS, которая называется заголовком запроса,

3) обработчик прерывания устройства, который и содержит код, управляющий устройством (здесь не имеется в виду аппаратное прерывание от устройства).

 

;режимы:

;1) чтение 1 байта - чтение выборки с ожиданием флага готовности;

;2) чтение 2х байтов - чтение выборки и флага готовности без его ожидания;

;3) чтение более 2х байтов - чтение нескольких выборок с ожиданием флага готовности

;  между чтениями;

;4) запись 1 байта (0/1) - выбор канала.

 

.286

;заголовок драйвера

CSEG SEGMENT PUBLIC 'CODE';устанавливаем кодовый сегмент

     ORG 0         ;эта строка необязательна

     ASSUME CS:CSEG,DS:CSEG,ES:CSEG

ADC_DRV PROC FAR        ;драйвер это далекая процедура

     DD 0FFFFFFFFH   ;адрес следующего драйвера

     DW 8000H    ;байт атрибутов

        DW DEV_STRATEGY  ;адрес процедуры стратегии

     DW DEV_INTERRUPT;адрес процедуры прерывания

     DB 'ADC '    ;имя устройства (дополненное пробелами)

CHANNEL        DW 0             ;номер канала

 

;стратегия драйвера

DEV_STRATEGY:  

MOV CS:KEEP_ES,ES

  MOV CS:KEEP_BX,BX

  RET

KEEP_ES        DW?

KEEP_BX   DW?

 

;обработчик прерывания устройства

DEV_INTERRUPT: 

PUSH ES          ;сохраняем регистры

  PUSH DS

  PUSHA

MOV AX,CS:KEEP_ES;ES:BX указывают на заголовок запроса

MOV ES,AX      ;

MOV BX,CS:KEEP_BX;

MOV AL,ES:[BX]+2;получаем код команды из заголовка

SHL AL,1       ;умножаем на 2 (т.к. таблица словная)

SUB AH,AH      ;обнуляем AH

LEA DI,FUNCTIONS;DI указывает на смещение до таблицы

ADD DI,AX      ;добавляем смещение в таблице

JMP WORD PTR [DI];переходим на адрес из таблицы

 

FUNCTIONS  LABEL WORD      ;это таблица функций

DW INITIALIZE

DW CHECK_MEDIA

DW MAKE_BPB

DW IOCTL_IN

DW INPUT_DATA

DW NONDESTRUCT_IN

DW INPUT_STATUS

DW CLEAR_INPUT

DW OUTPUT_DATA

DW OUTPUT_VERIFY

DW OUTPUT_STATUS

DW CLEAR_OUTPUT

DW IOCTL_OUT

;---выход из драйвера, если функция не поддерживается

CHECK_MEDIA:

MAKE_BPB:

IOCTL_IN:

NONDESTRUCT_IN:

INPUT_STATUS:

CLEAR_INPUT:

OUTPUT_VERIFY:

OUTPUT_STATUS:

CLEAR_OUTPUT:

IOCTL_OUT:

OR ES:WORD PTR [BX]+3,8103H  ;модифицируем статус

JMP QUIT

 

;---процедуры для поддерживаемых кодов

INITIALIZE:

LEA AX,E_O_P          ;смещение конца программы в AX

MOV ES:WORD PTR [BX]+14,AX;помещаем его в заголовок

MOV ES:WORD PTR [BX]+16,CS 

JMP QUIT

 

INPUT_DATA:

MOV CX,ES:[BX]+18               ;получаем число символов

LES DI,ES:[BX]+14          ;получаем адрес буфера данных

  PUSH ES

  MOV DX,CS:CHANNEL        ;выбор канала

  CMP CX,1                 ;читать 1 байт?

  JA INPUT_WORD           ;нет - дальше..

INPUT_BYTE:

  IN AX,DX

  TEST AH,7FH

  JZ INPUT_BYTE

  MOV ES:[DI],AL

JMP QUIT_INPUT

INPUT_WORD:

  CMP CX,2

  JA INPUT_BLOCK

  IN AX,DX

  MOV ES:[DI],AX

JMP QUIT_INPUT

INPUT_BLOCK:

  IN AX,DX

  TEST AH,7FH

  JZ INPUT_BLOCK

  MOV ES:[DI],AL

  INC DI

  LOOP INPUT_BLOCK

QUIT_INPUT:

  POP ES

JMP QUIT

 

OUTPUT_DATA:

  PUSH ES

  LES DI,ES:[BX]+14          ;получаем адрес буфера данных

  MOV AX,ES:[DI]

  MOV CS:CHANNEL,AX

  POP ES

 

;---выходим, модифицируя байт статуса в заголовке запроса

QUIT: OR ES:WORD PTR [BX]+3,100H;устанавливаем бит 8

POPA                   ;восстанавливаем регистры

POP DS                   

POP ES                   

RET

E_O_P:                       ;метка конца программы

ADC_DRV ENDP

CSEG ENDS

   END ADC_DRV

 

Вывод

Был сконструирован блок АЦП со следующими параметрами:

Интерфейс с ЭВМ 286              шина ISA

Разрядность                                  8 бит

Кол-во каналов                            2

Частота выборок                         125 кГц.

Защита от перенапряжения по входу при максимально допустимом входном токе 500 мА.

Гальваническая опторазвязка с напряжением пробоя изоляции 2500В

Минимальное входное напряжение 2 мВ.

Коэффициент усиления, изменяемый набором перемычек (максимальный 50000).

Драйвер под DOS.

Масса не более 500г.



Список использованной литературы

1. Ю. В. Новиков, О. А. Калашников, С. Э. Гуляев. Разработка устройств сопряжения для персонального компьютера типа IBM PC. - М.: ЭКОМ, 1998.

2. О. Н. Лебедев, А. И. Мирошниченко, В. А. Телец. Справочник. Изделия электронной техники. Цифровые микросхемы. Микросхемы памяти. Микросхемы ЦАП и АЦП. - М.: Радио и связь, 1994.

3. Г. Р. Аванесян, В. П. Лёвшин. Интегральные микросхемы ТТЛ, ТТЛШ. Справочник. - М.: Машиностроение, 1993.

4. Справочная книга радиолюбителя-конструктора. / Н. И. Чистяков. - М.: Радио и связь, 1993.

5. Роберт Журден. Справочник программиста на персональном компьютере фирмы IBM. - М.: Радио и связь, 1989.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: