Добавил:
ktotogdetotam
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:БЭМЗ полищук доки / mogilev yst / МВИП / MVIP
.C/*Џа®Ја ¬¬ а Ў®вл ¬®¤г«п ўлзЁб«ҐЁп Ё Ё¤ЁЄ жЁЁ Ї®ЈаҐи®б⥩ (Њ‚€Џ)
¤«п гбв ®ўЄЁ –“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;
}
Соседние файлы в папке МВИП