Автор: Пользователь скрыл имя, 05 Января 2012 в 11:35, курсовая работа
Микропроцессорные системы в зависимости от их функционального назначения используют различные устройства ввода и отображения (УВО) информации.
Целью данного курсового проекта является разработка устройства ввода и отображения информации на базе БИС КР580ВВ79.
Введение 5
1 Описание контроллера КР580ВВ79 6
1.1 Структура контроллера КР580ВВ79. 7
1.2 Связь с системной шиной 9
1.3 Программирование 10
1.4 Работа БИС КР580ВВ79 11
1.5 Интерфейс клавиатуры 15
1.6 Интерфейс дисплея. 17
2 Описание параллельного интерфейса ввода-вывода ЭВМ. 20
3 Описание разрабатываемого устройства 22
4 Разработка программного обеспечения 23
5 Выбор элементной базы. 26
вывод 27
ЛИТЕРАТУРА. 28
ПРИЛОЖЕНИЕ А. СХЕМА ЭЛЕКТРИЧЕСКАЯ ПРИНЦИПИАЛЬНАЯ
ПРИЛОДЕНИЕ б. СХЕМА ЭЛЕКТРИЧЕСКАЯ СТРУКТУРНАЯ
Приложение В. программА УПРАВЛЕНИЯ СХЕМОЙ
ПРИЛОЖЕНИЕ Г. АЛГОРИТМ РАБОТЫ УСТРОЙСТВА
1. Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура, программирование и проектиро вание микропроцессорных систем., Пер. с англ. , М.: Р и С, 1987г.
2. Аналоговые
и цифровые интегральные схемы.
3. Микропроцессорные средства и системы, журнал.
{программа управления
устройством ввода и
program KR580;
uses crt,dos;
const Recode: array[1..16]
of byte = ($01,$02,$04,$08,$10,$20,$40,$
{код}
Code: array[1..16] of integer = (1,2,3,3,3,4,4,5,6,6,0,0,0,0,
var i,k:integer;
Display:array[1..16] of integer;
tmp:byte;
OK : boolean;
label NEW,AGAIN;
procedure OutByte(portN,bte:byte);{вывод байта в порт}
begin
case portN of
$378: asm
mov al,bte
out $378,al
end;
$37A: asm
mov al,bte
out $37A,al
end;
end(*case*);
Delay(10);
end;
function InByte(portN:byte):byte;{
begin
case portN of
$378: asm
in al,$378
end;
$379: asm
in al,$379
end;
$37A: asm
in al,$37A
end;
end(*case*);
asm
mov InByte,al
end;
Delay(10);
end;
procedure Init; {первичная инициализация устройства}
begin
OutByte($37A,$03); {aппаратный сброс}
OutByte($37A,$19); {программирование режима }
OutByte($378,$19); {работы }
end;
procedure Wait; {ожидание прерывания от устройства}
begin
repeat until InByte($379) <> 0;
end;
procedure OutToDisplay(Symbol:integer); {вывод символа на дисплей}
{таблица перекодировки выводимых символов}
const Recode:array[1..15] of
byte = ($60,$da,$f2,$66,$b6,$be,$e0,$
begin
OutByte($37A,$09);
OutByte($378,Recode[Symbol]);
end;
function StatusWord:boolean;{чтение слова состояния}
var SW:byte;
begin
StatusWord := false;
OutByte($37A,$15);
SW := InByte($378);
if SW <> 0 then StatusWord := TRUE;
end;
procedure ResetINT; {сброс INT}
begin
OutByte($37A,$19);
OutByte($378,$F0);
end;
procedure ResetDSPL;{сброс после вывода на дисплей}
begin
OutByte($37A,$19);
OutByte($378,$D2);
end;
function GetChar:byte; {чтение символа с клавиатуры}
begin
If not StatusWord then
begin
OutByte($37A,$19);
OutByte($378,$40);
OutByte($37A,$05);
GetChar := Inbyte($378);
if GetChar = 0 then
begin
OutByte($37A,$19);
OutByte($378,$41);
OutByte($37A,$05);
GetChar := Inbyte($378)+2;
end;
ResetINT;
end;
begin
AGAIN:
Init;
k := 0;
repeat
begin
Wait;
tmp := GetChar;
i := 0;
repeat
inc(i);
until Recode[i] = tmp;
inc(k);
case i of
0..13: begin
Display[k] := i;
OutToDisplay(i);
end; {цифры}
14: k:=16; {ВВОД}
15: goto AGAIN;{СБРОС}
end(*case*);
end;
until k=16;
for i:=0 to 16 do
end.