Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

Информатика->Реферат
Когда изучаешь какой-либо вопрос, считаешь, что знаешь его; когда можешь писать о нем, становишься уверенней в своих знаниях; уверенность возрастает, ...полностью>>
Информатика->Контрольная работа
Составим программу ввода оценки Р, полученной учащимся, и выдачи текста: «Молодец!», если Р=5; «Хорошо!», если Р=4; «Лентяй!», если Р< =3. Заданы длин...полностью>>
Информатика->Реферат
Информология- общая теория информации. Часто понятие "информация" используют, не задумываясь о глубине его содержания, отождествляя понятия знание, да...полностью>>
Информатика->Реферат
В 1971-1975 гг. микрокомпьютеры с превеликим трудом отвоевали плацдарм у мэйнфреймов, обзаведясь, в конце концов, собственной операционной системой (C...полностью>>

Главная > Реферат >Информатика

Сохрани ссылку в одной из сетей:

Приложение 2: МПР – «Контроль аппаратуры обмена»

/*-------------------------------------------------------
автор Кулагин А.Г.
КПП МФПУ
КИВШ.00223-01
Программа контроля аппаратуры обмена
файл kontmww.cpp
разработка 2000 года
------------------------------------------------------*/
#include "demo.h"
#include "mww.h"
#include
#include
#define INT_MWW 0x72 //Номер прерываний от МВВ
uint upr_sl;
uint sost_sl;
//Подпрограмма формирования управляющего слова
void Set_UPR_SL (int DOP, int CODE_TEST, int CODE_USTR)
{
CtenExt(BASADR+SL_SOST,&sost_sl); //взяли слово состояния
sost_sl &= 0xFFFC; //обнуляем флаги результата
ZapisExt (BASADR+SL_SOST,sost_sl);
CtenExt (BASADR+SL_UPR,&upr_sl);//взяли управляющее слово
upr_sl &= 0xFF00;
upr_sl |= CODE_USTR | (CODE_TEST << 2) | (DOP << 4);
ZapisExt (BASADR+SL_UPR,upr_sl);
}
//Подпрограмма получения кода выхода из тестов МВВ
uint ExitCod (void)
{
uint ExitCodeMvv;
CtenExt (BASADR+SL_SOST,&ExitCodeMvv);
ExitCodeMvv &= 0x0003;
return ExitCodeMvv;
}
//Подпрограмма ожидания ответа от МВВ
uint WaitOtvetMww ()
{
uint OK_ERROR_MWW;
uint cnt=0;
while((OK_ERROR_MWW=ExitCod())==0&&cnt++<0x100)delay (5);
if (OK_ERROR_MWW == 0) return 4;
return OK_ERROR_MWW;
}
void interrupt (*OLD_INT_MWW)(...);//Старый обработчик прерывания от МВВ
//Обработчик прерываний от МВВ (тест контроля прерываний)
void interrupt KONT_INTERRUPT (...)
{
CtenMwwInt (7,SL_SOST,&sost_sl);
ZapisMwwInt (7,SL_UPR,sost_sl);
//Сбрасываем ведущий и ведомый каскад
asm mov al,20h
asm out 20h,al
asm out 0A0h,al
}
//****************************************************//
uint KontMww (void)
{
uint OK_ERROR_MWW;
uint OK_ERROR_MPR;
uint i,j;
uint tst1;
uint tst2;
uint mem;
///////////////// семафоры ///////////////
printf ("\nКонтроль семафоров.\n");
for (i=0;i<8;i++){ //номера семафоров
for (j=0;j<4;j++){ //код теста
//CloseSf(i);
switch (j){
//Чтение МВВ занятого семафора
case 0:if (OpenSf(i)==0)
{
OK_ERROR_MPR=1;
Set_UPR_SL (i,j,1); //формируем слово управления
OK_ERROR_MWW = WaitOtvetMww ();
}
else OK_ERROR_MPR=2;
CloseSf(i);
break;
//Чтение МВВ свободного семафора
case 1:if (CloseSf(i)==0) OK_ERROR_MPR=1;
else OK_ERROR_MPR=2;
Set_UPR_SL (i,j,1); //формируем слово управления
OK_ERROR_MWW = WaitOtvetMww ();
break;
//Чтение МПР занятого семафора
case 2:Set_UPR_SL (i,j,1); //формируем слово управления
OK_ERROR_MWW = WaitOtvetMww ();
if (OpenSf(i)!=0) OK_ERROR_MPR=1;
else OK_ERROR_MPR=2;
if (OK_ERROR_MWW==1){
CtenMwwInt (7,SL_SOST,&mem);
mem &= 0xFFFC;
ZapisMwwInt (7,SL_SOST,mem);
}
CloseSf(i);
break;
//Чтение МПР свободного семафора
case 3:Set_UPR_SL (i,j,1); //формируем слово управления
OK_ERROR_MWW = WaitOtvetMww ();
if (OpenSf(i)==0) OK_ERROR_MPR=1;
else OK_ERROR_MPR=2;
CloseSf(i);
break;
}
if (OK_ERROR_MPR==1 && OK_ERROR_MWW==1)printf ("Семафор %u - OK. ¦ ",i);
else {
switch (OK_ERROR_MPR){
case 1:printf ("МПР - OK.(%u) ",OK_ERROR_MPR);break;
case 2:printf ("МПР - ERROR.(%u) ",OK_ERROR_MPR);break;
}
switch (OK_ERROR_MWW){
case 1: printf ("МВВ - OK.(%u)\n",OK_ERROR_MWW);break;
case 2:printf("МВВ - ERROR(%u)\n",OK_ERROR_MWW);return 0;
case 4: printf ("МВВ - Нет ответа\n");return 0;
default:printf ("МВВ - Не правильный ответ\n");return 0;
}
}
}
printf ("\n");
}
//////////// рабочая область //////////////
printf ("\nКонтроль рабочей области.\n");
for (j=0;j<4;j++){ //код теста
//Направление 0, МПР->МВВ
switch (j){ //код теста
//Передача нулевой информации
case 0:for (mem=0;mem<0x7F00;mem+=2)
ZapisMwwInt (7,mem,0x0000);break;
//Передача единичной информации
case 1:for (mem=0;mem<0x7F00;mem+=2)
ZapisMwwInt (7,mem,0xFFFF);break;
//Передача шахматной информации
case 2:for (mem=0;mem<0x7F00;mem+=4){
ZapisMwwInt (7,mem+0,0x5555);
ZapisMwwInt (7,mem+2,0xAAAA);
}
break;
//Передача обратной шахматной информации
case 3:for (uint mem=0;mem<0x7F00;mem+=4){
ZapisMwwInt (7,mem+0,0xAAAA);
ZapisMwwInt (7,mem+2,0x5555);
}
break;
}
Set_UPR_SL (0,j,2); //формируем слово управления
OK_ERROR_MWW = WaitOtvetMww ();
switch (OK_ERROR_MWW){
case 1: printf ("Тест %u, напр.0 - OK.\n",j);break;
case 2: printf ("Тест %u, напр.0 - ERROR.)\n",j);break;
case 4: printf ("МВВ - Нет ответа\n");break;
default:printf ("МВВ - Не правильный ответ\n");break;
}
//Направление 1, МВВ->МПР
Set_UPR_SL (1,j,2); //формируем слово управления
OK_ERROR_MWW = WaitOtvetMww ();
switch (OK_ERROR_MWW){
case 1:
switch (j){ //код теста
case 0:for (uint mem=0;mem<0x7F00;mem+=2){
CtenMwwInt (7,mem,&tst1);
if(tst1!=0)printf ("Тест %u-ERROR, Адрес - %XH\n",j,mem);
}
printf ("Тест %u, напр.1 - OK.\n",j);
break;
case 1:for (mem=0;mem<0x7F00;mem+=2){
CtenMwwInt (7,mem,&tst1);
if(tst1!=0xFFFF)printf("Тест%u-ERROR,Адрес-%XH\n",j,mem);
}
printf ("Тест %u, напр.1 - OK.\n",j);
break;
case 2:for (mem=0;mem<0x7F00;mem+=4){
CtenMwwInt (7,mem+0,&tst1);
CtenMwwInt (7,mem+2,&tst2);
if ((tst1!=0x5555) || (tst2!=0xAAAA))
printf("Тест%u-ERROR,Адреса - %XH, %XH\n",j,mem+0,mem+2);
}
printf ("Тест %u, напр.1 - OK.\n",j);
break;
case 3:for (mem=0;mem<0x7F00;mem+=4){
CtenMwwInt (7,mem+0,&tst1);
CtenMwwInt (7,mem+2,&tst2);
if ((tst1!=0xAAAA) || (tst2!=0x5555))
printf("Тест%u-ERROR,Адреса - %XH, %XH\n",j,mem+0,mem+2);
}
printf ("Тест %u, напр.1 - OK.\n",j);
break;
}//switch (j)
break;
case 2:printf("Тест %u, напр.1 МВВ - ERROR.)\n",j);
return 0;
case 4: printf ("МВВ - Нет ответа\n");return 0;
default:printf ("МВВ - Не правильный ответ\n");return 0;
}//switch (OK_ERROR_MWW)
}//for*/
///////////////// прерывания ////////////////
// !! инициализация прерываний на КОНТРОЛЬ !!!!
asm CLI
OLD_INT_MWW=getvect(INT_MWW);/сохраняем старый обработчик
setvect (INT_MWW,KONT_INTERRUPT);//устанавливаем новый
//накладываем маску на ведущий каскад
asm IN AL,21H
asm AND AL,0FBH
asm OUT 021H,AL // разрешение прерываний МПР
//накладываем маску на ведомый каскад
asm IN AL,0A1H
asm AND AL,0FBH // 2-бит, IRQ-10, 0x72-вектор
asm OUT 0A1h,AL // разрешение прерываний МПР
asm STI
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Set_UPR_SL (0,0,3); //формируем слово управления
ZapisExt ( 7, 0xa14000, 0 ); //разрешение прерываний МВВ
//!!!!!! Забиваем время пока работают прерывания !!!!!
uint cnt=0;
//Ждать пока тест прерываний не закончится
while (sost_sl!=0xFFFF && cnt++<10){
CtenMwwInt (7,SL_SOST,&sost_sl);
printf ("Сл.сост - %X\n",sost_sl);
delay (100);
uint lll;
CtenMwwInt (7,10,&lll);
printf ("10 - %X\n",lll);
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
asm CLI
setvect (INT_MWW,OLD_INT_MWW); //восстанавливаем старый обработчик
//Посылаем МВВ признак отработки
sost_sl=0xFF00;//младшие 2 бита обязательно сброшены !!!
ZapisMwwInt(7,SL_SOST,sost_sl);//в них передается результат из МВВ
//Ждать приход результата теста
while ((OK_ERROR_MWW=ExitCod())==0);
switch (OK_ERROR_MWW){
case 1: printf ("Прерывания - OK.\n");break;
case 2: printf ("Прерывания - ERROR.)\n");break;
default:printf ("МВВ - Не правильный ответ\n");break;
}
return 0;
}

Приложение 3: МВВ – «Расширенный контроль»

/*-------------------------------------------------
автор Кулагин А.Г.
СПО МВВ-34 МФПУ
КИВШ.00225-01
Программа расширенного контроля МВВ
файл RasKont.cpp
разработка 2000 года
-------------------------------------------------*/
#include "SpoMww.h"
#include
uint seg,addr;
uint error;
uint ret;
uint kon_summa; //Контрольная сумма (должна быть 0)
uint reg_smkont;//Для хранения инф. регистра самоконтроля
#define REG_KONTR 0xFF00 //адрес регистра контроля в 2-х портовом ОЗУ
#define REG_SAM_KONTR 0x0C86 //адрес регистра самоконтроля в ОЗУ контр. КЛС
#define ALL_SEG 0xFFFF //Адрес последнего байта в сегменте
#define NO_ERR 0
#define CHIP 1
#define FLASH 20
#define STAT_RAM 30
#define OTK_MVV 40
#define KON_KLS 50
#define ALL_SBOI 90
//------------------------------------------------------
//Чтение ОЗУ
int ReadRam ( uint seg, uint addr )
{
_ES = seg;
_SI = addr;
asm MOV AX, word ptr ES:SI
return _AX;
}
//Запись в ОЗУ
void WriteRam ( uint seg, uint addr, int znc )
{
_ES = seg;
_SI = addr;
_AX = znc;
asm MOV word ptr ES:SI, AX
}
//------------------------------------------------------
//Тест ППЗУ
uint Flash_Test ()
{
//Сумма всех 32-раз. слов должна быть равна 0
error=0;
kon_summa=0;
for (addr=0;addr
kon_summa += ReadRam (0x6000,addr);
if (kon_summa!=0) return FLASH;
else return NO_ERR;
}
//-------------------------------------------------------
//Быстрый тест ОЗУ
//Чтение-запись шахматной и обратной шахматной информации
uint Ram_Test()
{
error=0;
//Передача шахматной информации
for (seg=3;seg<4;seg++)
for (addr=0;addr
WriteRam (seg*0x100,addr+0,0x5555);
WriteRam (seg*0x100,addr+2,0xAAAA);
for (seg=2;seg<4;seg++)
for (addr=0;addr
if (ReadRam (seg*0x1000,addr+0)!=0x5555 &&
ReadRam (seg*0x1000,addr+2)!=(int)0xAAAA) error++;
//Передача обратной шахматной информации
for (seg=2;seg<4;seg++)
for (addr=0;addr
WriteRam (seg*0x1000,addr+0,0xAAAA);
WriteRam (seg*0x1000,addr+2,0x5555);
for (seg=2;seg<4;seg++)
for (addr=0;addr
if (ReadRam (seg*0x1000,addr+0)!=(int)0xAAAA &&
ReadRam (seg*0x1000,addr+2)!=0x5555) error++;
if (error!=0) return STAT_RAM;
else return NO_ERR;
}
//------------------------------------------------------
//Расширенный тест ОЗУ
//Чтение-запись шахматной, обратной шахматной, нулевой и единичной информации
uint Ext_Ram_Test()
{
if (Ram_Test()!=0) return STAT_RAM;
else error=0;
//Передача нулевой информации
for (seg=0x1000;seg<0x4000;seg+=0x1000)
for (addr=0;addr
WriteRam (seg,addr,0);
for (seg=0x1000;seg<0x4000;seg+=0x1000)
for (addr=0;addr
if (ReadRam (seg,addr)!=0) error++;
//Передача единичной информации
for (seg=0x1000;seg<0x4000;seg+=0x1000)
for (addr=0;addr
WriteRam (seg,addr,0xFFFF);
for (seg=0x1000;seg<0x4000;seg+=0x1000)
for (addr=0;addr
if (ReadRam (seg,addr)!=(int)0xFFFF) error++;
if (error!=0) return STAT_RAM;
else return NO_ERR;
}
//------------------------------------------------------
//Тест сигнала "Отказ МВВ"
uint Signal_Otkaz_Mww_Test()
{
return 0;
}
//------------------------------------------------------
//Тест контроллера КЛС
uint Kontrol_Kls_Test()
{
//Встроенный тест
reg_smkont = RegKls (REG_SAM_KONTR);
reg_smkont &= 0xFFDF; //5 бит = 0-частота CLK-SYS = 10Mhz
reg_smkont |= 0x00C0; //6,7 бит=1 - проверка передатчиков и памяти приемников
ZapisRegKls (REG_SAM_KONTR,reg_smkont);
//Ждать конца теста
while ( (RegKls(REG_SAM_KONTR) & 0x4700) != 0x4700);
//Проверяем результат
reg_smkont = RegKls (REG_SAM_KONTR) & 0xB800;
if (reg_smkont!=0) return KON_KLS;
else return NO_ERR;
//Программно-управляемый тест
//Отключаем выходы всех передатчиков (TFE=0)
//outport (REG_KONTR, inport (REG_KONTR) & 0xF7FF);
//return 0;
}
//-------------------------------------------------------
uint RasKont ()
{
ret=0;
ret = Chip_Test(); //микропроцессор
if (ret==0) ret = Flash_Test(); //FLASH-память
if (ret==0) ret = Ram_Test(); //быстрый тест стат.ОЗУ
if(ret==0)ret = Ext_Ram_Test();//расширеный тест стат.ОЗУ
if(ret==0)ret=Signal_Otkaz_Mww_Test();//сигнал"Отказ МВВ"
if(ret==0) ret = Kontrol_Kls_Test(); //контроллер КЛС
//Запись результата теста для МПР
ZapisMpr (SL_ISPR_TIP,ret);
ZapisMpr (SL_SOST,SS_OZIDANIE);
return 0;}


Загрузить файл

Похожие страницы:

  1. Разработка модели обучения школьному курсу стереометрии на модульной основе

    Тесты >> Педагогика
    ... КОНСТАТИРУЮЩЕГО И КОНТРОЛЬНОГО СРЕЗОВ ВЫВОДЫ ПО ... Использование системного подхода в разработке модульного обучения (Андреева М.В., ... самоуправления. Модульные программы и модули строятся с ... , последовательно вводить все более ... тесты, т.е. проверочные работы, ...
  2. Разработка интерактивных моделей микромира и методика их использования при изучении школьного курса

    Курсовая работа >> Химия
    ... , кроме контрольного; В ... должны предоставлять возможность ввода ответа в ... информационно – моделирующие модули соответствующих объектов ... для проверки выводов, сделанных ... средне». Пример такого проверочного задания следующий: ... разработку такого рода программ, ...
  3. Ввод и вывод информации

    Реферат >> Информатика
    ... контрольно-курсовой работе представлена тема “Устройства Ввода/вывода информации”. Устройства вывода ... виде одного модуля (аналогичное ... с разработкой фирмой ... организациях для вывода проверочных копий. ... , корректировку и отладку программ; - ввод данных и команд в ...
  4. Сети связи и системы коммутации

    Шпаргалка >> Информатика, программирование
    ... В пределах каждой зоны (области) вводится единая 7-значная нумерация, причем каждой ... . больше 2 - СЕ значащая. 4. Проверочные разряды, формируются на передающем конце ... /Imej(φu-φi)=|zВ|ejφв. zВ=Um/Im- модуль zВ; характеризующий соотношение амплитуд U и I ...
  5. Основная образовательная программа начального общего образования ГБОУ ЦО

    Реферат >> Банковское дело
    ... Программы рабочих учебных программ, курсов, модулей и метапрограмм 4.3. Программа ... программы Необходимость разработки образовательной программы ... продуктов: всех контрольно-проверочных и диагностических работ ... ввода информации в компьютер: ввод ... делать выводы, ...

Хочу больше похожих работ...

Generated in 0.0024328231811523