📄 sys.c
字号:
#include "sys.h"
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include <avr/signal.h>
//#include <avr/interrupt.h>
/*#define Cofficient 80
#define Speed_Coff 10
#define Accel_step 2
#define Low_freq 50
*/
uint poo[4];
void system(void)
{
asm("nop");
Position_Process();
asm("nop");
Data_Process();
asm("nop");
Pulse_Process();
asm("nop");
Power_ON();
asm("nop");
Check_Process();
asm("nop");
Sys_tm_key();
asm("nop");
ON_Process();
asm("nop");
OF_Process();
asm("nop");
}
void OF_Process(void)
{
asm("nop");
asm("nop");
if(!System_OF_Start)
{
asm("nop");
return;
}
switch(Sys_count_1s)
{
case 1:
PC_off_data =17;
PORTC &= 0xEF; break;
case 2:
PORTE &= 0x7F;
PORTC |= 0x10; break;
case 3:
PORTE |= 0x80;
PORTC &= 0xEF; break;
case 4:
PORTC |= 0x10;
PORTE &=0x7F; break;
case 5:
PORTC &= 0xEF;
PORTE |=0x80; break;
case 6:
PORTC &= 0xEF;
PORTE &=0x7F; break;
case 30:
if(Coil_A_ON) //if it's on fail!
PORTC |= 0x10;
if(Coil_B_ON)
PORTE |= 0x80;
break;
case 31:
PORTC &= 0xEF;
PORTE &= 0x7F;
break;
case 32:
if(Coil_A_ON) //if it's on fail!
PORTC |= 0x10;
if(Coil_B_ON)
PORTE |= 0x80;
break;
case 33:
PORTC &= 0xEF;
PORTE &= 0x7F;
break;
case 60: //125
PORTA |=0x40; break;
case 62: //125
PORTA &=0xBF; break;
case 68: //127
PC_off_data=0;
PORTA &=0xBF;
System_ON_Start=0;
System_ON=0;
System_OF_Start=0;
System_OF=1;
break;
default:
break;
}
}
void ON_Process(void)
{
asm("nop");
if(!System_ON_Start)
{
asm("nop");
return;
}
switch(Sys_count_1s)
{
case 1:
PORTC &= 0xEF; break;
case 2:
PORTE &= 0x7F;
PORTC |= 0x10; break;
case 3:
PORTE |= 0x80;
PORTC &= 0xEF; break;
case 4:
PORTE &=0x7F; break;
case 30:
if(!Coil_A_ON) //if it's on fail!
PORTC |= 0x10;
if(!Coil_B_ON)
PORTE |= 0x80;
break;
case 31:
PORTC &= 0xEF;
PORTE &= 0x7F;
if(Coil_A_ON && Coil_B_ON)
Sys_count_1s +=27;
break;
case 60:
PORTA |=0x08; break;
case 62:
PORTA &=0xF7;
PORTA |=0x10; break;
case 64:
PORTA &=0xEF;
PORTA |=0x20; break;
case 66:
PORTA &=0xDF; break;
case 68:
System_ON_Start=0;
System_ON=1;
System_OF=0;
power0=1; power1=1;power2=1;power3=1;
power_count1=0;
power_count2=0;
power_count3=0;
power_count=0;
break;
default:
break;
}
}
void Sys_tm_key(void)
{
uchar i,j;
asm("nop");
if(Sys_count_10ms <10) //every 10ms once
{
asm("nop");
return;
}
Sys_count_10ms=0;
Timer_1s++;
if(Coin_data)
{
asm("nop");
coin_count++;
if(coin_count >30)
{
asm("nop");
Coin_data=0;
}
}
else
{
asm("nop");
Coin_data_read[1] = Coin_data_read[0];
j = ~PINC;
// j &=0x40;
Coin_data_read[0]= j & 0x40;
//j= Coin_data_read[1]+Coin_data_read[0];
if(Coin_data_read[1] && Coin_data_read[0])
{
asm("nop");
Coin_data=1;
coin_count=0;
}
}
if(Timer_1s >99)
{
asm("nop");
Timer_1s=0;
Sys_count_1s ++;
DDRA = 0x78;
DDRB = 0xF0; //1, out; 0,in
DDRC = 0x10;
DDRD = 0xF9;
DDRE = 0xba; // OC3A-C--PE3-5 设置端口E
DDRF = 0x00; // 设置端口F
DDRG = 0x00; // 设置端口G
if(Rs232_LED)
{
if(Rs232_led_cnt)
{
Rs232_led_cnt=1;
PORTD &=0xDF;
}
else
{
Rs232_led_cnt=0;
PORTD |=0x20;
Rs232_LED=0;
}
}
else
{
Rs232_led_cnt=0;
PORTD |=0x20;
}
/* UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)|(1<<TXCIE0);
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
UBRR0H = 0x00;
UBRR0L = 51; */ // UBRR0L=51;9600,8,n,1。UBRR0L=25;19200,8,n,1,fosc=8M
}
if(Coil_count++ >100)
{
asm("nop");
Coil_count=0;
if(Coil_A_count >20)
Coil_A_ON=1; //coil a is on
else
Coil_A_ON=0;
if(Coil_B_count >20)
Coil_B_ON=1;
else
Coil_B_ON=0;
Coil_A_count=0;
Coil_B_count=0;
LED1_count++;
LED2_count++;
LED3_count++;
//LED1
if(System_ON_Start)
{
asm("nop");
if(LED1_count >2)
{
asm("nop");
LED1_count=0;
PORTD |=0x80; //D7
}
else if(LED1_count >1)
{
asm("nop");
PORTD &=0x7F;
}
else
{
asm("nop");
PORTD |=0x80; //D7
}
}
else if(System_ON)
{
asm("nop");
PORTD &=0x7F;
}
else
{
asm("nop");
PORTD |=0x80;
}
//LED2
if(System_OF_Start)
{
asm("nop");
if(LED2_count >2)
{
asm("nop");
LED2_count=0;
PORTD |=0x40; //D7
}
else if(LED2_count >1)
{
asm("nop");
PORTD &=0xBF;
}
else
{
asm("nop");
PORTD |=0x40; //D7
}
}
else if(System_OF)
{
asm("nop");
PORTD &=0xBF;
}
else
{
asm("nop");
PORTD |=0x40;
}
//LED3
if((Comm_status ==1) ||(Comm_status ==2))
{
if(LED3_count >2)
{
LED3_count=0;
PORTD |=0x20;
}
else if(LED3_count >1)
{
PORTD &=0xDF;
}
else
PORTD |=0x20;
}
else if(Comm_status ==3)
PORTD &=0xDF;
else
PORTD |=0x20;
}
else
{
asm("nop");
Coil_data[2] =Coil_data[1];
Coil_data[1] =Coil_data[0];
Coil_data[0] =PING;
Coil_data[0] &=0x03;
i = Coil_data[0];
i &= Coil_data[1];
i &= Coil_data[2];
if(!(i &0x01))
{
asm("nop");
Coil_A_count++;
}
if(!(i &0x02))
{
asm("nop");
Coil_B_count++;
}
}
//system on/off key
asm("nop");
Sys_ON_OF_data[2] = Sys_ON_OF_data[1];
Sys_ON_OF_data[1] = Sys_ON_OF_data[0];
Sys_ON_OF_data[0] = PINA;
Sys_ON_OF_data[0] &= 0x03;
i =Sys_ON_OF_data[0]&1;
i += Sys_ON_OF_data[1]&1;
i += Sys_ON_OF_data[2]&1;//+Sys_ON_OF_data[3]&1;
if((!i) && System_OF )
{ //it can be start if off state.
// Sys_ON_key=0;
asm("nop");
System_ON_Start=1;
Sys_count_1s=0;
System_OF=0;
}
//else
// Sys_ON_key=0;
asm("nop");
i =Sys_ON_OF_data[0]&2;
i += Sys_ON_OF_data[1]&2;
i += Sys_ON_OF_data[2]&2;
if((!i) && System_ON)//it can be start if off state.
{
// Sys_OF_key=1;
asm("nop");
Sys_count_1s=0;
System_OF_Start=1;
System_ON=0;
}
// else
// Sys_OF_key=0;
}
void Pulse_Process(void)
{
uchar l,kp;
asm("nop");
if(!Touch_count)
{
asm("nop");
return;
}
Touch_count=0;
/* PC_off[2] = PC_off[1];
PC_off[1] = PC_off[0];
PC_off[0] = PINF;
PC_off[0] &=0x08;
l=PC_off[0]+PC_off[0]+PC_off[0];
if(!l)
{
PC_off_flag=17;
} */
Touch_data[2] = Touch_data[1];
Touch_data[1] = Touch_data[0];
Touch_data[0] = PINC;
Touch_data[0] &=7;
//coin
/* kp = Touch_data[0] &0x40 +Touch_data[1] &0x40 +Touch_data[2] &0x40;
if(kp)
{
asm("nop");
asm("nop");
}*/
//-----------
if(Touch_data[0]==Touch_data[1])
{
asm("nop");
if(Touch_data[1]==Touch_data[2])
{
asm("nop");
l = ~Touch_data[0];
Reset_data =l&7;
if(Reset_data &0x01)
{
asm("nop");
if(!M_c_direct[0])
{
asm("nop");
Start_data[0]=0;
M_c_position[0]=0;
if(End_data[0] >50)
{
asm("nop");
End_data[0]=50;
}
}
}
if(Reset_data &0x02)
{
asm("nop");
if(!M_c_direct[1])
{
asm("nop");
Start_data[1]=0;
M_c_position[1]=0;
if(End_data[1] >50)
{
asm("nop");
End_data[1]=50;
}
}
}
if(Reset_data &0x04)
{
asm("nop");
if(!M_c_direct[2])
{
asm("nop");
Start_data[2]=0;
M_c_position[2]=0;
if(End_data[2] >50)
{
asm("nop");
End_data[2]=50;
}
}
}
}
}
}
void Position_Process(void) //inc/dec position, check up/down limited
{
uchar i,j;
asm("nop");
if(M_c_direct[0])//channel 1
{
asm("nop");
if(Puls_count0 > Cofficient)
{
asm("nop");
M_c_position[0] ++;
Puls_count0 -= Cofficient;
if(M_c_position[0] > 0xf7)
{
asm("nop");
M_c_position[0]=0xf8;
Start_data[0]=0;
if(End_data[0] >100)
{
asm("nop");
End_data[0]=100;
}
}
}
}
else
{
asm("nop");
if(Puls_count0 > Cofficient)
{
asm("nop");
if(M_c_position[0])
{
asm("nop");
M_c_position[0] --;
}
asm("nop");
Puls_count0 -= Cofficient;
}
}
if(M_c_direct[1])//channel 2
{
asm("nop");
if(Puls_count1 > Cofficient)
{
asm("nop");
M_c_position[1] ++;
Puls_count1 -= Cofficient;
if(M_c_position[1] > 0xf7)
{
asm("nop");
M_c_position[1]=0xf8;
Start_data[1]=0;
if(End_data[1] >100)
{
asm("nop");
End_data[1]=100;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -