46071 (665366), страница 7

Файл №665366 46071 (Контроллеры) 7 страница46071 (665366) страница 72016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------------- копируем в поле 206 функциональный тест ------------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------------- копируем в поле 207 функциональный тест ------------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----------------- Тест Контроль программы -------------------------------*/

TestControlPO();

/*-------- Формирование дискретного 271 слова ----------------------------*/

SlRab=0;

Adress=0x9d;/* адрес слова 271 */

Priznak_Test();/* растановка признаков тестирования в слове */

Priznak_Usvic();/* признак от УСВИЦ-250 */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlDs_1=SlRab_1;

SlDs_2=SlRab_2;

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------ Формирование 206 слова в соответствии с РТМ, изм,3 для Vpr ------*/

SlRab=0;

FormPTM(StecVprd);

Adress=0x61;/* адрес слова 206 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vprd);/* проверка на < 50км */

if ((Vpr_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказе */

CalcChetSl();/* подсчет четности */

/*------------- Копирование параметров в область вывода -------------------*/

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----- Формирование 207 слова в соответствии с РТМ, изм,3 для Vmd -------*/

SlRab=0;

FormPTM(StecVmdd);

Adress=0xe1;/* адрес слова 207 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vmdd); /* проверка на < 50км */

if ((Vmd_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказе */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

SlRab=0;

/*-------- Сброс сторожевого таймера --------------------------------------*/

TXD=0;

TXD=1;

}

Назначение: Пилотом на земле включает тумблер тест контроля состояния прибора. Максимальная скорость индексом устанавливается на максимальную скорость (250) и к приборной скорости прибавляем тестовое значение скорости. При не совпадении скоростей выводим на индикацию световую и звуковую, сигнализируя о неисправности прибора. После чего проходит весь цикл программы функционирования прибора.

Вход: тестовое значение.

Выход: индикация.

Процедура подсчета и записи бита четности 32х-разрядного рабочего слова.

void CalcChetSl(void){

SlRab_bit31=1;

SlRab_bit31=SlRab_bit31SlRab_bit0SlRab_bit1SlRab_bit2;

SlRab_bit31=SlRab_bit31SlRab_bit3SlRab_bit4SlRab_bit5;

SlRab_bit31=SlRab_bit31SlRab_bit6SlRab_bit7SlRab_bit8;

SlRab_bit31=SlRab_bit31SlRab_bit9SlRab_bit10SlRab_bit11;

SlRab_bit31=SlRab_bit31SlRab_bit12SlRab_bit13SlRab_bit14;

SlRab_bit31=SlRab_bit31SlRab_bit15SlRab_bit16SlRab_bit17;

SlRab_bit31=SlRab_bit31SlRab_bit18SlRab_bit19SlRab_bit20;

SlRab_bit31=SlRab_bit31SlRab_bit21SlRab_bit22SlRab_bit23;

SlRab_bit31=SlRab_bit31SlRab_bit24SlRab_bit25SlRab_bit26;

SlRab_bit31=SlRab_bit31SlRab_bit27SlRab_bit28SlRab_bit29;

SlRab_bit31=SlRab_bit31SlRab_bit30;

}

Назначение: подсчет четности слова и выставления знака четности в 31 разряде подсчет четности производиться по модулю 2.

Вход: нет.

Выход: SlRab_bit31- знак четности.

Процедура перевода из кодов грея в двоичный код максимально допустимую скорость.

void Perevod_Md(void){

Vmdd=0;

Vmdd_bit9=Vmdg_bit9;

Vmdd_bit8=Vmdg_bit8Vmdd_bit9;

Vmdd_bit7=Vmdg_bit7Vmdd_bit8;

Vmdd_bit6=Vmdg_bit6Vmdd_bit7;

Vmdd_bit5=Vmdg_bit5Vmdd_bit6;

Vmdd_bit4=Vmdg_bit4Vmdd_bit5;

Vmdd_bit3=Vmdg_bit3Vmdd_bit4;

Vmdd_bit2=Vmdg_bit2Vmdd_bit3;

Vmdd_bit1=Vmdg_bit1Vmdd_bit2;

Vmdd_bit0=Vmdg_bit0Vmdd_bit1;

}

Назначение: перевод кодов грея в двоичный код.

Вход: Коды грея.

Выход: двоичный код.

Процедура перевода из кодов грея в двоичный код приборную скорость.

void Perevod_Pr(void){

Vprd=0;

Vprd_bit9=Vprg_bit9;

Vprd_bit8=Vprg_bit8Vprd_bit9;

Vprd_bit7=Vprg_bit7Vprd_bit8;

Vprd_bit6=Vprg_bit6Vprd_bit7;

Vprd_bit5=Vprg_bit5Vprd_bit6;

Vprd_bit4=Vprg_bit4Vprd_bit5;

Vprd_bit3=Vprg_bit3Vprd_bit4;

Vprd_bit2=Vprg_bit2Vprd_bit3;

Vprd_bit1=Vprg_bit1Vprd_bit2;

Vprd_bit0=Vprg_bit0Vprd_bit1;

}

Назначение: перевод кодов грея в двоичный код.

Вход: Коды грея.

Выход: двоичный код.

Процедура проверки на отказ маски максимальной скорости.

void Cikl_Otkaz_Vmd(void){

int c=3,St;

Vmd_Ok=0;

T1=0;

do

{

vvodvmd();

Perevod_Md();/* перевод из грея в двоичную */

St=StecVmdd;

if ((St+test_speed>Vmdd)&&(St-test_speed

{

StecVmdd=Vmdd;

break;

}

if (c==0)

{

Vmd_Ok=1;

T1=1;

break;

}

c--;

}

while(c>(-1));

}

Назначение: проверка маски максимальной скорости путем проверки предыдущих значений с полученными значениями и допуск не должен превышать тестовой единицы. Если превышение возникло, то проверка проходит еще 3 раза, но если после этого превышение не исчезло. Выдается световая сигнализация на борт панель пилоту и записывается в ячейку служебного слова (271).

Вход: нет.

Выход: нет.

Процедура проверки на отказ маски приборной скорости.

void Cikl_Otkaz_Vpr(void){

int b=3,St;

Vpr_Ok=0;

RXD=0;

do

{

vvodvpr();

Perevod_Pr();/* перевод из грея в двоичную */

St=StecVprd;

if ((St+test_speed>Vprd)&&(St-test_speed

{

StecVprd=Vprd;

break;

}

if (b==0)

{

Vpr_Ok=1;

RXD=1;

break;

}

b--;

}

while(b>(-1));

}

Назначение: проверка маски приборной скорости путем проверки предыдущих значений с полученными значениями и допуск не должен превышать тестовой единицы. Если превышение возникло, то проверка проходит еще 3 раза, но если после этого превышение не исчезло. Выдается световая сигнализация на борт панель пилоту и записывается в ячейку служебного слова (271).

Вход: нет.

Выход: нет.

Процедура масштабирование для вывода на ЦАП.

void Machtab(unsigned int V1){

double rab1;

rab1=(double)V1;

rab1*=0.63;

CapSlowo=0;

CapSlowo=(unsigned int)rab1;

CapSlowo0<<=6;

}

Назначение: масштабирование необходимо потому, что по ТУ выдача аналогового сигнала должна соответветствовать всем единицам на входе ЦАП, на аналоговом выходе 0.63 В.

Вход: приборная скорость.

Выход: нет.

Процедура формирование 32х-разрядного слова с соответствием с РТМ

void FormPTM(unsigned int V1){

double rab2;

SlRab=0;

rab2=(double)V1;

rab2/=0.11575;

SlRab=(unsigned long)rab2;

rab2-=(double)SlRab;

SlRab<<=12;

}

Назначение: для формирование 32х-разрядного слова с соответствием с РТМ необходима данные поместить с 11 по 27 разряд с ценой младшего разряда.

Вход: приборная скорость.

Выход: данные помещены в слове на свое место.

Процедура тест контроля программного обеспечения

void TestControlPO(void){

int Vprd1=0,Vmdd1=0,Vprg1=0,Vmdg1=0;

PO_Ok=Vmd_Ok=Vpr_Ok=0;

Vprg1=Vprg;

Vmdg1=Vmdg;

Vprd1=Vprd;

Vmdd1=Vmdd;

Vmdg=Vprg=speed;

Perevod_Md();

Perevod_Pr();

if (Vmdd!=200) { PO_Ok=1; Vmd_Ok=1; }

if (Vprd!=200) { PO_Ok=1; Vpr_Ok=1; }

/*----------------------------- 206 --------------------------------------*/

SlRab=0;

FormPTM(Vprd);

Adress=0x61;

Priznak_Usvic();

Priznak_Work(1,0);

CalcChetSl();

if(SlRab!=0) { PO_Ok=1; Vpr_Ok=1; }

/*----------------------------- 207 --------------------------------------*/

SlRab=0;

FormPTM(Vmdd);

Adress=0xe1;

Priznak_Usvic();

Priznak_Work(1,0);

CalcChetSl();

if(SlRab!=0) { PO_Ok=1; Vmd_Ok=1; }

SlRab=0;

Vprg=Vprg1;

Vmdg=Vmdg1;

Vprd=Vprd1;

Vmdd=Vmdd1;

}

Назначение: проверка программы. Это осуществляется путем записи тестовых значений в максимальную и приборную скорость кодов грея. После чего производится проверка на правильности перевода из кодов грея в двоичный код, формирования слова и расстановки признаков.

Вход: тестовое значение кодов грея.

Выход: нет.

Процедура проверки скорости, на меньше 50км.

void If_Speed(unsigned int V){

if(V<200) Priznak_Work(0,1);

}

Назначение: при полеченной скорости меньше чем 50 км необходимо по ТУ выдавать в выходном слове признак нет вычисленных данных.

Вход: приборная скорость.

Выход: расстановка признаков нет вычисленных данных.

Описание аппаратных функций

Основные функции системы

Программа начинает выполнение при подачи питания на контроллер, независимо от других контроллеров. Программа сначало сбрасывает сторожевой таймер предназначенный от зацикливаниии программы, который необходимо сбрасывать в конце программы. После чего очищает все переменные и подготавливает слова с указанием в них о том, что нет вычисленных данных, т.к. процедура вывода слов работает независимо от основной программы по прерыванию от таймера. Далее программы заполняет ячейки скорости. для последующего использавании и проверки на выход из строя сведодиодов или фотодиодов. После чего выполняет ввод с масок данных, перевод их, проверку на отказ маскок предельной и максимальной скорости, проверка на наличии тест контроля, маштабирования л\для вывода на ЦАП, выполняем тест контроль программного обеспечения с занесением результатов в служебное слово и копирование полученных данных в слова.

Технология инсталляции программы

Данный программный продукт поставляется на предприятие-заказчик для конечного использования в борт компьютерах вертолетах или самолетах с максимальной скоростью не более 250км.

При использовании данной версии программы, программа записывается во внутреннью память процессора, т.к. процессор имеет встроенную постоянную память.

Инструкция пользователю

Данная программа разрабатывалсь на ПЭВМ класса PENTIUM c процессором фирмы INTEL с тактовой частотой 100 МГц и с использование внутрисхемного эмулятора фирмы Phyton PICE-51. На этой же машине, но с эксперементальным образцом контроллера проводились испытания. Операционная система Windows'98.

Оценка качества проекта

Качество настоящего проекта будем оценивать по следующим критериям:- полезность (исходная и общая);- удобство эксплуатации;- эффективность;- модифицируемость;- машинонезависимость;

-завершенность;

- согласованность;

- рациональность;

- доступность;

- коммуникативность;

- информативность;

- расширяемость.

Попробуем проанализировать каждый из вышеперечисленных критериев, и дать по нему оценку контроллера. Полезность:

Продукт проектирования обладает свойством ПОЛЕЗНОСТИ, если он отвечает поставленным целям. Это свойство имеет две стороны:

1) исходная полезность - насколько просто, надежно, эффективно можно использовать основной результат обработки;

2) общая полезность - возможность продолжать использование продукта проектирования при изменении условий его применения.

Исходя из данного определения полезности можно сказать, что предлагаемый проект обладает исходной, но не общей полезностью, так как требования простоты, надежности и эффективности закладывались в его основу как одни из главных, но в случае изменения условий его применения эффективность его использования снизится.

Удобство эксплуатации

Продукт проектирования УДОБЕН в ЭКСПЛУАТАЦИИ, если рассматривается возможность его обновления в соответствии с новыми требованиями.

На основе вышесказанного можно определить контроллер удобен в эксплуатации, покрайней мере, в течение 1 года после внедрения.

Эффективность

Проект проектирования обладает свойством эффективности, если он выполняет требуемые функции без лишних затрат ресурсов.

Так как результат проектирования установлен и удовлетворительно функционирует на процессоре INTEL 8051 широко используемый в самолетостроении в наше время, то можно определить проект эффективным.

Модифицируемость

Продукт проектирования необладает свойством МОДИФИЦИРУЕМОСТИ, т.к. он имеет закрытую структуру, не позволяющую легко вносить требуемые изменения.

Так как под модифицируемостью, видимо подразумевается степень открытости архитектуры, то проект не обладает этим свойством.

Машинонезависимость

Продукт проектирования обладает свойством МАШИНОНЕЗАВИСИМОСТИ, если входящие в него функциональные компоненты могут быть реализованы на иных технических средствах. Машинонезависимость проекта целиком и полностью зависит от машинонезависимости контроллера, версии которой работают на довольно многих типах процессоров. Таким образом, свойство машинонезависимости НЕПРИСУЩЕ.

Завершенность

Продукт проектирования обладает свойством ЗАВЕРШЕННОСТИ, если в нем присутствуют все необходимые компоненты, каждый из которых разработан всесторонне.

Согласованность

Продукт проектирования обладает свойством ВНУТРЕННЕЙ СОГЛАСОВАННОСТИ, если он всюду содержит единую нотацию, терминологию и символику. Он также обладает свойством ВНЕШНЕЙ СОГЛАСОВАННОСТИ, если можно проследить его соответствие конкретным требованиям.

Рациональность

Продукт проектирования обладает свойством РАЦИОНАЛЬНОСТИ, если он использует все возможности (языка программирования, численных методов, технических и других средств) для минимизации расхода ресурсов.

На основе анализа исходных текстов можно сделать вывод о том что он не обладает указанным свойством.

Доступность

Продукт проектирования обладает свойством ДОСТУПНОСТИ, если он не допускает селективное использование его компонентов. На основании информации из раздела 2 можно сказать, что проект НЕ ДОСТУПЕН.

Коммуникативность

Продукт проектирования обладает свойством КОММУНИКАТИВНОСТИ, если он дает возможность легко описывать входные данные и выдает информацию, форма и содержание которой просты для понимания и несут полезные сведения.

Расширяемость

Продукт проектирования не обладает свойством РАСШИРЯЕМОСТИ, если он позволяет при необходимости увеличить объем обрабатываемых данных или расширить функции отдельных модулей.

Выводы

В данном разделе выпускной работы были проведены следующие работы:

  • описание фнкций основных модулей программы;

  • описана технология инсталяции программы;

  • дана инструкция пользователю;

  • проведена оценка качества проекта;

Организационно-техническая часть

Расчет затрат на разработку программы

Затраты на разработку программного продукта рассчитываются по формуле:

Zрпп = Zзп + Zзпд + Остр + Оам + Zээ + Rкосв , (1)

где

Zзп - затраты на заработную плату программисту, руб.;

Zзпд - затраты на дополнительную заработную плату, руб.;

Остр - отчисление на социальное страхование, руб.;

Оам - амортизационные отчисления, руб.;

Zээ - затраты на электроэнергию во время разработки программы, руб.;

Rкосв - косвенные расходы, руб.

Разработка программы производилась инженером-программистом, с заработанной платой 600 рублей в месяц. На разработку программы ушло 5 месяца, поэтому затраты на зарплату составляют:

Zзп = 600 * 5 = 3000 (руб.)

Дополнительная заработная плата составляет 30% от основной заработной платы, тогда затраты на дополнительную заработную плату:

Zзпд = Zзп * 0.3 = 3000 * 0.3 = 900 (руб.)

Отчисления на социальное страхование составляют 37% от общей заработной платы, то есть

Остр = ( Zзп + Zзпд ) * 0.37 = ( 3000 + 900 ) * 0.37 = 1443 (руб.)

Стоимость ПЭВМ, используемой для разработки программы составляет 15 500 руб. Срок службы персонального компьютера составляет 8 лет. Тогда на данный момент амортизационные отчисления за месяц составляют:

Оам1 = 15500 / ( 8 * 12 ) = 161.45 (руб.)

За 5 месяца:

Оам = 161.45 * 5 = 807.25 (руб.)

На отладку и тестирование программы с использованием ПЭВМ затрачено 120 рабочих дней, из них, в среднем каждый день по 5 часа. Стоимость электроэнергии 0.14 руб. за киловатт. Мощность, потребляемая ПЭВМ 300 Вт. Посчитаем затраты на электроэнергию во время разработки программы, руб.;

Zээ = ( 120 * 5 ) * 0.14 * 0.300 = 25.2 (руб.)

Косвенные расходы составляют 110% от основной заработанной платы программиста:

Rкосв = 3000 * 1.1 = 3300 (руб.)

Таким образом, подставляя вычисленные значения затрат в формулу (1), получим стоимость затрат на разработку программы:

Zрпп = 3000 + 900 + 1443 + 807.25 + 25.2 +3300= 9475,45 (руб.)

Расчет экономической эффективности от внедрения программного продукта

Рассчитаем экономическую эффективность от внедрения разработанного программного продукта на примере сравнения годовых затрат на содержание отдела рефератированния (5 человек) и содержание ПЭВМ, обслуживающего персонала (1 человек) и консультанта по работе с технической информацией, заменяющих вышеназванный отдел.

Экономическую эффективность рассчитаем по формуле:

Eэ = Zдв - Zпв, (2)

где

Zдв - затраты до внедрения;

Zпв - затраты после внедрения.

Затраты до внедрения

Затраты до внедрения программного продукта рассчитаем по формуле:Zдв = Zзп + Zзпд + Oстр, (3)гдеZзп - затраты на заработную плату работнику, руб.;Zзпд - затраты на дополнительную заработную плату, руб.;

Остр - отчисление на социальное страхование, руб.;

Средняя заработанная плата работников отдела технической информации составляет 800 руб., тогда:

Zзп = 800 * 5*12 = 48 000 (руб.)

Дополнительная заработная плата составляет 30% от основной заработной платы, тогда затраты на дополнительную заработную плату:

Zзпд = Zзп * 0.3 = 48 000 * 0.3 = 14400 (руб.)

Отчисления на социальное страхование составляют 37% от общей заработной платы, тогда:

Oстр =(Zзп + Zзпд)* 0.37 , то есть

Остр = (48000 + 14400) * 0.37 = 23088 (руб.),

Таким образом, подставляя вычисленные значения затрат в формулу (3), получим стоимость затрат до внедрения программы:

Zдв = 48 000 + 14400 + 23088 = 85488 (руб.).

Затраты после внедрения

Затраты после внедрения программного продукта рассчитаем по формуле:

Zпв = Zзп + Zзпд + Oстр + Zээ + Oам + Sпо + Zвпп, (4)

где

Zзп - затраты на заработную плату программисту, руб.;

Zзпд - затраты на дополнительную заработную плату, руб.;

Остр - отчисление на социальное страхование, руб.;

Zээ - затраты на электроэнергию для ПЭВМ, руб.;Оам - амортизационные отчисления, руб.;

Zвпп - затраты на внедрение программного продукта, руб.

Заработанная плата программисту равна 600 тыс. руб., тогда:

Zзп = 600 * 12 + 400 * 12 = 12 000 (руб.).

Дополнительная заработная плата составляет 30% от основной заработной платы, тогда затраты на дополнительную заработную плату:

Zзпд = Zзп * 0.3 = 12 000 * 0.3 = 3600 (руб.).

Отчисления на социальное страхование составляют 37% от общей заработной платы, тогда:

Oстр = ( Zзп + Zзпд ) * 0.37 , то есть

Oстр = (12000+3600)*0.37= 5772 (руб.).

ПЭВМ на рабочем месте работает 8 часов в день. Количество рабочих дней в году 264. Стоимость электроэнергии 0.14 руб. за киловатт. Мощность, потребляемая ПЭВМ 300 Вт. Посчитаем годовые затраты на электроэнергию, потребляемую ПЭВМ, руб.;

Zээ = (8 * 264) * 0.14 * 0.300 = 88 (руб.).

Стоимость ПЭВМ, используемой при эксплуатации разработанной программы составляет 15 500 руб. Срок службы персонального компьютера составляет 8 лет. Тогда амортизационные отчисления за год составляют:

Oам = 15 500 / 8 = 1937.5 (руб.).

Стоимость программного обеспечения равняется себестоимости программного продукта, посчитанной в предыдущем пункте данной главы. Следовательно:

Sпо = 9475.45(руб.).

В затраты на внедрение программного продукта входят затраты на изготовление сопроводительной документации, на заработную плату службы сопровождения программного продукта, затраты на обучение пользователя работе с программой, на установку программного продукта, на адаптацию программного продукта к условиям пользователя и т.д. Так как размер данных затрат зависит от конкретных условий, то стоимость затрат на этапе внедрения можно оценить только качественно, и можно сказать что она будет соизмерима со стоимостью затрат на этапе разработки. Затраты на внедрение программного продукта составляют 110% от затрат на этапе разработки программного обеспечения:

Zвпп = 9475.45 * 1.1 = 10423 (руб.)

Таким образом, подставляя вычисленные значения затрат в формулу (4), получим стоимость затрат после внедрения программы:

Zпв = 12000 + 3600 + 5772 + 88 + 1937.5 + 9475.45 + 10423 = 43295,95 (руб.)

Подставляя рассчитанные затраты до и после внедрения программы в формулу (2), получим значение экономической эффективности от внедрения разработанного программного продукта:

Eэ = Zдв - Zпв = 85488 - 43295,95 = 42192.05 (руб.)

Выводы

Полученные результаты говорят об эффективности внедрения разработанного программного продукта в процессы, требующие обработки большого объема принятия и выдача с всевозможных датчиков. Что существенно уменьшает затраты на разработку схем на вентильной логики.

Приложение 1. Основная программа.

#include

#include

#include

/* 206 => 0x61 207 => 0xE1 271=>9D */

const int speed=172; /* это должно быть 200 */

const int test_speed=2; /* 0.5==2 */

static int a @ 0x18;

/* static int flag @ 0x18;*/

/* static int flag1 @ 0x1a;*/

static bit unsigned char Usvic_Ok @ 0x50;

static bit unsigned char PK_Vpr @ 0x51;

static bit unsigned char Vpr_Ok @ 0x52;

static bit unsigned char Vmd_Ok @ 0x53;

static bit unsigned char PO_Ok @ 0x54;

/*--- номер выводимого параметра 0=Sl206,1=Sl207,2=Sl271 -*/

static unsigned char NomParam @ 0x1c;

static unsigned char BaitV @ 0x2a;

/*------------Выходное слово SlVmd 206 ------------------*/

static unsigned long SlVmd @ 0x10;

static unsigned char SlVmd_1 @ 0x10;

static unsigned char SlVmd_2 @ 0x11;

static unsigned char SlVmd_3 @ 0x12;

static unsigned char SlVmd_4 @ 0x13;

/*------------Выходное слово SlVpr 207 -------------------*/

static unsigned long SlVpr @ 0x3c;

static unsigned char SlVpr_1 @ 0x3c;

static unsigned char SlVpr_2 @ 0x3d;

static unsigned char SlVpr_3 @ 0x3e;

static unsigned char SlVpr_4 @ 0x3f;

/*------------Выходное слово SlDs 271 --------------------*/

static unsigned long SlDs @ 0x38;

static unsigned char SlDs_1 @ 0x38;

static unsigned char SlDs_2 @ 0x39;

static unsigned char SlDs_3 @ 0x3a;

static unsigned char SlDs_4 @ 0x3b;

/*------------Выходное слово для ЦАП CapSlowo -------------*/

static unsigned int CapSlowo @ 0x28;

static unsigned char CapSlowo0 @ 0x28;

static unsigned char CapSlowo1 @ 0x29;

/*------- Рабочая область стеков ------------------*/

/* static unsigned long Stec @ 0x28;*/

static bit unsigned char Test_Pr @ 0x40;

/*--------- Сохранение переведенных скоростей ----------------*/

static unsigned int StecVprd @ 0x30;

static unsigned int StecVmdd @ 0x32;

/*--------- Int вводимых скорости ----------------------------*/

static unsigned int Vprg @ 0x20;

static unsigned int Vmdg @ 0x24;

/*--------- Int переведенных скорости ------------------------*/

static unsigned int Vprd @ 0x22;

static unsigned int Vmdd @ 0x26;

/*------- Рабочее слово SlRab -------------------------*/

static unsigned long SlRab @ 0x2c;

static unsigned char SlRab_4 @ 0x2c;

static unsigned char SlRab_3 @ 0x2d;

static unsigned char SlRab_2 @ 0x2e;

static unsigned char SlRab_1 @ 0x2f;

static unsigned char Adress @ 0x2f;/* адреса (206/207/271)*/

static bit unsigned char SlRab_bit31 @ 0x67;

static bit unsigned char SlRab_bit30 @ 0x66;

static bit unsigned char SlRab_bit29 @ 0x65;

static bit unsigned char SlRab_bit28 @ 0x64;

static bit unsigned char SlRab_bit27 @ 0x63;

static bit unsigned char SlRab_bit26 @ 0x62;

static bit unsigned char SlRab_bit25 @ 0x61;

static bit unsigned char SlRab_bit24 @ 0x60;

static bit unsigned char SlRab_bit23 @ 0x6f;

static bit unsigned char SlRab_bit22 @ 0x6e;

static bit unsigned char SlRab_bit21 @ 0x6d;

static bit unsigned char SlRab_bit20 @ 0x6c;

static bit unsigned char SlRab_bit19 @ 0x6b;

static bit unsigned char SlRab_bit18 @ 0x6a;

static bit unsigned char SlRab_bit17 @ 0x69;

static bit unsigned char SlRab_bit16 @ 0x68;

static bit unsigned char SlRab_bit15 @ 0x77;

static bit unsigned char SlRab_bit14 @ 0x76;

static bit unsigned char SlRab_bit13 @ 0x75;

static bit unsigned char SlRab_bit12 @ 0x74;

static bit unsigned char SlRab_bit11 @ 0x73;

static bit unsigned char SlRab_bit10 @ 0x72;

static bit unsigned char SlRab_bit9 @ 0x71;

static bit unsigned char SlRab_bit8 @ 0x70;

static bit unsigned char SlRab_bit7 @ 0x7f;

static bit unsigned char SlRab_bit6 @ 0x7e;

static bit unsigned char SlRab_bit5 @ 0x7d;

static bit unsigned char SlRab_bit4 @ 0x7c;

static bit unsigned char SlRab_bit3 @ 0x7b;

static bit unsigned char SlRab_bit2 @ 0x7a;

static bit unsigned char SlRab_bit1 @ 0x79;

static bit unsigned char SlRab_bit0 @ 0x78;

/*-- Входные битовые Скорость Vpr Grey -----------------------*/

static bit unsigned char Vprg_bit9 @ 0x01;

static bit unsigned char Vprg_bit8 @ 0x00;

static bit unsigned char Vprg_bit7 @ 0x0f;

static bit unsigned char Vprg_bit6 @ 0x0e;

static bit unsigned char Vprg_bit5 @ 0x0d;

static bit unsigned char Vprg_bit4 @ 0x0c;

static bit unsigned char Vprg_bit3 @ 0x0b;

static bit unsigned char Vprg_bit2 @ 0x0a;

static bit unsigned char Vprg_bit1 @ 0x09;

static bit unsigned char Vprg_bit0 @ 0x08;

/*-- Выходные битовые Скорость Vpr Din -----------------------*/

static bit unsigned char Vprd_bit9 @ 0x11;

static bit unsigned char Vprd_bit8 @ 0x10;

static bit unsigned char Vprd_bit7 @ 0x1f;

static bit unsigned char Vprd_bit6 @ 0x1e;

static bit unsigned char Vprd_bit5 @ 0x1d;

static bit unsigned char Vprd_bit4 @ 0x1c;

static bit unsigned char Vprd_bit3 @ 0x1b;

static bit unsigned char Vprd_bit2 @ 0x1a;

static bit unsigned char Vprd_bit1 @ 0x19;

static bit unsigned char Vprd_bit0 @ 0x18;

/*-- Входные битовые Скорость Vmd Grey -----------------------*/

static bit unsigned char Vmdg_bit9 @ 0x21;

static bit unsigned char Vmdg_bit8 @ 0x20;

static bit unsigned char Vmdg_bit7 @ 0x2f;

static bit unsigned char Vmdg_bit6 @ 0x2e;

static bit unsigned char Vmdg_bit5 @ 0x2d;

static bit unsigned char Vmdg_bit4 @ 0x2c;

static bit unsigned char Vmdg_bit3 @ 0x2b;

static bit unsigned char Vmdg_bit2 @ 0x2a;

static bit unsigned char Vmdg_bit1 @ 0x29;

static bit unsigned char Vmdg_bit0 @ 0x28;

/*-- Выходные битовые Скорость Vmd Din -----------------------*/

static bit unsigned char Vmdd_bit9 @ 0x31;

static bit unsigned char Vmdd_bit8 @ 0x30;

static bit unsigned char Vmdd_bit7 @ 0x3f;

static bit unsigned char Vmdd_bit6 @ 0x3e;

static bit unsigned char Vmdd_bit5 @ 0x3d;

static bit unsigned char Vmdd_bit4 @ 0x3c;

static bit unsigned char Vmdd_bit3 @ 0x3b;

static bit unsigned char Vmdd_bit2 @ 0x3a;

static bit unsigned char Vmdd_bit1 @ 0x39;

static bit unsigned char Vmdd_bit0 @ 0x38;

/*------------------------------------------------------------------------*/

/* Процедура записи бита четности для SlRab */

/*------------------------------------------------------------------------*/

void CalcChetSl(void){

SlRab_bit31=1;

SlRab_bit31=SlRab_bit31^SlRab_bit0^SlRab_bit1^SlRab_bit2;

SlRab_bit31=SlRab_bit31^SlRab_bit3^SlRab_bit4^SlRab_bit5;

SlRab_bit31=SlRab_bit31^SlRab_bit6^SlRab_bit7^SlRab_bit8;

SlRab_bit31=SlRab_bit31^SlRab_bit9^SlRab_bit10^SlRab_bit11;

SlRab_bit31=SlRab_bit31^SlRab_bit12^SlRab_bit13^SlRab_bit14;

SlRab_bit31=SlRab_bit31^SlRab_bit15^SlRab_bit16^SlRab_bit17;

SlRab_bit31=SlRab_bit31^SlRab_bit18^SlRab_bit19^SlRab_bit20;

SlRab_bit31=SlRab_bit31^SlRab_bit21^SlRab_bit22^SlRab_bit23;

SlRab_bit31=SlRab_bit31^SlRab_bit24^SlRab_bit25^SlRab_bit26;

SlRab_bit31=SlRab_bit31^SlRab_bit27^SlRab_bit28^SlRab_bit29;

SlRab_bit31=SlRab_bit31^SlRab_bit30;

}

/*------------------------------------------------------------------------*/

/* Процедура перевода из грея в двоичную допустимую скорость */

/*------------------------------------------------------------------------*/

void Perevod_Md(void){

Vmdd=0;

Vmdd_bit9=Vmdg_bit9;

Vmdd_bit8=Vmdg_bit8^Vmdd_bit9;

Vmdd_bit7=Vmdg_bit7^Vmdd_bit8;

Vmdd_bit6=Vmdg_bit6^Vmdd_bit7;

Vmdd_bit5=Vmdg_bit5^Vmdd_bit6;

Vmdd_bit4=Vmdg_bit4^Vmdd_bit5;

Vmdd_bit3=Vmdg_bit3^Vmdd_bit4;

Vmdd_bit2=Vmdg_bit2^Vmdd_bit3;

Vmdd_bit1=Vmdg_bit1^Vmdd_bit2;

Vmdd_bit0=Vmdg_bit0^Vmdd_bit1;

}

/*------------------------------------------------------------------------*/

/* Процедура перевода из грея в двоичную предельную скорость */

/*------------------------------------------------------------------------*/

void Perevod_Pr(void){

Vprd=0;

Vprd_bit9=Vprg_bit9;

Vprd_bit8=Vprg_bit8^Vprd_bit9;

Vprd_bit7=Vprg_bit7^Vprd_bit8;

Vprd_bit6=Vprg_bit6^Vprd_bit7;

Vprd_bit5=Vprg_bit5^Vprd_bit6;

Vprd_bit4=Vprg_bit4^Vprd_bit5;

Vprd_bit3=Vprg_bit3^Vprd_bit4;

Vprd_bit2=Vprg_bit2^Vprd_bit3;

Vprd_bit1=Vprg_bit1^Vprd_bit2;

Vprd_bit0=Vprg_bit0^Vprd_bit1;

}

/*------------------------------------------------------------------------*/

/* Процедура расстановки состояний */

/*------------------------------------------------------------------------*/

void Priznak_Work(bit unsigned char a,bit unsigned char b){

SlRab_bit30=a;

SlRab_bit29=b;

}

/*------------------------------------------------------------------------*/

/* Процедура расстановки идентифткатора */

/*------------------------------------------------------------------------*/

void Priznak_Usvic(viod){

SlRab_bit8=0;/* Признак */

SlRab_bit9=1;/* от УСВИЦ-250 */

}

/*------------------------------------------------------------------------*/

/* Процедура имтация входных данных */

/*------------------------------------------------------------------------*/

void ImVxodMd(void){

Vmdg=344;

}

/*------------------------------------------------------------------------*/

/* Процедура имтация входных данных */

/*------------------------------------------------------------------------*/

void ImVxodPr(void){

Vprg=172;

}

/*------------------------------------------------------------------------*/

/* Процедура проверки на отказ Vmd */

/*------------------------------------------------------------------------*/

void Cikl_Otkaz_Vmd(void){

int c=3,St;

Vmd_Ok=0;

T1=0;

do

{

/* vvodvmd();*/

ImVxodMd(); /* имитация входа */

Perevod_Md();/* перевод из грея в двоичную */

St=StecVmdd;

if ((St+test_speed>Vmdd)&&(St-test_speed

{

StecVmdd=Vmdd;

break;

}

if (c==0)

{

Vmd_Ok=1;

T1=1;

break;

}

c--;

}

while(c>(-1));

}

/*------------------------------------------------------------------------*/

/* Процедура проверки на отказ Vpr */

/*------------------------------------------------------------------------*/

void Cikl_Otkaz_Vpr(void){

int b=3,St;

Vpr_Ok=0;

RXD=0;

do

{

/* vvodvpr(); */

ImVxodPr(); /* имитация входа */

Perevod_Pr();/* перевод из грея в двоичную */

St=StecVprd;

if ((St+test_speed>Vprd)&&(St-test_speed

{

StecVprd=Vprd;

break;

}

if (b==0)

{

Vpr_Ok=1;

RXD=1;

break;

}

b--;

}

while(b>(-1));

}

/*------------------------------------------------------------------------*/

/* Процедура маштабирование для ЦАП с соответствием 1==0.63 */

/*------------------------------------------------------------------------*/

void Machtab(unsigned int V1){

double rab1;

rab1=(double)V1;

rab1*=0.63;

CapSlowo=0;

CapSlowo=(unsigned int)rab1;

CapSlowo0<<=6;

}

/*------------------------------------------------------------------------*/

/* Процедура формирование слова с соответствием с РТМ */

/*------------------------------------------------------------------------*/

void FormPTM(unsigned int V1){

double rab2;

SlRab=0;

rab2=(double)V1;

rab2/=0.11575;

SlRab=(unsigned long)rab2;

rab2-=(double)SlRab;

if (rab2>0.5) SlRab++;

SlRab<<=12;

}

/*------------------------------------------------------------------------*/

/* Процедура тест контроля ПО */

/*------------------------------------------------------------------------*/

void TestControlPO(void){

int Vprd1=0,Vmdd1=0,Vprg1=0,Vmdg1=0;

PO_Ok=Vmd_Ok=Vpr_Ok=0;

Vprg1=Vprg; /* сохраняем Vprg */

Vmdg1=Vmdg; /* сохраняем Vmdg */

Vprd1=Vprd; /* сохраняем Vprd */

Vmdd1=Vmdd; /* сохраняем Vmdd */

Vmdg=Vprg=speed;

Perevod_Md();

Perevod_Pr();

if (Vmdd!=200) { PO_Ok=1; Vmd_Ok=1; }

if (Vprd!=200) { PO_Ok=1; Vpr_Ok=1; }

/*----------------------------- 206 --------------------------------------*/

SlRab=0;

FormPTM(Vprd);

Adress=0x61;

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,0);/* признак тест */

CalcChetSl();/* Подсчет четности */

if(SlRab!=1080820321) { PO_Ok=1; Vpr_Ok=1; }

/*----------------------------- 207 --------------------------------------*/

SlRab=0;

FormPTM(Vmdd);

Adress=0xe1;

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,0);/* признак тест */

CalcChetSl();/* Подсчет четности */

if(SlRab!=3228304097) { PO_Ok=1; Vmd_Ok=1; }

SlRab=0;

/*------------------- востанавливаем состояния --------------------------*/

Vprg=Vprg1; /* востанавливаем Vprg */

Vmdg=Vmdg1; /* востанавливаем Vmdg */

Vprd=Vprd1; /* востанавливаем Vprd */

Vmdd=Vmdd1; /* востанавливаем Vmdd */

}

/*------------------------------------------------------------------------*/

/* Процедура проверки скорости - нет вычисленных данных */

/*------------------------------------------------------------------------*/

void If_Speed(unsigned int V){

if(V<200) Priznak_Work(0,1); /* признак нет вычисленных данных */

}

/*------------------------------------------------------------------------*/

/* Запуск таймера */

/*------------------------------------------------------------------------*/

void Zapusk(void){

/*---------- Чистка рабочих областей параметров--------------*/

SlRab=0;NomParam=0;

/*------------- Запуск таймера --------------------------*/

asm(" mov TCON,#1 ");

asm(" anl IP,#0 ");

asm(" orl IP,#2 ");

asm(" mov TMOD,#01 ");

asm(" mov a,#0eah "); /* число для загрузки таймера */

asm(" mov TH0,a "); /* 65536-20*36-685+67, где старшая часть */

asm(" mov a,#0d3h "); /* равна eah, а младшая - d3h */

asm(" mov TL0,a ");

asm(" setb TCON.4 ");

asm(" anl IE,#0 ");

asm(" orl IE,#82h ");

}

/*------------------------------------------------------------------------*/

/* Процедура растановки признаков проверок */

/*------------------------------------------------------------------------*/

void Priznak_Test(void){

if((PK_Vpr==0) && (Vpr_Ok==0) && (Vmd_Ok==0) && (PO_Ok==0))

SlRab_bit28=0;

else SlRab_bit28=1;

SlRab_bit27=PK_Vpr;

SlRab_bit26=Vpr_Ok;

SlRab_bit25=Vmd_Ok;

SlRab_bit24=PO_Ok;

}

/*------------------------------------------------------------------------*/

/* Процедура разовой команды ТЕСТ КОНТРОЛЬ */

/*------------------------------------------------------------------------*/

void Test_Kontrol(void){

int V=0;

/* vvodvmd(); */

ImVxodMd(); /* имитация входа Vmd */

Perevod_Md(); /* перевод из грея в двоичную */

/* vvodvpr();*/

ImVxodPr(); /* имитация входа Vmd */

Perevod_Pr(); /* перевод из грея в двоичную */

/*----------------- Сохраняем тестовое значение --------------------------*/

V=Vprd;

/*----------------- Прабавляем тестовое значение -------------------------*/

Vprd+=166*4;

/*----------------- Тест на наличие Vmd >= Vpr ---------------------------*/

if(Vprd>=Vmdd) { RXD=0; PK_Vpr=1; }

else { RXD=1; PK_Vpr=0; }

/*----------------- Отнимаем тестовое значение ---------------------------*/

Vprd-=166*4;

/*----------------- Востанавливаем тестовое значение ---------------------*/

Vprd=V;

/*----------------- Маштабирование Vprd ----------------------------------*/

Machtab(StecVprd);

VivodCapSl();

/*------------- копируем в поле 271 функциональный тест -----------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlDs_1=SlRab_1;

SlDs_2=SlRab_2;

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------------- копируем в поле 206 функциональный тест -----------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------------- копируем в поле 207 функциональный тест -----------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----------------- Тест Контроль программы ------------------------------*/

TestControlPO();

/*-------- Формирование дискретного 271 слова ----------------------------*/

SlRab=0;

Adress=0x9d;/* адрес слова 271 */

Priznak_Test();/* растановка признаков тестирования в слове */

Priznak_Usvic();/* признак от УСВИЦ-250 */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlDs_1=SlRab_1;

SlDs_2=SlRab_2;

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------ Формирование 206 слова в соответствии с РТМ, изм,3 для Vpr ------*/

SlRab=0;

FormPTM(StecVprd);

Adress=0x61;/* адрес слова 206 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vprd);/* проверка на < 50км */

if ((Vpr_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказе */

CalcChetSl();/* подсчет четности */

/*------------- Копирование параметров в область вывода ------------------*/

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----- Формирование 207 слова в соответствии с РТМ, изм,3 для Vmd ------*/

SlRab=0;

FormPTM(StecVmdd);

Adress=0xe1;/* адрес слова 207 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vmdd); /* проверка на < 50км */

if ((Vmd_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказе */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

SlRab=0;

/*-------- Сброс сторожевого таймера -------------------------------------*/

TXD=0;

TXD=1;

}

/*------------------------------------------------------------------------*/

/* Процедура очистки переменных */

/*------------------------------------------------------------------------*/

void Clear(void){

StecVmdd=StecVprd=0;

Vprd=Vmdd=Vprg=Vmdg=0;

SlRab=SlVmd=SlVpr=SlDs=CapSlowo=0;

SlRab=0;

}

/*************************************************************************/

/* Н А Ч А Л О П Р О Г Р А М М Ы /

/*************************************************************************/

void main(void)

{

/*---------- Запуск таймера на вывод -------------------------------------*/

set_vector(TIMER0,Timer);

Zapusk();

/*-------- Сброс сторожевого таймера -------------------------------------*/

TXD=0;

TXD=1;

/*----------------- Обнуление данных -------------------------------------*/

Clear();

/*------------------------ Вывод на ЦАП ----------------------------------*/

Machtab(StecVprd);

VivodCapSl();

/*--------- Подготовка вывода 206 слова ----------------------------------*/

SlRab=0;

Adress=0x61;

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(0,1);/* признак нет вычисленных данных */

CalcChetSl();/* Подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*--------- Подготовка вывода 207 слова ----------------------------------*/

SlRab=0;

Adress=0xe1;

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(0,1);/* признак нет вычисленных данных */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*--------- Заполнение начальными данными Vpr и Vmd ----------------------*/

a=3;

do {

/* vvodvmd(); */

ImVxodMd(); /* имитация входа Vmd */

Perevod_Md(); /* перевод из грея в двоичную */

StecVmdd=Vmdd; /* Сохранение Vmd.*/

/* vvodvpr();*/

ImVxodPr(); /* имитация входа Vpr */

Perevod_Pr(); /* перевод из грея в двоичную */

StecVprd=Vprd; /*Сохранение Vpr */

a--; }

while (a>0);

Nach: {

/*-------- Сброс сторожевого таймера -------------------------------------*/

TXD=0;

TXD=1;

/*-------------------- Обновление данных Vpr и Vmd -----------------------*/

/* vvodvmd();*/

ImVxodMd(); /* имитация входа Vmd */

Perevod_Md(); /* перевод из грея в двоичную */

StecVmdd=Vmdd; /*Сохранение Vм.д.*/

/* vvodvpr();*/

ImVxodPr(); /* имитация входа Vpr */

Perevod_Pr(); /* перевод из грея в двоичную */

StecVprd=Vprd; /*Сохранение Vпр.д.*/

/*----------------- Цикл проверки на отказ Vmd ---------------------------*/

Cikl_Otkaz_Vmd();

/*----------------- Цикл проверки на отказ Vpr ---------------------------*/

Cikl_Otkaz_Vpr();

/*----------------- Тест на наличие РК "ТК" ------------------------------*/

/* {*/

/* if(INT0==1) Test_Kontrol();*/

/* }*/

/* while(INT0==1)*/

/*----------------- Тест на наличие Vmd >= Vpr --------------------------*/

if(Vprd>=Vmdd) { RXD=0; PK_Vpr=1; }

else { RXD=1; PK_Vpr=0; }

/*----------------- Маштабирование Vprd ---------------------------------*/

Machtab(StecVprd);

VivodCapSl();

/*------------- копируем в поле 271 функциональный тест ----------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlDs_1=SlRab_1;

SlDs_2=SlRab_2;

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------------- копируем в поле 206 функциональный тест ----------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------------- копируем в поле 207 функциональный тест ----------------*/

SlRab=0;

Priznak_Work(1,0);/* признак функциональный тест */

CalcChetSl(); /* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----------------- Тест Контроль программы -----------------------------*/

TestControlPO();

/*-------- Формирование дискретного 271 слова ----------------------------*/

SlRab=0;

Adress=0x9d;/* адрес слова 271 */

Priznak_Test();/* растановка признаков тестирования в слове */

Priznak_Usvic();/* признак от УСВИЦ-250 */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlDs_1=SlRab_1;

SlDs_2=SlRab_2;

SlDs_3=SlRab_3;

SlDs_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*------ Формирование 206 слова в соответствии с РТМ, изм,3 для Vpr ------*/

SlRab=0;

FormPTM(StecVprd);

Adress=0x61;/* адрес слова 206 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vprd);/* проверка на < 50км */

if ((Vpr_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказ */

CalcChetSl();/* подсчет четности */

/*------------- Копирование параметров в область вывода -----------------*/

asm(" clr TCON.4 ");/* остановка таймера */

SlVpr_1=SlRab_1;

SlVpr_2=SlRab_2;

SlVpr_3=SlRab_3;

SlVpr_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

/*----- Формирование 207 слова в соответствии с РТМ, изм,3 для Vmd -----*/

SlRab=0;

FormPTM(StecVmdd);

Adress=0xe1;/* адрес слова 207 */

Priznak_Usvic();/* признак от УСВИЦ-250 */

Priznak_Work(1,1);/* признак нормальной работы */

If_Speed(Vmdd); /* проверка на < 50км */

if ((Vmd_Ok==1)||(PO_Ok==1)) Priznak_Work(0,0);/* отказ */

CalcChetSl();/* подсчет четности */

asm(" clr TCON.4 ");/* остановка таймера */

SlVmd_1=SlRab_1;

SlVmd_2=SlRab_2;

SlVmd_3=SlRab_3;

SlVmd_4=SlRab_4;

asm(" setb TCON.4 ");/* запуск таймера */

SlRab=0;

/*-------------------- G O T O -> N A C H ---------------------------*/

}

goto Nach;

}

Приложение 2. Программы вывода слов в магистраль.

defseg c_text,class=code

seg c_text

int38T equ 65535-80*36-80*32-67+33+54

BaitV equ 2ah ; адрес выводного байта 28

Bit6V equ 51h ; Bit6V прямой вывод бита 80

Bit7V equ 52h ; Bit7V инверсной вывод бита 81

Sl206 equ 10h ; адрес слова 206

Sl207 equ 3ch ; адрес слова 207

Sl271 equ 38h ; адрес слова 271

NomParam equ 1bh ; Номер выводимого параметра 0=Sl206

global _Timer,_Vivod206,_Vivod207;,_Vivod271

_Timer:

PUSH PSW ; время от начала прерывания ___11

CLR TCON.4 ; Останов таймеpа 1

CLR TCON.5 ; Сбpос флага пеpеполнения 1

PUSH 0E0h ; 2

MOV A,#low(int38T) ; Выбоp младшего байта INT_38T 1

MOV TL0,A ; запись в TL0 1

MOV A,#high(int38T) ; Выбоp стаpшего байта INT_38T 1

MOV TH0,A ; запись в TH0 1

SETB TCON.4 ; Запуск таймеpа Т0 1 ___20

MOV BaitV,#0ffh ; 2

MOV A,NomParam ; 1

;--------------------------------------------------------------------- 23

CJNE A,#0,GoPp ; 2

NOP ; 1

NOP ; 1

CALL _Vivod206 ; 2___33

INC NomParam ; 1

JMP GoEnd ; 2

GoPp: CJNE A,#1,GoSl ; 2

CALL _Vivod207 ; 2

INC NomParam ; 1

JMP GoEnd ; 2

GoSl: CALL _Vivod271 ; 2

MOV NomParam,#0 ; 2

NOP ; 1

GoEnd: MOV BaitV,#0h ; 2

POP 0E0h ; 2

POP PSW ; 2

RETI ; 2

;************************************************************************

_Vivod206:

PUSH 0D0H ; 2 mkc

PUSH 0E0H ; 2 mkc

PUSH 0 ; 2 mkc

PUSH 1 ; 2 mkc

PUSH 2 ; 2 mkc

PUSH 3 ; 2 mkc

CLR PSW.3 ; 1 mkc

CLR PSW.4 ; 1 mkc

ORL P0,#0C0H ; 2 mkc

MOV R3,#4 ; 1 mkс Количество пеpесылаемых байт #4

MOV R0,#Sl206 ; 1 mkс

;-------------------------------------------------------------------- 18

Bait206:

MOV A,@R0 ; 1 mkc

MOV R2,#7 ; 1 mkс

Bit206:

RRC A ; 1 mkс

ORL P0,#0ffh ; 2 mkc

;-------------------------------------------------------------------- 0

MOV Bit6V,C ; 2 mkc

MOV Bit7V,C ; 2 mkс

CPL Bit7V ; 1 mkс

MOV R1,#15 ; 1 mkс

Pauza206_0: DJNZ R1,Pauza206_0 ; 2*15=30 mkc 36

NOP ; 1 mkc

NOP ; 1 mkc

MOV P0,BaitV ; 2 mkс 40 63

;-------------------------------------------------------------------- 40

;-------------------------------------------------------------------- 0

MOV R1,#18 ; 1 mkс

Pauza206_1: DJNZ R1,Pauza206_1 ; 2*17=34 mkc

DJNZ R2,Bit206 ; 2 mkс 37

RRC A ; 1 mkс

ORL P0,#0ffh ; 2 mkc

;-------------------------------------------------------------------- 40

;-------------------------------------------------------------------- 0

MOV Bit6V,C ; 2 mkс

MOV Bit7V,C ; 2 mkс

CPL Bit7V ; 1 mkс

MOV R1,#16 ; 1 mkс 6

Pauza206_2: DJNZ R1,Pauza206_2 ; 2*16=32 mkc 38

MOV P0,BaitV ; 2 mkс

;-------------------------------------------------------------------- 40

;-------------------------------------------------------------------- 0

MOV R1,#15 ; 1 mkс 00

Pauza206_3: DJNZ R1,Pauza206_3 ; 2*15=30 mkc 31

INC R0 ; 2 mkc 33

DJNZ R3,Bait206 ; 2 mkс 35

;-------------------------------------------------------------------- 35

NOP ; 1 mkс

NOP ; 1 mkс

NOP ; 1 mkс

ORL P0,#0C0H ; 2 mkc 40

;-------------------------------------------------------------------- 40

;-------------------------------------------------------------------- 0

POP 3 ; 2 mkc

POP 2 ; 2 mkc

POP 1 ; 2 mkc

POP 0 ; 2 mkc

POP 0E0H ; 2 mkc

POP 0D0H ; 2 mkc

RET ; 2 mkc

;-------------------------------------------------------------------- 14

;***************************************************************************

_Vivod207:

PUSH 0D0H ; 2 mkc

PUSH 0E0H ; 2 mkc

PUSH 0 ; 2 mkc

PUSH 1 ; 2 mkc

PUSH 2 ; 2 mkc

PUSH 3 ; 2 mkc

CLR PSW.3 ; 1 mkc

CLR PSW.4 ; 1 mkc

ORL P0,#0C0H ; 2 mkc

;-----------------------------------------------------------------------

MOV R3,#4 ; 1 mkс Количество пеpесылаемых байт #4

MOV R0,#Sl207 ; 1 mkс 18

;-----------------------------------------------------------------------

Bait207:

MOV A,@R0 ; 1 mkc

MOV R2,#7 ; 1 mkс

Bit207:

RRC A ; 1 mkс

ORL P0,#0ffh ; 2 mkc //0

;-----------------------------------------------------------------------

MOV Bit6V,C ; 2 mkc

MOV Bit7V,C ; 2 mkс

CPL Bit7V ; 1 mkс

MOV R1,#15 ; 1 mkс

Pauza207_0: DJNZ R1,Pauza207_0 ; 2*15=30 mkc 36

NOP ; 1 mkc

NOP ; 1 mkc

MOV P0,BaitV ; 2 mkс 40 63

MOV R1,#18 ; 1 mkс 00

Pauza207_1: DJNZ R1,Pauza207_1 ; 2*17=34 mkc

DJNZ R2,Bit207 ; 2 mkс 37

RRC A ; 1 mkс

ORL P0,#0ffh ; 2 mkc 40

;------------------------------------------------------------------------

MOV Bit6V,C ; 2 mkс 00

MOV Bit7V,C ; 2 mkс

CPL Bit7V ; 1 mkс

MOV R1,#16 ; 1 mkс 6

Pauza207_2: DJNZ R1,Pauza207_2 ; 2*16=32 mkc 38

MOV P0,BaitV ; 2 mkс 40

MOV R1,#15 ; 1 mkс 00

Pauza207_3: DJNZ R1,Pauza207_3 ; 2*15=30 mkc 31

;---------------------------------------------------------------------

INC R0 ; 2 mkc 33

DJNZ R3,Bait207 ; 2 mkс 35

NOP

NOP

NOP

ORL P0,#0C0H ; 2 mkc 40

;-------------------------------------------------------------------------

POP 3 ; 2 mkc

POP 2 ; 2 mkc

POP 1 ; 2 mkc

POP 0 ; 2 mkc

POP 0E0H ; 2 mkc

POP 0D0H ; 2 mkc

RET ; 2 mkc

;***************************************************************************

_Vivod271:

PUSH 0D0H ; 2 mkc

PUSH 0E0H ; 2 mkc

PUSH 0 ; 2 mkc

PUSH 1 ; 2 mkc

PUSH 2 ; 2 mkc

PUSH 3 ; 2 mkc

CLR PSW.3 ; 1 mkc

CLR PSW.4 ; 1 mkc

ORL P0,#0C0H ; 2 mkc

MOV R3,#4 ; 1 mkс Количество пеpесылаемых байт #4

MOV R0,#Sl271 ; 1 mkс 18

;-----------------------------------------------------------------------

Bait271:

MOV A,@R0 ; 1 mkc

MOV R2,#7 ; 1 mkс

Bit271:

RRC A ; 1 mkс

ORL P0,#0ffh ; 2 mkc //0

;-----------------------------------------------------------------------

MOV Bit6V,C ; 2 mkc

MOV Bit7V,C ; 2 mkс

CPL Bit7V ; 1 mkс

MOV R1,#15 ; 1 mkс

Pauza271_0: DJNZ R1,Pauza271_0 ; 2*15=30 mkc 36

NOP ; 1 mkc

NOP ; 1 mkc

MOV P0,BaitV ; 2 mkс 40 63

MOV R1,#18 ; 1 mkс 00

Pauza271_1: DJNZ R1,Pauza271_1 ; 2*17=34 mkc

DJNZ R2,Bit271 ; 2 mkс 37

RRC A ; 1 mkс

ORL P0,#0ffh ; 2 mkc 40

;------------------------------------------------------------------------

MOV Bit6V,C ; 2 mkс 00

MOV Bit7V,C ; 2 mkс

CPL Bit7V ; 1 mkс

MOV R1,#16 ; 1 mkс 6

Pauza271_2: DJNZ R1,Pauza271_2 ; 2*16=32 mkc 38

MOV P0,BaitV ; 2 mkс 40

MOV R1,#15 ; 1 mkс 00

Pauza271_3: DJNZ R1,Pauza271_3 ; 2*15=30 mkc 31

;---------------------------------------------------------------------

INC R0 ; 2 mkc 33

DJNZ R3,Bait271 ; 2 mkс 35

NOP

NOP

NOP

ORL P0,#0C0H ; 2 mkc 40

;-------------------------------------------------------------------------

POP 3 ; 2 mkc

POP 2 ; 2 mkc

POP 1 ; 2 mkc

POP 0 ; 2 mkc

POP 0E0H ; 2 mkc

POP 0D0H ; 2 mkc

RET ; 2 mkc

;***************************************************************************

END

Приложени 3. Программа вывода приборной скорости на ЦАП.

defseg c_text,class=code

seg c_text

CapSlowo0 equ 28h;

CapSlowo1 equ 29h;

global _VivodCapSl

_VivodCapSl:

push 0e0h

push 1

push 2

push 3

clr tcon.4

mov a,CapSlowo0

mov p0,a

mov a,CapSlowo1

mov p2,a

setb p0.3

nop

nop

nop

nop

nop

clr p0.3

setb tcon.4

pop 3

pop 2

pop 1

pop 0e0h

ret

End

Приложение 4. Программа считывания приборной скорости с маски.

defseg c_text,class=code

seg c_text

;адреса битов на Vmd

bitvmd0 equ 28h

bitvmd1 equ 29h

bitvmd2 equ 2ah

bitvmd3 equ 2bh

bitvmd4 equ 2ch

bitvmd5 equ 2dh

bitvmd6 equ 2eh

bitvmd7 equ 2fh

bitvmd8 equ 20h

bitvmd9 equ 21h

global _vvodvmd

_vvodvmd:

push 0e0h

push 1

push 2

push 3

clr tcon.4

orl p0,#1 ;запрещение работы D1

anl p0,#1 ;запрещение работы D1

orl p1,#14h ;запрещение D2 и разрешение D4

anl p1,#14h ;запрещение D2 и разрешение D4

;считываем для Vmd

call Read_P_1_5

mov bitvmd0,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd1,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd2,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd3,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd4,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd5,c

orl p1,#11h ;запрет d2 и разрешение d4

anl p1,#11h ;запрет d2 и разрешение d4

anl p0,#0 ;запрет d5

call Read_P_1_5

mov bitvmd6,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd7,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd8,c

inc p1

inc p1

call Read_P_1_5

mov bitvmd9,c

setb tcon.4

pop 3

pop 2

pop 1

pop 0e0h

ret

Read_P_1_5:

setb p1.5

mov r3,#30 ;250

Pause_P_1_5:

nop

nop

djnz r3,Pause_P_1_5

mov c,p1.5

ret

end

Приложение 5. Программа считывания максимальной допустимой скорости с маски.

defseg c_text,class=code

seg c_text

;адреса битов на Vpr

bitvpr0 equ 08h

bitvpr1 equ 09h

bitvpr2 equ 0ah

bitvpr3 equ 0bh

bitvpr4 equ 0ch

bitvpr5 equ 0dh

bitvpr6 equ 0eh

bitvpr7 equ 0fh

bitvpr8 equ 00h

bitvpr9 equ 01h

global _vvodvpr

_vvodvpr:

push 0e0h

push 1

push 2

push 3

clr tcon.4

orl p0,#1 ;запрещение работы D1

anl p0,#1 ;запрещение работы D1

orl p1,#1 ;запрещение D4 и разрешение D2

anl p1,#1 ;запрещение D4 и разрешение D2

;считываем для Vpr

call Read_P_1_5

mov bitvpr0,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr1,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr2,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr3,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr4,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr5,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr6,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr7,c

orl p1,#10h ;запрещение D2 и разрешение D4

anl p1,#10h ;запрещение D2 и разрешение D4

call Read_P_1_5

mov bitvpr8,c

inc p1

inc p1

call Read_P_1_5

mov bitvpr9,c

setb tcon.4

pop 3

pop 2

pop 1

pop 0e0h

ret

Read_P_1_5:

setb p1.5

mov r3,#30 ;250

Pause_P_1_5:

nop

nop

djnz r3,Pause_P_1_5

mov c,p1.5

ret

end



Характеристики

Тип файла
Документ
Размер
1,14 Mb
Материал
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6447
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее