📄 cikl.i
字号:
sfrb UBRR1 = 0x00;
sfrb UCSR1B = 0x01;
sfrb UCSR1A = 0x02;
sfrb UDR1 = 0x03;
sfrb PINE = 0x05;
sfrb DDRE = 0x06;
sfrb PORTE = 0x07;
sfrb ACSR = 0x08;
sfrb UBRR0 = 0x09;
sfrb UCSR0B = 0x0A;
sfrb UCSR0A = 0x0B;
sfrb UDR0 = 0x0C;
sfrb SPCR = 0x0D;
sfrb SPSR = 0x0E;
sfrb SPDR = 0x0F;
sfrb PIND = 0x10;
sfrb DDRD = 0x11;
sfrb PORTD = 0x12;
sfrb PINC = 0x13;
sfrb DDRC = 0x14;
sfrb PORTC = 0x15;
sfrb PINB = 0x16;
sfrb DDRB = 0x17;
sfrb PORTB = 0x18;
sfrb PINA = 0x19;
sfrb DDRA = 0x1A;
sfrb PORTA = 0x1B;
sfrb EECR = 0x1C;
sfrb EEDR = 0x1D;
sfrw EEAR = 0x1E;
sfrb EEARL = 0x1E;
sfrb EEARH = 0x1F;
sfrb UBRRHI = 0x20;
sfrb WDTCR = 0x21;
sfrb OCR2 = 0x22;
sfrb TCNT2 = 0x23;
sfrw ICR1 = 0x24;
sfrb ICR1L = 0x24;
sfrb ICR1H = 0x25;
sfrb ASSR = 0x26;
sfrb TCCR2 = 0x27;
sfrw OCR1B = 0x28;
sfrb OCR1BL = 0x28;
sfrb OCR1BH = 0x29;
sfrw OCR1A = 0x2A;
sfrb OCR1AL = 0x2A;
sfrb OCR1AH = 0x2B;
sfrw TCNT1 = 0x2C;
sfrb TCNT1L = 0x2C;
sfrb TCNT1H = 0x2D;
sfrb TCCR1B = 0x2E;
sfrb TCCR1A = 0x2F;
sfrb SFIOR = 0x30;
sfrb OSCCAL = 0x31;
sfrb TCNT0 = 0x32;
sfrb TCCR0 = 0x33;
sfrb MCUSR = 0x34;
sfrb MCUCR = 0x35;
sfrb EMCUCR = 0x36;
sfrb SPMCR = 0x37;
sfrb TIFR = 0x38;
sfrb TIMSK = 0x39;
sfrb GIFR = 0x3A;
sfrb GIMSK = 0x3B;
sfrw SP = 0x3D;
sfrb SPL = 0x3D;
sfrb SPH = 0x3E;
sfrb SREG = 0x3F;
void _SEI(void);
void _CLI(void);
void _NOP(void);
void _SLEEP(void);
unsigned char _LPM(unsigned short val);
unsigned char _ELPM(unsigned long val);
void _WDR(void);
void _OPC(unsigned short op);
extern unsigned int flagi;
enum {koeff1, koeff2, koeff3, time_zasl, time_test, time_puskat,
time_osv_zagr,time_mixer, time_zvuk_pred, time_zvuk_alarm, time_clr_razgr, time_dosipan,
delta_tara,rezerv1,rezerv2,rezerv3,ccr,
zad_ves, tara, ves_old, ves_delta,count_tek_comp,
kan1, kan2,kan3,tek_ves, tek_ves_old};
enum {rej0,rej1,start,statist,slujeb_const,slujeb_var,error_crc};
void PUT_PAGE(void);
void obr_knopok(void);
void opr_knopok(void);
void acp_on_CH(unsigned char);
void delay(int ticks);
void out_acp(void);
void gotoz(unsigned char z);
void initgraph(void);
void sprint_long(long int var);
void sprint_int(unsigned int var);
void outtext(char* text);
void SUMMA_PROC(void);
void page_work(void);
void page_statstika(void);
void page_reji(void);
void page_slujebniy(void);
void page_edit_procent(void);
void ptchar(char c);
void RASCHET_PROCENT_MASSA_ZAD_VES(void);
void RASCHET_NAMBER_VAR(void);
void KORREKT_VAR(void);
void save_eeprom(void);
unsigned char coder(unsigned char data);
void page_sluj_const(void);
void eerd_all (void);
void eewr_all (void);
void CIKL (void);
void RASCHET_PROCENT_MASSA_ZAD_VES(void);
void EECLR ( void);
void SRAMCLR ( void);
void ves (void);
void zvonok_alarm(void);
void rejim1(void);
void START_PART(void);
void stop (void);
void test_mex_vkl (void);
void test_mex_otkl (void);
void SUMM_STAT_KOMP(void);
void SUMM_STAT_KOMP_CLR(void);
void simulator(void);
void eewr_zad_part(void);
void clrscr(void);
void clr_tek_mass(void);
int test_rost_razgr(void);
void lcd_send(unsigned char data);
char rcom_byte(char Add);
void vich_delta(void);
extern struct {int procent, massa, tek_massa,delta;}KOMPONENT[6];
extern long int add_summ_comp;
extern long int tek_part;
extern long int zad_part;
extern long int add_summ_comp;
extern unsigned int summa_procent;
extern unsigned int stat_komp[6];
extern unsigned int time_wait;
extern unsigned int zvuktime;
extern unsigned int time_test_rost;
extern unsigned int zvuk_puls;
extern unsigned int n[tek_ves_old+1];
extern unsigned char count_comp;
extern unsigned char count_izm;
extern unsigned char count_kan;
extern unsigned char namber_rej;
extern unsigned char time_tst;
extern unsigned int filtr1;
extern unsigned int filtr2;
extern unsigned int filtr3;
extern unsigned int filtr4;
unsigned char time1_tst;
unsigned char count_shag;
unsigned char count_shag1;
int temp_int;
int izm_ves;
void SUMMA_PROC(void){
char i;
summa_procent=0;
for(i = 0;i < 6; i++)
summa_procent=summa_procent+KOMPONENT[i].procent;
}
void SUMM_STAT_KOMP_CLR(void){
char i;
for(i = 0; i < 7 ; i++) stat_komp[i]=0;
}
void SUMM_STAT_KOMP(void){
char i;
add_summ_comp=0;
for(i = 0; i < 7 ; i++) add_summ_comp=add_summ_comp+stat_komp[i];
}
void clr_tek_mass(void){
char i;
for(i=0;i<6;i++) KOMPONENT[i].tek_massa=0;
}
void RASCHET_PROCENT_MASSA_ZAD_VES(void){
unsigned char x;
long int i=0;
if((zad_part-tek_part)<1000)
if(zad_part<tek_part) n[zad_ves]=0;
else n[zad_ves]=(zad_part-tek_part);
else n[zad_ves]=1000;
for (x=0;x<6;x++){
i=KOMPONENT[x].procent;
i=(i*n[zad_ves]+500)/1000;
KOMPONENT[x].massa=i;
}
SUMMA_PROC();
}
void stop (void){
PORTA=0xFF;
PORTC=0xFF;
PORTE=0x05;
DDRC=0x00;
DDRA=0x00;
DDRE=0x00;
(( PORTE )|= (1<<( 1 )) ) ;
(flagi &=~ 0x0001 ) ;
count_shag=0;
count_shag1=0;
(PORTE |= 0x01 ) ;
(flagi &=~ 0x0040 ) ;
(flagi &=~ 0x04 ) ;
(PORTE |= 0x04 ) ;
time_wait=0;
(flagi &=~ 0x0100 ) ;
}
void START_PART(void){
tek_part=0;
n[tek_ves]=0;
(flagi &=~ 0x0040 ) ;
(flagi &=~ 0x04 ) ;
count_shag=0;
count_shag1=0;
RASCHET_PROCENT_MASSA_ZAD_VES();
n[ves_old]=0;
}
void zvonok_alarm(void){
if ( (!(flagi & 0x0040 )) ){
if ( (!(flagi & 0x0080 )) ) (PORTE |= 0x04 ) ;
else (PORTE &= ~ 0x04 ) ;
}
else{
if(zvuk_puls==0){
(flagi ^= 0x0008 ) ;
if( (flagi & 0x0008 ) ) (PORTE &= ~ 0x04 ) ;
else (PORTE |= 0x04 ) ;
zvuk_puls=n[time_zvuk_alarm];
}
}
}
int test_rost_razgr(void){
if (time_test_rost==0) {
time_test_rost=n[time_test];
if((int)(n[tek_ves_old]-(int)n[tek_ves])<=n[ves_delta]) return 1;
n[tek_ves_old]=n[tek_ves];
(flagi &=~ 0x0040 ) ;
}
return 0;
}
void test_rost(void){
if (time_test_rost==0) {
time_test_rost=n[time_test];
if((n[tek_ves]-n[tek_ves_old])<n[ves_delta]) (flagi |= 0x0040 ) ;
else (flagi &=~ 0x0080 ) , (flagi &=~ 0x0040 ) ,n[tek_ves_old]=n[tek_ves];
}
}
void ves (void){
long int a;
char i=0;
if(n[rezerv1]==0){
izm_ves=0;
n[kan1]=n[kan1]-12;
n[kan2]=n[kan2]-7;
n[kan3]=n[kan3]-(-12);
for(i=0;i<3;i++){
a=(long)n[kan1+i]*n[koeff1+i];
izm_ves=izm_ves+(*((int*)&a+1));
}
}
if( n[rezerv2]){
filtr4=filtr3;
filtr3=filtr2;
filtr2=filtr1;
filtr1=izm_ves;
izm_ves=(filtr1+filtr2+filtr3+filtr4)/4;
}
n[tek_ves]=izm_ves;
}
void vich_delta(void){
int new_delta;
int old_delta;
ves ();
if(n[tek_ves] < n[ves_old]) n[tek_ves]=n[ves_old];
KOMPONENT[n[count_tek_comp]-1].tek_massa=n[tek_ves]-n[ves_old];
n[ves_old]=izm_ves;
new_delta=KOMPONENT[n[count_tek_comp]-1].tek_massa-temp_int;
old_delta=KOMPONENT[n[count_tek_comp]-1].delta;
if(old_delta<0){
if(old_delta<-(KOMPONENT[n[count_tek_comp]-1].massa)) old_delta=0;
}
if(old_delta>0){
if(old_delta>=(KOMPONENT[n[count_tek_comp]-1].massa)) old_delta=0;
}
KOMPONENT[n[count_tek_comp]-1].delta =(old_delta-new_delta)/2 ;
}
void out_comp(void){
if(KOMPONENT[n[count_tek_comp]-1].massa){
switch(count_shag1){
case 0:
switch(n[count_tek_comp]){
case 1: (PORTA &= ~ 0x40 ) ;
break;
case 2: (PORTA &= ~ 0x10 ) ;
break;
case 3: (PORTA &= ~ 0x04 ) ;
break;
case 4: (PORTA &= ~ 0x01 ) ;
break;
case 5: (PORTA &= ~ 0x02 ) ;
break;
case 6: (PORTA &= ~ 0x08 ) ;
break;
default:;
}
time_wait=1;
count_shag1++;
break;
case 1:
if(time_wait==0){
ves ();
if(n[tek_ves] < n[ves_old]) n[tek_ves]=n[ves_old];
KOMPONENT[n[count_tek_comp]-1].tek_massa=n[tek_ves]-n[ves_old];
if(KOMPONENT[n[count_tek_comp]-1].tek_massa >= (KOMPONENT[n[count_tek_comp]-1].massa + KOMPONENT[n[count_tek_comp]-1].delta)){
time_tst=(char) n[rezerv1];
temp_int=KOMPONENT[n[count_tek_comp]-1].tek_massa;
time_wait=n[time_dosipan];
(flagi &=~ 0x0040 ) ;
(PORTA |=( 0x40 | 0x10 | 0x04 | 0x01 | 0x02 | 0x08 | 0x20 | 0x80 | 0x40 | 0x10 )) ;
count_shag1++;
}
else test_rost();
}
break;
case 2:
if(time_wait==0){
vich_delta();
stat_komp[n[count_tek_comp]-1] = stat_komp[n[count_tek_comp]-1] + KOMPONENT[n[count_tek_comp]-1].tek_massa;
SUMM_STAT_KOMP();
eewr_all();
n[count_tek_comp]++;
count_shag1=0;
}
}
}
else n[count_tek_comp]++;
if(n[count_tek_comp]>6) count_shag++;
}
void CIKL (void){
switch(count_shag){
case 0:{
if(n[count_tek_comp]==7) count_shag=7;
time_wait=n[time_zvuk_pred];
(flagi |= 0x0080 ) ;
if(!n[count_tek_comp]) START_PART();
count_shag++;
}
break;
case 1:{
if(time_wait==0){
(flagi &=~ 0x0080 ) ;
(PORTC &= ~ 0x02 ) ;
(PORTC &= ~ 0x80 ) ;
(flagi &=~ 0x0100 ) ;
time_wait=n[time_zasl];
count_shag++;
}
}
break;
case 2:{
if(time_wait==0){
(PORTC |= 0x80 ) ;
(PORTC &= ~ 0x08 ) ;
time_wait=n[time_puskat];
count_shag++;
}
}
break;
case 3:if(time_wait==0){
if(!n[count_tek_comp]){
ves ();
if(n[rezerv1]==0)n[tara]=n[tek_ves];
else n[tara]=10;
n[ves_old]=n[tek_ves];
n[ count_tek_comp]++;
}
n[tek_ves_old]=0;
count_shag++;
}
break;
case 4:out_comp();
break;
case 5:time_wait=n[time_osv_zagr];
count_shag++;
break;
case 6:{
if(time_wait==0){
(PORTC|= 0x08 ) ;
time_wait=n[time_mixer];
count_shag++;
}
}
break;
case 7:{
if(time_wait==0){
time_wait=n[time_zvuk_pred];
(flagi |= 0x0080 ) ;
count_shag++;
}
}
break;
case 8:{
if(time_wait==0){
(flagi &=~ 0x0080 ) ;
(PORTC &= ~ 0x04 ) ;
time_wait=n[time_puskat];
count_shag++;
}
}
break;
case 9:{
if(time_wait==0){
(PORTC &= ~ 0x01 ) ;
(PORTC &= ~ 0x20 ) ;
(flagi |= 0x0100 ) ;
time_wait=n[time_zasl];
count_shag++;
}
}
break;
case 10:
if(time_wait==0){
(PORTC |= 0x20 ) ;
ves();
if(test_rost_razgr()){
if((int)n[tek_ves]<=(int)(n[tara]+n[delta_tara])){
(PORTC &= ~ 0x80 ) ;
(flagi &=~ 0x0100 ) ;
time_wait=n[time_zasl];
count_shag++;
}
else (flagi |= 0x0040 ) ;
}
}
break;
case 11:{
if(!time_wait){
char i;
(PORTC |= 0x80 ) ;
for(i=0;i<6;i++) tek_part=tek_part+KOMPONENT[i].tek_massa;
n[tek_ves]=n[tara];
clr_tek_mass();
n[ count_tek_comp]=0;
RASCHET_PROCENT_MASSA_ZAD_VES();
if((zad_part <= tek_part) || (zad_part-tek_part<= 10L )){
count_shag++;
(PORTC |= 0x02 ) ;
time_wait=n[time_clr_razgr];
}
else{
RASCHET_PROCENT_MASSA_ZAD_VES();
count_shag=3;
}
}
}
break;
case 12:
if(!time_wait){
count_shag=0;
stop();
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -