Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / doc92 / Пояснительная записка (3).doc
Скачиваний:
26
Добавлен:
03.08.2013
Размер:
291.33 Кб
Скачать

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); //Подключаем тактовый генератор к счетчику

}

Соседние файлы в папке doc92