fl_d=1; // отметить заполнение буфера
break;
};
default: // неизвестное прерывание
errcode=128;
}
enfin: // завершить прерывание
asm { mov al,20H
out 20H,al
}
}
// очищает буфер данных
void clearbof(void)
{ while (fl_d) incteil(); }
void clearbofkey(void)
{ while (kbhit()) getch(); }
// Выход по ошибке
void err(char *mes)
{
exitp(); clearbofkey();
printf("%s\n",mes); exit(0);
}
// Увеличение указателя хвоста
void incteil(void)
{ if (teil==(cbuf-1)) teil=0; else teil++;
asm cli;
if (head==teil) fl_d=0; // если буфер пуст
asm sti;
}
// посылка байта с ожиданием и с очищением буфера
// от байта который был послан
void Transb(char CC)
{ int li,opf,hp;
li=1; opf=0;
do // цикл посылки и ожидания освобождения передатчика
{ hp=trans(CC);
switch (hp)
{ case 0: opf=1; break;
case 1: li++; hp=inportb(base); break;
case -1: { printf("Ошибка при передаче\n"); reseterr(); break;}
}
if (li==0) printf("Тайм-аут при передаче\n");
}
while (!opf);
}
// посылка байта с ожиданием и с очищением буфера
// от байта который был послан
// Не выдает сообщения об ошибках
int Transb_hiden(char CC)
{ int li,opf,hp;
li=0; opf=0;
do // цикл посылки и ожидания освобождения передатчика
{ hp=trans(CC);
switch (hp)
{ case 0: opf=1; break;
case 1: { //доступность данных
li++;
inportb(base);
reseterr;
break;
};
case -1: return -1; //err("Ошибка при передаче"); break;
}
if (li==100) return 1; //err("Тайм-аут при передаче");
}
while (opf==0);
// цикл ожидания приема байта - того что был послан
li=0;
while (fl_d==0)
{
if (++li==0) return 2; //err("Тайм-аут Не принято ни 1 символа");
}
if (area[teil]!=CC) return 3; //err("Не принято то что послано");
incteil();
return 0;
}
void priembig(void)
{ int a;
a=priem();
switch (a)
{ case 0: printf("Принято %d\n",d); break;
case 1: printf("Тайм-аут\n"); break;
case -1: printf("ErorCode=%d\n",errcode); inportb(base);
}
}
#define pi 3.1416
// Возвращает главное значение ARCTAN [0 2*pi]
double mARCTAN(double z_sin,double z_cos)
{ double ang;
if (z_sin==0)
{ if (z_cos<0) return (pi/2.0);
else return (1.5*pi);
}
ang=-atan(z_cos/z_sin);
if (z_sin<0) ang+=pi;
if (ang<0) ang+=2*pi;
return ang;
}
char getsym(void)
{ char a;
a=area[teil]; incteil();
return a;
}
//---------------------------------
void exitp(void) //!!! необходимо вызывать перед выходом из программы
{
disable();
reseterr();
outportb(MCR,8); //rts=0 out2=1
restorevect(); // восстановить обработчик
outportb(IMR,(inportb(IMR)|rgmask)); // запретить прерывание
enable();
}
int get_size(void) // возвращает число байт в буфере
{ int i;
if ( (i=(head-teil))<0 ) i+=cbuf;
return i;
}
//===== отобразить информацию ==================
void outinfo(void)
{ char a; char str1[40];
while ( (get_size()>=1) & (!kbhit()) )
{
printf(" %X",(int)getsym());
if (errcode!=0) { printf("ErrCode=%d\n",errcode);
errcode=0;
}
}
}
struct dostime_t w,w1;
double at,bt;
void fix_time(void) // фиксирует системное время во внутреней переменной
{
_dos_gettime(&w);
at=(double)(w.hour*360000+w.minute*6000+w.second*100+(double)w.hsecond);
}
double get_time(void) // возвращает время прошедшее с момента последнего
// фиксирования
{
_dos_gettime(&w1);
bt=(double)(w1.hour*360000+w1.minute*6000+w1.second*100+(double)w1.hsecond);
bt-=at;
return bt;}
int wait(int x)
{ fix_time();
while (get_size()<x)
{ if (get_time()>(double)(x*4)) return 0;
}
return 1;}
#define Esc 27
#define sym_S 83
#define sym_W 87
#define sym_Z 90
#define sym_A 65
//====================================
void main(void)
{ char hpl,hph,ch; char mas[100];
int j,i,jh;
long li;
int cos,sin,sh,am;
double sr;
// printf("my_dt=%7.4f \n",(mARCTAN(14927.0,-28113.0)/pi*2000));
// return ;
init(); initrs();
clrscr();
Transb(85);
Transb(6);
Transb(0);
while (!kbhit()) // { Transb(85); delay(100); }
outinfo();
me:
errcode=0;
clearbofkey();
exitp();
}
Аннотация научной работы
Девиз: "Не отступать и не сдаваться!"
1. Приемно-адаптерный прибор пожарной сигнализации.
2. УДК 614.842.4
3. КИИ МЧС Республики Беларусь.
4. 2000 год.
5. Объём работы: 44 с.
6. Количество приложений: 3
7. Количество иллюстраций: 3
8. Количество таблиц: 2
9. Источников литературы: 16.
Характеристика работы.
1. Цель: Обеспечение возможности автоматизированной компьютерной обработки информации систем пожарной сигнализации.
2. Методы: анализ технических решений, опытно-конструкторская проработка, программирование.
Основные результаты: разработан проект конструкции приемно-адаптерного прибора пожарной сигнализации и программа информационного обмена.
Наличие документа об использовании научных результатов: да.
подпись автора
СВЕДЕНИЯ
об авторе и научном руководителе работы,
представленной под девизом: «Не отступать и не сдаваться!»
АВТОР НАУЧНЫЙ РУКОВОДИТЕЛЬ
1.Хегстрем 2.Сергей 3.Сергеевич 4. 4 5. 220118, Республика Беларусь, г. Минск, улица Машиностроителей, 25. |
1.Мисюкевич 2.Николай 3.Стефанович 4.Командно-инженерный институт Министерства по чрезвычайным ситуациям Республики Беларусь 5. 05 6. 1 7. 2 8. 220075, г. Минск, улица А. Бачило 5, кв. 68 |
Председатель конкурсной комиссии
Научный руководитель
Автор работы
Сведения о научной работе
1. Приемно-адаптерный прибор пожарной сигнализации.
2. 45
3. УДК 614.842.
4. 2
5. нет.
6. да.
7. нет.
8. нет.
9. Пожарная автоматика. Пожарная сигнализация. Приемно-контрольное оборужование.
Автор _
Научный руководитель _