- •Содержание:
- •1. Анализ задания.
- •2. Описание работы шины isa ibm pc at.
- •3. Описание устройства, выбор и расчет элементов.
- •4. Программное обеспечение.
- •Текст программы:
- •Текст программы:
- •5. Список использованной литературы и программ.
- •Гук м. Аппаратные средства ibm pc. Энциклопедия. Спб: Питер, 1998.816 с.
- •Хоровиц п., Хилл у. Искусство схемотехники: Tом 1 и том 2. Пер с англ.6-е изд. Перераб. И доп.м.: Мир, 2001. – 704 с.
4. Программное обеспечение.
Для удобства пользователя разработана программа “bingen”, генерирующая файл с тестовой последовательностью. Пользователь вводит группы по 16 символов, а программа преобразует символы в двоичную последовательность и записывает ее в файл “sample.dat”. Внешний вид программы показан на рис. 8.
Рис. 8
Текст программы:
#include <windows.h> //Необходима для работы со структурами
#include <stdio.h> //Необходима для работы с файлами
#include <conio.h> //Содержит функцию getche()
#define Q 1024 //Заменяет 1024 идентификатором Q
struct BIN1K //Структура BIN1K
{
WORD info[Q]; //Массив переменных типа WORD
} sample;
void main()
{
FILE *out=fopen("sample.dat","w+"); //Открыть “sample.dat” для записи
for(int i=0;i<Q;i++)
{
printf("%d/%d:",i+1,Q); //Выводит номер группы
for(int j=15;j>-1;j--)
{
int c=getche(); //Записать нажатый символ в с
if(c=='1') sample.info[i]|=(1<<j); //Преобразуем символ
if(c=='0') sample.info[i]&=~(1<<j); //в бит на нужной позиции
}
printf("\n"); //Перевод строки
}
fwrite(&sample,sizeof(sample),1,out); //Записать структуру в файл
fclose(out); //Закрыть файл
}
Программа “binsend” считывает последовательность из файла и посылает его через шину данных в устройство.
Текст программы:
#include <windows.h> //Необходима для работы со структурами
#include <stdio.h> //Необходима для работы с файлами
#include <conio.h> //Содержит функции outp(); outpw();
#define Q 1024 //Заменяет 1024 идентификатором Q
char level; //Переменная для хранения выходного уровня
short adrRAM=0x36E; //Адрес для записи в ОЗУ
struct BIN1K //Структура BIN1K
{
WORD info[Q]; //Массив переменных типа WORD
} sample;
void main()
{
printf("Выберите выходные уровни (ТТЛ-1; КМОП-0):");
scanf("%d",level);
FILE *in=fopen("sample.dat","rb"); //Открыть файл для чтения в двоичном виде
fread(&sample,sizeof(sample),1,in); //Записать файл в структуру
fclose(in); //Закрыть файл
_outp(0x360,0); //Выключили ключ
_outp(0x362,0); //Преобразователь уровня в Z-состояние
_outp(0x368,0); //Наращивание счетчика по адресу 0x36E
_outp(0x364,0); //Обнулить счетчик
_outp(0x366,1); //Выключить счетчик
_outp(0x364,1); // -//-
_outp(0x36A,0); //Запись в первые два байта ОЗУ
_outp(0x36C,1); // -//-
_outpw(adrRAM,sample.info[0]); //Запись в нулевую ячейку ОЗУ
_outp(0x366,0); //Включить счетчик
for(int i=2;i<Q;i=i+2)
{
_outpw(adrRAM,sample.info[i]); //Запись в ОЗУ первых двух байтов
}
_outp(0x364,0); //Обнулить счетчик
_outp(0x366,1); //Выключить счетчик
_outp(0x364,1); // -//-
_outp(0x36A,1); //Запись во вторые два байта ОЗУ
_outp(0x36C,0); // -//-
_outpw(adrRAM,sample.info[1]); //Запись в нулевую ячейку ОЗУ
_outp(0x366,0); //Включить счетчик
for(i=3;i<Q;i=i+2)
{
_outpw(adrRAM,sample.info[i]); //Запись в ОЗУ вторых двух байтов
}
if (level=='1') _outp(0x360,1); //Если ТТЛ, включили ключ
if (level=='0') _outp(0x362,1); //Если КМОП, включили преобразователь
_outp(0x364,0); //Обнулить счетчик
_outp(0x366,0); //Включить счетчик
_outp(0x364,1); // -//-
_outp(0x36A,0); //Чтение всех байтов ОЗУ
_outp(0x36C,0); // -//-
_outp(0x368,1); //Подключаем тактовый генератор к счетчику
}