Смекни!
smekni.com

Контроллеры (стр. 11 из 12)

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с