Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
21.12.2020
Размер:
9.99 Кб
Скачать
/*дг­ЄжЁп ®ЇаҐ¤Ґ«Ґ­Ёп Ї®ЈаҐи­®бвЁ Ї®ўҐа塞®Ј® бзҐвзЁЄ  (–ќ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
  • #
    21.12.20208.99 Кб0INIT.LST
  • #
    21.12.2020437 б0INIT.R03
  • #
    21.12.20203.2 Кб0IO51.H
  • #
    21.12.20202.04 Кб0LNK8051.XCL
  • #
    21.12.2020708 б0MATH.H
  • #
    21.12.20209.99 Кб0MEAS_POG.C
  • #
    21.12.20205.92 Кб0MEAS_POG.R03
  • #
    21.12.20207.16 Кб0Meas_uip.c
  • #
    21.12.20205.45 Кб0MEAS_UIP.R03
  • #
    21.12.2020739 б0NUM_KEY.C
  • #
    21.12.2020373 б0NUM_KEY.R03