Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
21.12.2020
Размер:
8.06 Кб
Скачать
/*Џа®Ја ¬¬  а Ў®вл ¬®¤г«п ўлзЁб«Ґ­Ёп Ё Ё­¤ЁЄ жЁЁ Ї®ЈаҐи­®б⥩ (Њ‚€Џ)
 ¤«п гбв ­®ўЄЁ –“7016 ЃаҐбв_Њ®ЈЁ«Ґў
      Copyright (c) ЃҐ«Ё«м­ЁЄ®ў ‚.„. 03.2009  02.2010       */

         /*Ї®¤Є«о祭ЁҐ § Ј®«®ўЄ®ў ў­гв७­Ёе ॣЁбва®ў 80‘32*/
#include <io51.h>
         /*Ї®¤Є«о祭ЁҐ § Ј®«®ўЄ®ў ЎЁЎ«Ё®вҐз­ле дг­ЄжЁ©*/
#include <stdlib.h>

/* ЇаҐалў ­Ёп
 INT1 - Ё¬Їг«мбл ®в Ї®ўҐа塞®Ј® бзҐвзЁЄ 
   в ©¬Ґал
 ’0 - з бв®в  ®Ўа §ж®ў®Ј® бзҐвзЁЄ 
 ’1 - ЈҐ­Ґа в®а Ў®¤®ў®© з бв®вл ¤«п Ї®б«Ґ¤®ў вҐ«м­®Ј® Є ­ « 
 ’2 - ЈҐ­Ґа в®а з бв®вл 60 ѓж ¤«п ॣҐ­Ґа жЁЁ Ё­¤ЁЄ в®а 
   Џ®авл
 P11 - а §аҐиҐ­ЁҐ/§ ЇаҐв ЇҐаҐ¤ взЁЄ  RS485
 P11=0 - ЇҐаҐ¤ взЁЄ RS485 § ЇаҐйҐ­
 P11=1 - ЇҐаҐ¤ взЁЄ RS485 а §аҐиҐ­
 P12, P13, ђ14, ђ15, P16 -  ¤аҐб Њ‚€Џ 
 P16=0, ђ15=0 ,ђ14=0, P13=0, P12=0 - 1-© Њ‚€Џ
 P16=0, ђ15=0 ,ђ14=0, P13=0, P12=1 - 2-© Њ‚€Џ
 P16=0, ђ15=0 ,ђ14=0, P13=1, P12=0 - 3-© Њ‚€Џ
 P16=0, ђ15=0 ,ђ14=0, P13=1, P12=1 - 4-© Њ‚€Џ
----------------------------------------
 P16=1, ђ15=1 ,ђ14=1, P13=1, P12=1 - 32-© Њ‚€Џ
 ђ17 - ўлЎ®а вҐбв®ў®Ј® Ё«Ё а Ў®зҐЈ® ०Ё¬ 
 ђ17=1 - а Ў®зЁ© ०Ё¬
 P17=0 - вҐбв Ё­¤ЁЄ жЁЁ
 P35 - бЎа®б § Їа®б  ЇаҐалў ­Ё© ®в Ї®ўҐа塞®Ј® бзҐвзЁЄ 
 P35=0 - ЇаҐалў ­Ёп а §аҐиҐ­л
 P35=1 - ЇаҐалў ­Ёп Ў«®ЄЁа®ў ­л Ё бЎа®иҐ­л                     */

         /*®ЇаҐ¤Ґ«Ґ­ЁҐ  ¤аҐб®ў гбва®©бвў ўў®¤ -ўлў®¤ */
#define ind2       (*(char*) 0x010000) /*бв а襥(«Ґў®Ґ)§­ Є®¬Ґбв® Ё­¤.*/
#define ind1       (*(char*) 0x010001) /*б।­ҐҐ §­ Є®¬Ґбв® Ё­¤.*/
#define ind0       (*(char*) 0x010002) /*¬« ¤иҐҐ(Їа ў®Ґ)§­ Є®¬Ґбв® Ё­¤.*/
#define ind3       (*(char*) 0x010003) /*ॣЁбва бЁ¬ў®«®ў Ё­¤.*/

extern	void delay1p(char);
extern	void delayip(char);
extern	void delayip(char);
extern	void delay1(char);
extern	void delayi(char);
extern	void init_mvip(void);
extern	void get_d1(void);
extern	void test_ind(void);
extern      void meas_pog(void);
extern      void put_ind(void);
extern      long bin_bcd(int);

		/*®ЇЁб ­ЁҐ ЇҐаҐ¬Ґ­­ле*/
unsigned int pogr_int;
extern float pogr;
extern unsigned int q_imp;
unsigned int cnt_irq1;
unsigned char i;
unsigned int m;
unsigned char flg_irq0;
unsigned char flg_irq1;
unsigned long c_obr;
extern unsigned char const_obr;
unsigned char flg_reg;
unsigned char flg_sam;
extern unsigned char m_data[40];        /*data from computer*/
extern unsigned char adr_0;
extern unsigned char adr_1;
extern unsigned long c_cnt;
unsigned long out_bcd;
unsigned long out_bcd1;
extern unsigned int cnt_irqt0;
extern float period;
extern unsigned char period_ch;
extern unsigned char big_time;

