⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cikl.i

📁 Example the project test UART for AVR161 on C for IAR
💻 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 + -