📄 main.c
字号:
/*
文件名:main.c
*/
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <stdio.h>
#include <avr/wdt.h>
//#include <avr/delay.h>
#include "main.h"
//#include "dataflash.h"
//#include "Int_all.c"
//#include "lcm.h"
//#include "uart.h"
//#include "timechip.h"
#include "comm.h"
#include "sys.h"
//eeprom_write_byte (0xff,0xfe);
//eeprom_write_byte (0x1ff,0xfe);
//void EEPROM_write(unsigned int uiAddress, unsigned char ucData);
//nsigned char EEPROM_read(unsigned int uiAddress);
//ISR_ALIAS(SIG_USART1_RECV,SIG_USART1_TRANS)
void Sys_Ini(void)
{
uchar i,j,k;
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
PORTA = 0x03; // 端口G
PORTB = 0x00;
PORTC = 0x40;
PORTD = 0xF9;
PORTE = 0x42; // 端口E
PORTF = 0xF8; // 端口F
PORTG = 0x1f; // 端口G
//CTC3 timer3 over folw
TCCR3A=0;
TCCR3B=0;
OCR3A=0x8; // >10 important
TCCR3A=0x40;//40;
TCCR3B=0x0B;//44
// TCNT3H =0xff;
// TCNT3L =0xa0;
// TCCR3A=0;
// TCCR3B=3;
//CTC0 //T0设置;prescale=64
TCNT0 = 0x83;
TCCR0 = 0x04; //10; //T0设置;prescale=64
/* TCCR0 = (1<<WGM01)|(0<<COM01)|(1<<COM00)|(1<<CS02)|(0<<CS01)|(0<<CS00);
OCR0 = 5;
TCNT0 = 0;
*/
//CTC1
TCCR1A=0;
TCCR1B=0;
OCR1A=0x8; // >10 important
TCCR1A=0x40;//40;
TCCR1B=0x0B;//44
//CTC2
TCNT2 = 0x83;
TCCR2 = (1<<WGM21)|(0<<COM21)|(1<<COM20)|(1<<CS21); //T2;32分之1分频
OCR2 = 1;
TIMSK = (1<<TOIE0)|(1<<OCIE1A)|(1<<OCIE2);
ETIMSK = (1<<OCIE3A);
MCUCR=0x00;
//
//---------------------------------------串口0初始化
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
//---------------------------------------串口1初始化
UCSR1B = 0x00;
UCSR1A = 0x00;
UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1)|(1<<TXCIE1);
UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);
UBRR1H = 0x00;
UBRR1L = 51; // UBRR1L=51;9600,8,n,1。UBRR1L=25;19200,8,n,1,fosc=8M
// TCCR2 = (1<<WGM21)|(0<<COM21)|(1<<COM20)|(1<<CS22)|(0<<CS21)|(0<<CS20);
//System_OF=1;
System_ON_Start=1;
Sys_count_1s=0;
power0=0;// power1=0;power2=0;power3=0;
PC_off_data=0;
i=eeprom_read_byte(0xff);
j=eeprom_read_byte(0x1ff);
k =i+j;
if(k == 0xfc)
{
colin =1;
}
else
{
colin=0;
}
}
ISR(SIG_OVERFLOW0) //SIG_OVERFLOW2)
{
uint8_t i; //1ms
asm("nop");
RS485_timer++;
Touch_count++;
Sys_count_10ms++;
if(TM_count1 ++ > 99)
{
TM_count1=0; //100ms
Comm_DRV_count++;
Comm_SPD_count++;
idle_count++;
power_count1++;
power_count2++;
power_count3++;
power_count++;
if(power_count >60)
{
asm("nop");
power_count=60;
}
if(TM_count2 ++ >50)
{
asm("nop");
TM_count2=0;
}
}
asm("nop");
TCNT0 = 29; //83;
}
ISR(SIG_OUTPUT_COMPARE3A) //Channel 1
{
uint8_t i;
asm("nop");
// TCCR0 = 0x1B;
Puls_count0++; //Puls_count[0] ++;
if(TM1_PWM_flag)
{
asm("nop");
if(Start_data[0])
{
asm("nop");
if(Start_data[0] < Accel_step)
{
asm("nop");
Start_data[0]=0;
}
else
{
asm("nop");
i= OCR3A;
if(i <= Const_T[0])
{
asm("nop");
i = Const_T[0];
Start_data[0] -=Accel_step;
}
else
{
asm("nop");
i= OCR3A;
Start_data[0] -=Accel_step;
Raise_data[0] ++;
if(Raise_data[0] < 10)
{
asm("nop");
}
else if(Raise_data[0] < 100)
{
asm("nop");
if(i >3)
i -= 3;
else
i --;
}
else if(Raise_data[0] < 200)
{
asm("nop");
if(i >2)
i -= 2;
else
i --;
}
else
{
asm("nop");
i --;
}
}
asm("nop");
OCR3A = i;
}
}
else if(End_data[0])
{
asm("nop");
if(End_data[0] <= Accel_step)
{
asm("nop");
End_data[0]=0;
Start_flag[0]=0;
}
else if(End_data[0] >150)
{
asm("nop");
End_data[0] -=Accel_step;
OCR3A += 1;
}
else if(End_data[0] >50)
{
asm("nop");
End_data[0] -=Accel_step;
OCR3A += 2;
if(OCR3A >240)
{
asm("nop");
OCR3A = 0xEE;
}
}
else
{
asm("nop");
End_data[0] -= Accel_step;
if(OCR3A >240)
{
asm("nop");
OCR3A = 0xEE;
}
asm("nop");
OCR3A += 3; //Const_T[0] +Accel_step;
}
}
else
{
asm("nop");
Start_flag[0]=0;
}
asm("nop");
TM1_PWM_flag=0;
}
else
{
asm("nop");
TM1_PWM_flag=1;
}
}
ISR(SIG_OUTPUT_COMPARE2) //Channel 2
{
uint8_t i;
asm("nop");
Puls_count1 ++; //Puls_count[1] ++;
if(TM2_PWM_flag)
{
asm("nop");
if(Start_data[1])
{
asm("nop");
if(Start_data[1] < Accel_step)
{
asm("nop");
Start_data[1]=0;
}
else
{
asm("nop");
i= OCR2;
if(i <= Const_T[1])
{
asm("nop");
i = Const_T[1];
Start_data[1] -=Accel_step;
}
else
{
//i= OCR2;
asm("nop");
Start_data[1] -=Accel_step;
Raise_data[1] ++;
if(Raise_data[1] < 10)
{
asm("nop");
}
else if(Raise_data[1] < 100)
{
asm("nop");
if(i >3)
i -= 3;
else
i --;
}
else if(Raise_data[1] < 200)
{
asm("nop");
if(i >2)
{
asm("nop");
i -= 2;
}
else
{
asm("nop");
i --;
}
}
else
{
asm("nop");
i --;
}
}
asm("nop");
OCR2 =i;
}
}
else if(End_data[1])
{
asm("nop");
if(End_data[1] <= Accel_step)
{
asm("nop");
End_data[1]=0;
Start_flag[1]=0;
}
else if(End_data[1] >150)
{
asm("nop");
End_data[1] -=Accel_step;
OCR2 += 1;
}
else if(End_data[1] >50)
{
asm("nop");
End_data[1] -=Accel_step;
OCR2 += 2;
if(OCR2 >240)
{
asm("nop");
OCR2 = 0xEE;
}
}
else
{
asm("nop");
End_data[1] -= Accel_step;
if(OCR2 >240)
{
asm("nop");
OCR2 = 0xEE;
}
asm("nop");
OCR2 += 3; //Const_T[0] +Accel_step;
}
}
else
{
asm("nop");
Start_flag[1]=0;
}
asm("nop");
TM2_PWM_flag=0;
}
else
{
asm("nop");
TM2_PWM_flag=1;
}
}
ISR(SIG_OUTPUT_COMPARE1A) //Channel 3
{
uint8_t i;
asm("nop");
Puls_count2 ++; //Puls_count[1] ++;
if(TM3_PWM_flag)
{
asm("nop");
if(Start_data[2])
{
asm("nop");
if(Start_data[2] < 4)
{
asm("nop");
Start_data[2]=0;
}
else
{
asm("nop");
i= OCR1A;
if(i <= Const_T[2])
{
asm("nop");
i = Const_T[2];
Start_data[2] -=Accel_step;
}
else
{
asm("nop");
Start_data[2] -=Accel_step;
Raise_data[2] ++;
if(Raise_data[2] < 30)
{
asm("nop");
}
else if(Raise_data[2] < 100)
{
asm("nop");
if(i >3)
{
asm("nop");
i -= 2;
}
else
{
asm("nop");
i --;
}
}
else if(Raise_data[2] < 200)
{
asm("nop");
if(i >2)
{
asm("nop");
i -= 3;
}
else
{
asm("nop");
i --;
}
}
else
{
asm("nop");
i --;
}
}
asm("nop");
if( i < 16)
{
asm("nop");
i=16;
}
asm("nop");
OCR1A =i;
}
}
else if(End_data[2])
{
asm("nop");
if(End_data[2] <= 3)
{
asm("nop");
End_data[2]=0;
Start_flag[2]=0;
}
else if(End_data[2] >100)
{
asm("nop");
End_data[2] -=Accel_step;
OCR1A += 1;
}
else if(End_data[2] >50)
{
asm("nop");
End_data[2] -=Accel_step;
OCR1A += 2;
if(OCR1A >240)
{
asm("nop");
OCR1A = 0xEE;
}
}
else
{
asm("nop");
End_data[2] -= Accel_step;
if(OCR1A >240)
{
asm("nop");
OCR1A = 0xEE;
}
asm("nop");
OCR1A += 2; //Const_T[0] +Accel_step;
}
}
else
{
asm("nop");
Start_flag[2]=0;
}
asm("nop");
TM3_PWM_flag=0;
}
else
{
asm("nop");
TM3_PWM_flag=1;
}
}
ISR(SIG_USART0_RECV)
{
asm("nop");
Recv_data[1] =Recv_data[0];
Recv_data[0] =UDR0;
if((Recv_data[0] == 0xAA) &&(Recv_data[0] == 0x55))
{
asm("nop");
Recv_number =2;
Recv_buff[0]=0xAA;
Recv_buff[1]=0x55;
/*if(Recv_data[1] <4)
{
Recv_buff[0] = Recv_data[1];
Recv_number =1;
} */
}
else
{
asm("nop");
Recv_buff[Recv_number] = Recv_data[0];
Recv_number++;
}
}
ISR(SIG_USART0_TRANS)
{
asm("nop");
if(Trans_number <13)
{
asm("nop");
UDR0 = Trans_buff[Trans_number];
Trans_number++;
}
}
SIGNAL(SIG_USART1_RECV)
{
//uchar temp0,i_t0;
asm("nop");
if(RS485_RCV_number <7)
{
asm("nop");
RS485_RCV_buff[RS485_RCV_number] = UDR1;
RS485_RCV_number++;
if(RS485_RCV_number==7)
{
asm("nop");
RS485_RCV_OK=1;
}
}
}
SIGNAL(SIG_USART1_TRANS)
{
asm("nop");
if(RS485_number <5)
{
asm("nop");
UDR1=RS485_send[RS485_number];
RS485_number++;
if(RS485_number ==5)
{
asm("nop");
receive485;
}
}
}
void main(void)
{
asm("nop");
Sys_Ini();
asm("nop");
wdt_enable(7);
asm("nop");
sei();
asm("nop");
while(1)
{
asm("nop");
COMM();
asm("nop");
wdt_enable(7);
asm("nop");
system();
asm("nop");
asm("nop");
asm("nop");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -