Добавил:
ktotogdetotam
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:БЭМЗ полищук доки / mogilev yst / ce4_10_5 / MEAS_POG
.C/*дгЄжЁп ®ЇаҐ¤Ґ«ҐЁп Ї®ЈаҐи®бвЁ Ї®ўҐа塞®Ј® бзҐвзЁЄ (–ќ7004M)
Copyright (C) ЃҐ«Ё«мЁЄ®ў ‚.„. 30.12.2003*/
/*Ї®¤Є«о票Ґ § Ј®«®ўЄ®ў ўгв२е ॣЁбва®ў 80‘32*/
#include <io51.h>
/*Ї®¤Є«о票Ґ § Ј®«®ўЄ®ў ЎЁЎ«Ё®вҐзле дгЄжЁ©*/
#include <stdlib.h>
#include <math.h>
extern unsigned char num_key(void);
extern void out_pogr(float);
/*®ЇаҐ¤Ґ«ҐЁҐ ¤аҐб®ў гбва®©бвў ўў®¤ -ўлў®¤ */
#define tim_chan0 (*(char*) 0x010000) /*бзҐв Ё¬Їг«мб®ў ЏЌ—*/
#define tim_chan1 (*(char*) 0x010001) /*¤Ґ«ҐЁҐ Ё¬Ї. Ї®ўҐа. бзҐвзЁЄ */
#define tim_chan2 (*(char*) 0x010002) /*¤Ґ«ҐЁҐ Ё¬Ї. ЏЌ—*/
/*Ї® § ЇЁбЁ*/
#define ind_data (*(char*) 0x010004) /*¤ лҐ ¤«п Ё¤ЁЄ в®а */
/*Ї® з⥨о*/
#define const_low (*(char*) 0x010004) /*¬«. Ў ©в Ї®бв. Ї®ўҐа. бзҐвзЁЄ */
#define const_mid (*(char*) 0x010008) /*ба. Ў ©в Ї®бв. Ї®ўҐа. бзҐвзЁЄ */
#define const_hi (*(char*) 0x01000c) /*бв. Ў ©в Ї®бв. Ї®ўҐа. бзҐвзЁЄ */
/*®ЇаҐ¤Ґ«ҐЁҐ вЁЇ ЇҐаҐ¬Ґле*/
extern unsigned char number;
extern unsigned char counts1; /*бзҐвзЁЄ ०Ё¬®ў*/
extern unsigned char counts2; /*бзҐвзЁЄ ЇаҐ¤Ґ«®ў Ї® в®Єг*/
extern unsigned char tim_hi_old;
extern unsigned char tim_low_old;
extern unsigned char tim_hi_new;
extern unsigned char tim_low_new;
extern unsigned char cnt_wait;
extern unsigned int buf_int;
extern unsigned int tim_old;
extern unsigned int tim_new;
extern unsigned int qnt_imp;
unsigned int const_cnt;
unsigned int t_wait;
float n_div_st;
float n_div_x;
unsigned int n_div_st_int;
unsigned int n_div_x_int;
float freq_standard;
float freq_test_meter;
float wp;
float wx;
extern float size;
extern unsigned char mode;
void meas_pog(void)
{
beg_meas_pog:
/*¤«п з « Ї®¬Ґа塞 ¬®й®бвм ў бҐвЁ*/
P1.2=1; /*ўЄ«о票Ґ ०Ё¬ P*/
P1.3=1;
P1.6=0; /*०Ё¬ б ¤Ґ«. з бв®вл Ї®ўҐа. бзҐвз., ЎҐ§ ¤Ґ«. Ё¬Ї. ЏЌ—*/
P1.7=1;
flg.4=1; /*гбв ®ўЄ д« Ј ЇҐаў®Ј® Ё§¬ҐаҐЁп*/
flg.2=0; /*бЎа®б д« Ј ЁвҐаў «м®Ј® в ©¬Ґа */
P1.5=0; /*бв®Ї в ©¬Ґа ЏЌ—*/
TR0=0; /*бв®Ї ЁвҐаў «м®Ј® в ©¬Ґа */
tim_chan0=0xff; /*®Ўг«ҐЁҐ в ©¬Ґа ЏЌ—*/
tim_chan0=0xff; /*®Ўг«ҐЁҐ в ©¬Ґа ЏЌ—*/
TH0=0x86; /*§ Јаг§Є ЁвҐаў « 2 ᥪ.(256-122=134)*/
TL0=0x86; /*ў ЁвҐаў «мл© в ©¬Ґа (134d=86h)*/
TR0=1; /*ЇгбЄ ЁвҐаў «м®Ј® в ©¬Ґа */
P1.5=1; /*ЇгбЄ в ©¬Ґа ЏЌ—*/
ET0=1; /*а §аҐиҐЁҐ ЇаҐалў Ё© ®в ЁвҐаў «м®Ј® в ©¬Ґа */
wait_irqt1p:
if(flg.2==0)goto wait_irqt1p; /*®¦Ё¤ ЁҐ ЇаҐа. ®в ЁвҐаў. в ©¬Ґа */
flg.2=0; /*бЎа®б д« Ј ЁвҐаў «м®Ј® в ©¬Ґа */
if(flg.4==1) /*ў®§ўа в ЇаЁ ЇҐаў®¬ Ё§¬ҐаҐЁЁ*/
{
flg.4=0;
goto wait_irqt1p;
}
/*®ЇаҐ¤Ґ«ҐЁҐ а §®бвЁ з «м®Ј® Ё Є®Ґз®Ј® § 票© в ©¬Ґа ,
в.Ґ. Є®«ЁзҐбвў Ё¬Їг«мб®ў ®Ўа. бзҐвзЁЄ ®Є® Ё§¬ҐаҐЁп */
buf_int=((unsigned int)tim_hi_old)<<8; /*®ЇаҐ¤Ґ«ҐЁҐ з «м®Ј® § 票п*/
tim_old=(unsigned int)tim_low_old;
tim_old=buf_int|tim_old;
buf_int=((unsigned int)tim_hi_new)<<8; /*®ЇаҐ¤Ґ«ҐЁҐ Є®Ґз®Ј® § 票п*/
tim_new=(unsigned int)tim_low_new;
tim_new=buf_int|tim_new;
if(tim_old>=tim_new)qnt_imp=tim_old-tim_new; /*ўлзЁб«ҐЁҐ Є®«-ў Ё¬Ї.*/
else qnt_imp=(0xffff-tim_new)+tim_old+1;
/*Ї®Їа ўЄ ¤¤ЁвЁўго Ї®ЈаҐи®бвм*/
if(qnt_imp>=8)size=(float)qnt_imp;
else size=0;
if(counts2==0)
{
size=size/20.0005;/*ўлзЁб«. ¬®й®бвЁ ЇаҐ¤Ґ«Ґ 0.05Ђ*/
freq_standard=1000.0*size;/*з бв®в ЏЌ— ў ѓж*/
}
if(counts2==1)
{
size=size/200.005;/*ўлзЁб«. ¬®й®бвЁ ЇаҐ¤Ґ«Ґ 0.5Ђ*/
freq_standard=100.0*size;/*з бв®в ЏЌ— ў ѓж*/
}
if(counts2==2)
{
size=size/20.0005;/*ўлзЁб«. ¬®й®бвЁ ЇаҐ¤Ґ«Ґ 5Ђ */
freq_standard=10.0*size;/*з бв®в ЏЌ— ў ѓж*/
}
if(counts2==3)
{
size=size/2.00005;/*ўлзЁб«. ¬®й®бвЁ ЇаҐ¤Ґ«Ґ 50Ђ */
freq_standard=size;/*з бв®в ЏЌ— ў ѓж*/
}
/*cзЁвлў ЁҐ Ї®бв®п®© Ї®ўҐа塞®Ј® бзҐвзЁЄ (Ё¬Ї/Є‚в*з) */
const_cnt=(unsigned int)(const_low&0x3f);
buf_int=(unsigned int)(const_mid&0x3f);
buf_int=buf_int<<6;
const_cnt=const_cnt|buf_int;
buf_int=(unsigned int)(const_hi&0x3f);
buf_int=buf_int<<12;
const_cnt=const_cnt|buf_int;
/*Ї®¤Ј®в®ўЄ Є Ё§¬ҐаҐЁо*/
/*а бзҐв ®¦Ё¤ Ґ¬®© з бв®вл Ё¬Їг«мб®ў ®в Ї®ўҐа塞®Ј® бзҐвзЁЄ (ѓж) */
freq_test_meter=((float)const_cnt)*size/3.6E6;
/*ўаҐ¬п ®¦Ё¤ Ёп Ё¬Їг«мб®ў ®в Ї®ўҐа塞®Ј® бзҐвзЁЄ (ᥪ.) */
if(freq_test_meter==0)freq_test_meter=1.0;/*ЇаҐ¤®вўа 饨Ґ ¤Ґ«. 0*/
/*®ЇаҐ¤Ґ«Ё¬ ०Ё¬ а Ў®вл*/
if((freq_standard/freq_test_meter)>30000.0)
{
P1.6=1; /*०Ё¬ б ¤Ґ«. Ё¬Ї. ЏЌ—, ЎҐ§ ¤Ґ«. з бв®вл Ї®ўҐа. бзҐвз.*/
P1.7=0;
/*а ббзЁв Ґ¬ Є®ндд. ¤Ґ«ҐЁп Ё¬Ї. ЏЌ—*/
n_div_st=2;
while((freq_standard/(freq_test_meter*n_div_st))>30000)n_div_st=n_div_st+1;
if(n_div_st>65535.0)
{
n_div_st_int=0xffff;
n_div_st=65535.0;
}
else n_div_st_int=(unsigned int)n_div_st;
n_div_x=1;
t_wait=((unsigned int)(3/freq_test_meter))+1;
/*Їа®Ја ¬¬Ёа®ў ЁҐ в ©¬Ґа ¤Ґ«ҐЁп Ё¬Їг«мб®ў ЏЌ—*/
tim_chan2=(unsigned char)n_div_st_int;
tim_chan2=(unsigned char)(n_div_st_int>>8);
}
else
{
if(freq_standard==0)freq_standard=1.0;
P1.6=0; /*०Ё¬ б ¤Ґ«. з бв®вл Ї®ўҐа. бзҐвз., ЎҐ§ ¤Ґ«. Ё¬Ї. ЏЌ—*/
P1.7=1;
/*а ббзЁв Ґ¬ Є®ндд. ¤Ґ«ҐЁп Ё¬Ї. Ї®ўҐа. бзҐвзЁЄ */
n_div_x=2;
while((freq_standard*n_div_x/freq_test_meter)<30000)n_div_x=n_div_x+1;
if(n_div_x>65535.0)
{
n_div_x_int=0xffff;
n_div_x=65535.0;
}
else n_div_x_int=(unsigned int)n_div_x;
n_div_st=1;
t_wait=((unsigned int)(3*n_div_x/freq_test_meter))+1;
/*Їа®Ја ¬¬Ёа®ў ЁҐ в ©¬Ґа ¤Ґ«ҐЁп Ё¬Їг«мб®ў Ї®ўҐа塞®Ј® бзҐвзЁЄ */
tim_chan1=(unsigned char)n_div_x_int;
tim_chan1=(unsigned char)(n_div_x_int>>8);
}
/*ўлзЁб«пҐ¬ ЁбвЁго нҐаЈЁо*/
wp=(float)(n_div_x/const_cnt); /* Є‚в*з */
/* зЁ Ґ¬ Ё§¬ҐаҐЁҐ нҐаЈЁЁ*/
beg_meas_eneg:
flg.3=1; /*гбв ®ўЄ д« Ј ०Ё¬ ®ЇаҐ¤Ґ«ҐЁп Ї®ЈаҐи®бвЁ*/
flg.4=1; /*гбв ®ўЄ д« Ј ЇҐаў®Ј® Ё§¬ҐаҐЁп*/
flg.2=0; /*бЎа®б д« Ј ЁвҐаў «м®Ј® в ©¬Ґа */
flg.1=0; /*бЎа®б д« Ј ЇаҐалў Ёп ®в Ї®ўҐа. бзҐвзЁЄ */
flg.5=1; /*гбв ®ўЄ д« Ј ЇҐаў®© Ё¤ЁЄ жЁЁ*/
cnt_wait=0; /*®Ўг«ҐЁҐ бзҐвзЁЄ ўаҐ¬ҐЁ ®¦Ё¤ Ёп*/
P1.5=0; /*бв®Ї в ©¬Ґа ЏЌ—*/
TR0=0; /*бв®Ї ЁвҐаў «м®Ј® в ©¬Ґа */
tim_chan0=0xff; /*®Ўг«ҐЁҐ в ©¬Ґа ЏЌ—*/
tim_chan0=0xff; /*®Ўг«ҐЁҐ в ©¬Ґа ЏЌ—*/
TH0=0x86; /*§ Јаг§Є ЁвҐаў « 2 ᥪ.(256-122=134)*/
TL0=0x86; /*ў ЁвҐаў «мл© в ©¬Ґа (134d=86h)*/
TR0=1; /*ЇгбЄ ЁвҐаў «м®Ј® в ©¬Ґа */
P1.5=1; /*ЇгбЄ в ©¬Ґа ЏЌ—*/
wait_irq12:
P1.1=0; /*а §аҐиҐЁҐ ЇаҐалў Ё© 1*/
EX1=1; /*а §аҐиҐЁҐ ЇаҐалў Ё© ®в Ї®ўҐа塞®Ј® бзҐвзЁЄ */
ET0=1; /*а §аҐиҐЁҐ ЇаҐалў Ё© ®в ЁвҐаў «м®Ј® в ©¬Ґа */
wait_irq1n:
if(flg.1==0&&cnt_wait*2<t_wait)goto wait_irq1n;
if(cnt_wait*2>=t_wait)goto error;
ET0=0;
flg.1=0;
flg.2=0;
if(flg.4==1) /*ў®§ўа в ЇаЁ ЇҐаў®¬ Ё§¬ҐаҐЁЁ*/
{
flg.4=0;
goto wait_irq12;
}
/*®ЇаҐ¤Ґ«ҐЁҐ а §®бвЁ з «м®Ј® Ё Є®Ґз®Ј® § 票© в ©¬Ґа ,
в.Ґ. Є®«ЁзҐбвў Ё¬Їг«мб®ў ®Ўа. бзҐвзЁЄ ®Є® Ё§¬ҐаҐЁп */
buf_int=((unsigned int)tim_hi_old)<<8; /*®ЇаҐ¤Ґ«ҐЁҐ з «м®Ј® § 票п*/
tim_old=(unsigned int)tim_low_old;
tim_old=buf_int|tim_old;
buf_int=((unsigned int)tim_hi_new)<<8; /*®ЇаҐ¤Ґ«ҐЁҐ Є®Ґз®Ј® § 票п*/
tim_new=(unsigned int)tim_low_new;
tim_new=buf_int|tim_new;
if(tim_old>=tim_new)qnt_imp=tim_old-tim_new;
else qnt_imp=(0xffff-tim_new)+tim_old+1;
size=(float)qnt_imp; /*ўлзЁб«ҐЁҐ Є®«-ў Ё¬Ї.*/
if(counts2==0)wx=n_div_st*size/3.6E9;
if(counts2==1)wx=n_div_st*size/3.6E8;
if(counts2==2)wx=n_div_st*size/3.6E7;
if(counts2==3)wx=n_div_st*size/3.6E6;
size=((wp-wx)/wx)*100.0;
if(flg.5==1)
{
flg.5=0;
goto check_key;
}
out_pogr(size);
goto check_key;
error:
ind0=0x86; /*Error*/
ind1=0xaf;
ind2=0xaf;
ind3=0xa3;
ind4=0xaf;
ind5.6=1;
flg.3=0;
return;
/*Їа®ўҐаЁ¬ § Їа®б ®в Є« ўЁ вгал*/
check_key:
EX0=1;
if(flg.0==1)
{
number=num_key();
if(number==1)
{
counts1=counts1+1;
if(counts1>3)counts1=1;
switch(counts1){
case 1 :
{
ind5.5=0;
ind5.0=1;
ind5.1=1;
}
break;
case 2 :
{
ind5.5=1;
ind5.0=0;
ind5.1=1;
}
break;
case 3 :
{
ind5.5=1;
ind5.0=1;
ind5.1=0;
}
break;
}
flg.3=0;
return;
}
if(number==2)
{
counts2=counts2+1;
if(counts2>3)counts2=0;
switch(counts2){
case 0 :
{
ind5.2=1;
ind5.3=1;
ind5.4=1;
ind5.7=0;
}
break;
case 1 :
{
ind5.2=0;
ind5.3=1;
ind5.4=1;
ind5.7=1;
}
break;
case 2 :
{
ind5.2=1;
ind5.3=0;
ind5.4=1;
ind5.7=1;
}
break;
case 3 :
{
ind5.2=1;
ind5.3=1;
ind5.4=0;
ind5.7=1;
}
break;
}
goto beg_meas_pog;
}
if(number==3)
{
counts1=1;
ind5.0=1;
ind5.1=1;
ind5.5=0;
ind5.6=0;
goto beg_meas_pog;
}
}
EX0=0;
if(mode==0xff)goto end_meas_pog;
if(P3.0==0&&P3.1==0)counts2=0;
if(P3.0==1&&P3.1==0)counts2=1;
if(P3.0==0&&P3.1==1)counts2=2;
if(P3.0==1&&P3.1==1)counts2=3;
switch(counts2){
case 0 :
{
ind5.2=1;
ind5.3=1;
ind5.4=1;
ind5.7=0;
}
break;
case 1 :
{
ind5.2=0;
ind5.3=1;
ind5.4=1;
ind5.7=1;
}
break;
case 2 :
{
ind5.2=1;
ind5.3=0;
ind5.4=1;
ind5.7=1;
}
break;
case 3 :
{
ind5.2=1;
ind5.3=1;
ind5.4=0;
ind5.7=1;
}
break;
}
end_meas_pog:
goto wait_irq12;
}
Соседние файлы в папке ce4_10_5