#include <iom16v.h>
#include <macros.h>
int i=0;
int j=0;
int p=1;
unsigned int sec;
unsigned int flag;
//*******************延时 us
void delay_us(unsigned int t)
{
do
t--;
while(t>1);
}
//*******************延时 ms
void delay_ms(unsigned int t)
{
while(t!=0)
{
delay_us(1142);
t--;}
}
#pragma interrupt_handler INT_0:2
void INT_0(void)
{
PORTC=0XFF;
TCNT1H=0Xf9;
TCNT1L=0Xe6;
sec=0;
i=1;
if((PORTA&0xff)==~0x31) delay_ms(280);
PORTC=~0x00;
PORTA=~0x31;
//delay_ms(300);
}
#pragma interrupt_handler INT_1:3
void INT_1()
{
TCNT1H=0Xf9;
TCNT1L=0Xe6;
sec=0;
i=1;
PORTA=~0x13;
PORTC=~0x00;
delay_ms(300);
}
#pragma interrupt_handler INT_2:19
void INT_2()
{
PORTC=0xff;
PORTA=~0x33; //小车后退
delay_ms(1500);
delay_ms(1200);delay_ms(1000);
i=0;
j=0;
p=0;
//GICR=0XC0;
}
/*timer1溢出中断程序*/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
TCNT1H=0Xf9;
TCNT1L=0Xe6;
if(flag)
{
sec++;
if(sec>100)
{
PORTC=~0x00;
PORTA=~0x33; //小车后退
//i=0;
TCCR1B=0X00; //禁止TIMER1
delay_ms(1500);
delay_ms(1200);delay_ms(1000);
j=1;
}
}
}
void main()
{
flag=0;
DDRA=0XFF;
DDRC=0XFF;
DDRB=0Xff;
DDRD=0XFF;
PORTA=0XFF;
PORTB=0X00;
PORTC=0XFF;
PORTD=0XFF;
TIMSK=0X04; //溢出中断使能
TCCR1B=0X00; //禁止TIMER1
TCNT1H=0XF9;
TCNT1L=0XE6; //使用100ms定时
TCCR1A=0X00;
//TCCR1B=0X04; //256分频
//TCCR1C=0X00;
MCUCR=0X00; //低电平触发
MCUCSR=0x40;
GICR=0XE0;
SEI();
flag=1;
while(1)
{
PORTA=~0x31; //左后退,有前进
PORTC=0XFF;
//delay_ms(8000);
//PORTA=~0x11; //左后退,有前进
//PORTC=0XFF;
//delay_ms(1100);
//PORTA=~0x31; //左后退,有前进
//PORTC=0XFF;
while(i)
{
TCCR1B=0X04; //256分频
PORTA=~0x11; //小车前进
PORTC=~0x03;
if(j)
{p=1;
DDRB=0Xff;
TCCR1B=0X00; //禁止TIMER1
PORTC=0xff;
PORTA=~0x13;
delay_ms(1000);
PORTA=~0x11; //小车前进
delay_ms(1500);
delay_ms(1200); delay_ms(1000);
PORTA=~0x00; //停车
PORTC=~0x12;
delay_ms(2500);delay_ms(2000);
PORTC=~0x10;
DDRB=0X00;
while(p);
}
}
}
}
评论0