Раздел: Документация
0 ... 36 37 38 39 40 41 42 ... 105 О А0=0, А1=1 - выбор регистра С; О А0=1, А1=1 - выбор регистра управления. Для нормального функционирования микросхемы на линию CS (контакт 6) должен подаваться низкий уровень. Линия RESET (контакт 35) предназначена для сброса микросхемы, который осуществляется высоким уровнем. После сброса все линии ввода/вывода портов А, В и С настраиваются как входы. В нормальном режиме линия RESET должна удерживаться в состоянии логического нуля. Микросхема имеет три режима работы: О режим 1: порты А и В настраиваются как восьмиразрядные порты ввода/ вывода. Смешивание линий ввода и вывода не допускается. Порт С делится на две половины (четыре старших и четыре младших бита). Каждая половина может быть настроена как на вход, так и на выход. Смешивание линий ввода и вывода в пределах одной половины запрещено; О режим 2: микросхема настраивается как управляемый порт ввода/вывода, порты А и В - как независимые порты ввода или вывода. Каждый из них имеет 4-разрядный порт управления, который формируется в порте С соответственно как четыре младших и старших бита; О режим 3: порт А настраивается как двунаправленный порт. Режимы работы микросхемы 8255 устанавливаются с помощью регистра управления, куда необходимо записать управляющее слово. Назначение битов управляющего слова приведено ниже:
Схема соединения микросхемы 8255 с параллельным портом показана на рис. 4.4. Регистр данных LPT-порта передает данные в микросхему 8255, этим процессом управляют DD2 и DD3 (буферы с тремя состояниями 74LS241 и 74LS244). Регистр состояния считывает данные из 8255. Две линии порта управления соединены с линиями адреса 8255, а две другие - с RD и WR. Требуемые данные сначала записываются в регистр данных, а состояние линий АО и А1 - в регистр управления. Затем по линии WR подается нулевой Порт а о-(37) ра7 dd2 74ls241
dd3 74ls244
sel 0 1 dbo db4 db1 db5 db2 db6 db3 db7 dbo db1 db2 db3 db4 DB5 db6 db7 + 5b Контакта но экспериментальной плоте параллельного порто Рис. 4.4. Схема с использованием программируемого устройства ввода/вывода параллельной информации 8255 импульс (перепад 1-0-1), при котором открываются буферы данных DD3. Перепад 1-0 записывает информацию в выбранный регистр 8255. Данные из микросхемы 8255 считываются DD2 (74LS241). Линия выбора данных (DSL) управляется битом 0 порта данных. При считывании данных состояние линий АО и А1 сначала записывается в регистр управления, а линия RD удерживается в нулевом состоянии. При этом 8255 выводит данные на собственную шину данных. Затем линия DSL первый раз переходит в ноль, и регистр состояния производит первое считывание. После этого линия DSL снова устанавливается в единицу, и производится второе считывание. Таким образом, за два считывания восстанавливается исходный байт данных. Управляющая программа написана на языке Turbo Pascal 6. Она настраивает все порты как выходы (режим 0, управляющее слово 128) и содержит все необходимые процедуры и функции, позволяющие на их основе разрабатывать собственное программное обеспечение. Write cont rol(Control word: byte) записывает управляющее слово во внутренний регистр управления 8255. Write port (port number, output byte: byte) записывает байт в порт А, В или С, который был настроен как выход. Inputbyte(port number: byte):byte считывает данные из порта А, В или С, настроенного как вход. Текст программы 8255.PAS Program Centromc 8255 interfасе; («Некоторые используемые управляющие слова: 128(десятичное): порты А, В и С - выходы; 155(десятичное): порты А, В и С - входы; 144(десятичное): порт А - вход; порты В и С - выходы; 146(десятичное): порты А и В - входы; порт С - выход.*) uses graph,crt.dos; var command,output byte,input byte,bitnumber, portnumber, output byte:byte; P address,delaynumber:integer; {$1 c:\ioexp\tplib1.pas) procedure find delay nuraber; («Определение скорости компьютера и количества тактов за 1 мс.*) var timel,tirae2,dt:real; t,h1,m1,s1,s1001,h2,m2,s2,s1002:word; begin clrscr; gotoxy(25,24); write(Checking computer speed); gettime(h1,m1,s1,s1001); timel:=3600*h1+60«m1+s1+s1001/100; for t:=1 to 1000 do delay(1); gettime(h2,m2,s2,s1002); time2:=3600«h2+60*m2+s2+s1002/100; dt:=time2-time1; delaynumber:=round(1000/dt*0.001); clrscr; gotoxy(30,24); write(Finished...); clrscr; end; Function convert(bytex:byte):byte; («Преобразование bytex в байт для передачи в регистры 8255.*) (* Байт, принимаемый 8255: Ь8 Ь7 Ь6 Ь5 Ь4 ЬЗ Ь2 Ы, 0 ... 36 37 38 39 40 41 42 ... 105
|