void main(void)
{
	init_mvip();/*Ё­ЁжЁ «Ё§ жЁп  ЇЇ а вгал*/
choose_mode:
			if(P1.7==1)goto working_mode;

			         /*вҐбв Ё­¤ЁЄ жЁЁ*/
	flg_irq0=0;
	EX0=1;
wait_irq00:
	if(flg_irq0==0)goto wait_irq00;
	test_ind();
	goto choose_mode;

working_mode:
/*Ї®«г祭ЁҐ гЇа ў«по饣® б«®ў  Ё 1-Ј® Ў«®Є  ¤ ­­ле ®в Є®¬ЇмовҐа */
	get_d1();
/* ­ «Ё§ гЇа ў«по饣® б«®ў */
	if(const_obr==0x30)c_obr=3600000; /* 0,05Ђ 3600000 Ё¬Ї./‚в*з  */
	if(const_obr==0x31)c_obr=360000;  /* 0,5Ђ  360000 Ё¬Ї./‚в*з   */
	if(const_obr==0x32)c_obr=36000;   /* 5Ђ    36000 Ё¬Ї./‚в*з    */
	if(const_obr==0x33)c_obr=3600;    /* 50Ђ   3600 Ё¬Ї./‚в*з     */

	switch (contr_word) {             /*ЇҐаҐе®¤л Ї® гЇа ў«по饬г б«®ўг*/
	case 0x30 : goto reg;
    break;
	case 0x34 : goto reg;
    break;
	case 0x31 : goto pov;
    break;
      case 0x35 : goto pov;
    break;
	case 0x32 : goto samox;
    break;
      case 0x36 : goto samox;
    break;
	case 0x33 : goto thuv;
    break;
	case 0x37 : goto thuv;
    break;
	}

/*०Ё¬ ॣ㫨஢ЄЁ бзҐвзЁЄ®ў*/
reg:
	flg_reg=1;
	flg_sam=0;
	meas_pog();

/*०Ё¬ Ї®ўҐаЄЁ бзҐвзЁЄ®ў*/
pov:
	flg_reg=0;
	flg_sam=0;
	meas_pog();
	if(pogr>9.99){pogr_int=999;goto wait_adress;}
	if(pogr<-9.99){pogr_int=1999;goto wait_adress;}
	if(pogr>=0.01){pogr_int=(unsigned int)(pogr*100.0);goto wait_adress;}
	if(pogr<=-0.01)
	{
		pogr=-pogr;
		pogr_int=((unsigned int)(pogr*100.0))+1000;
            goto wait_adress;
	}
	pogr_int=0x1;

wait_adress:
	     for(i=0;i<=39;i++)
	     {
w_adr:
/*®¦Ё¤ ­ЁҐ  ¤аҐб  ®в Є®¬ЇмовҐа */
		if(RI==0)goto w_adr;
		RI=0;
		m_data[i]=SBUF;
	     }
/*ба ў­Ґ­ЁҐ Ї®«г祭­®Ј®  ¤аҐб  б® бў®Ё¬*/
if(m_data[0]==adr_0&&m_data[1]==adr_1)
{
    /*ЇаҐ®Ўа §®ў ­ЁҐ §­ зҐ­Ёп Ї®ЈаҐи­®бвЁ ў бва®Є®ўго ЇҐаҐ¬Ґ­­го*/
    out_bcd=bin_bcd(pogr_int);
    out_bcd1=out_bcd>>16;
    m_data[35]=((char)out_bcd1&0x0f)+0x30;
    out_bcd1=out_bcd>>12;
    m_data[36]=((char)out_bcd1&0x0f)+0x30;
    out_bcd1=out_bcd>>8;
    m_data[37]=((char)out_bcd1&0x0f)+0x30;
    out_bcd1=out_bcd>>4;
    m_data[38]=((char)out_bcd1&0x0f)+0x30;
    m_data[39]=((char)out_bcd&0x0f)+0x30;

    delayi(10);
    
    P1.1=1;  /*open transmitter RS485*/
/*ўл¤ з  १г«мв в  ў Є®¬ЇмовҐа*/
    TI=0;
    for(i=0;i<=39;i++)
    {
       SBUF=m_data[i];
put_data1:
		if(TI==0)goto put_data1;
        TI=0;
	   delayi(1);
     }
     delayi(1);	
     P1.1=0;  /*close transmitter RS485*/
}

goto wait_adress;

samox:  			/*०Ё¬ Є®­ва®«п б ¬®е®¤ */

if(contr_word==0x36)
{
/*а бзҐв ўаҐ¬Ґ­Ё § ¤Ґа¦ЄЁ ¤«п Ї®¤ ў«Ґ­Ёп ¤аҐЎҐ§Ј  д®в®Ј®«®ўЄЁ*/
      if(period>2.55)
	{
       period_ch=(char)period;
	 big_time=2;
	}
	if(period<=2.55&&period>0.255)
	{
       period_ch=(char)(period*100.001);
	 big_time=1;
	}
	if(period<=0.255)
	{
       period_ch=(char)(period*1000.001);
       if(period_ch==0)period_ch=1;
	 big_time=0;
	}
}

        flg_sam=1;
		cnt_irq1=0;
        P3.5=1;  /*бЎа®б § Їа®б  ЇаҐалў ­Ё© ®в Ї®ўҐа. бзҐвзЁЄ */
	    P3.5=0;
	
		for(m=1;m<=c_cnt;m++)
		{
		      EX1=1;
			delay1(1);
		}
		EX1=0;
		if(cnt_irq1>q_imp)
		{
			pogr_int=0x8002;                 /*Ўа Є*/
        	ind3=0;ind2=10;ind1=14;ind0=14;
		}
		else
		{
			pogr_int=0x8001;                 /*Ј®¤Ґ­*/
        	ind3=0;ind2=10;ind1=14;ind0=11;
		}
		goto wait_adress;

thuv:                 /*०Ё¬ Є®­ва®«п Ї®а®Ј  згўб⢨⥫쭮бвЁ*/

if(contr_word==0x37)
{
/*а бзҐв ўаҐ¬Ґ­Ё § ¤Ґа¦ЄЁ ¤«п Ї®¤ ў«Ґ­Ёп ¤аҐЎҐ§Ј  д®в®Ј®«®ўЄЁ*/
      if(period>2.55)
	{
       period_ch=(char)period;
	 big_time=2;
	}
	if(period<=2.55&&period>0.255)
	{
       period_ch=(char)(period*100.001);
	 big_time=1;
	}
	if(period<=0.255)
	{
       period_ch=(char)(period*1000.001);
       if(period_ch==0)period_ch=1;
	 big_time=0;
	}
}

        flg_sam=1;
		cnt_irq1=0;
        P3.5=1;  /*бЎа®б § Їа®б  ЇаҐалў ­Ё© ®в Ї®ўҐа. бзҐвзЁЄ */
	    P3.5=0;
	
		for(m=1;m<=c_cnt;m++)
		{
		      EX1=1;
			delay1(1);
		}
		EX1=0;
		if(cnt_irq1<q_imp)
		{
			pogr_int=0x8002;                 /*Ўа Є*/
        	ind3=0;ind2=12;ind1=14;ind0=14;
		}
		else
		{
			pogr_int=0x8001;                 /*Ј®¤Ґ­*/
        	ind3=0;ind2=12;ind1=14;ind0=11;
		}
		goto wait_adress;
}
/*Ї®¤Їа®Ја ¬¬  ®Ўа Ў®вЄЁ ЇаҐалў ­Ёп 0*/
interrupt [0x03] void EX0_int (void)      /* External Interrupt 0 */
{
	flg_irq0=1;
	ind0=0;
	ind1=0;
	ind2=0;             	      /*­  Ё­¤ЁЄ в®а е ­г«Ё*/
	ind3=0;                 	/*ўбҐ бЁ¬ў®«л Ї®Ј иҐ­л*/
}
/*Ї®¤Їа®Ја ¬¬  ®Ўа Ў®вЄЁ ЇаҐалў ­Ёп  1*/
interrupt [0x13] void EX1_int (void) 	  /* External Interrupt 1 */
{
		P3.5=1;       /*бЎа®б § Їа®б  ЇаҐалў ­Ё© ®в Ї®ўҐа. бзҐвзЁЄ */
	      EX1=0;
	      flg_irq1=1;
            cnt_irq1=cnt_irq1+1;
	if(flg_sam==1)
        {     
         if(contr_word==0x36||contr_word==0x37)
          {
            if(big_time==0)delayjp(period_ch);
	      if(big_time==1)
             {
               m=m+period_ch/100;
               if(m>=c_cnt)goto exit_int;
               delayip(period_ch);
             }
	      if(big_time==2)
             {
               m=m+period_ch;
               if(m>=c_cnt)goto exit_int;
               delay1p(period_ch);
             }
           }

	     EX1=1;
           P3.5=0;
exit_int:
           ;
	  }  	
}
/*Ї®¤Їа®Ја ¬¬  ®Ўа Ў®вЄЁ ЇаҐалў ­Ёп ®в ў­гв७­ҐЈ® в ©¬Ґа  ’0*/
interrupt [0x0B] void T0_int (void)      /* Timer 0 Overflow */
{
	cnt_irqt0=cnt_irqt0+1;
}

Соседние файлы в папке МВИП
  • #
    21.12.20202.84 Кб0IO51.H
  • #
    21.12.20202.05 Кб0LNK8051.XCL
  • #
    21.12.20205.35 Кб0MEAS_POG.C
  • #
    21.12.20203.98 Кб0MEAS_POG.R03
  • #
    21.12.2020135 б0MVIP.BAT
  • #
    21.12.20208.06 Кб0MVIP.C
  • #
    21.12.202033.22 Кб0MVIP.LST
  • #
    21.12.20205.17 Кб0MVIP.R03
  • #
    21.12.20208.45 Кб0mvip_bm.rom
  • #
    21.12.20202.11 Кб0PUT_IND.C
  • #
    21.12.20202.43 Кб0PUT_IND.R03