#include #include #define uint unsigned int #define uchar unsigned char uchar shebei; uchar caozuo; uchar class_dianji; uchar num_dianji; uchar data[5]; void port_init(void) { DDRB|=BIT(PB3);//一号直流电机PWM输出 DDRD|=BIT(PD4);//二号直流电机PWM输出 DDRD|=BIT(PD7);//三号直流电机PWM输出 DDRB|=0X03;//一号直流电机使能,方向 DDRC|=0X18;//二号直流电机使能,方向 DDRC|=0X60;//三号直流电机使能,方向 PORTA&=0X00; PORTB&=0X00; PORTC&=0X00; PORTD&=0X00; } void timer0_init(void) { TCCR0 = 0x00; //stop TCNT0 = 0x83; //set count OCR0 = 0xB4; //set compare //TCCR0 = 0x02; //start timer } void timer1_init(void) { TCCR1A=0x00; TCCR1B=0x00;//stop TCNT1H=0x00; TCNT1L=0x83;//set count OCR1AH=0x00; OCR1AL=0xB4; //set compare } void timer2_init(void) { TCCR2 = 0x00; //stop TCNT2 = 0x83; //set count OCR2 = 0xB4; //set compare //TCCR0 = 0x02; //start timer } void uart_init(void)//中断初始化 { UCSRB=0x00;//禁止接收 UCSRC=0x86;//8位数据位 UBRRH=0x00; UBRRL=0x33;//波特率9600 UCSRB=0x90; //DDRD&=~BIT(0); //SREG|=BIT(7); } void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); uart_init(); timer0_init(); timer1_init(); timer2_init(); MCUCR=0x00; GICR=0x00; TIMSK=0xD7; //timer interrupt sources 允许定时器0,1,2零匹配和溢出中断 SEI(); //re-enable interrupts //all peripherals are now initialized } #pragma interrupt_handler timer0_pipei:20 void timer0_pipei(void) { //compare occured TCNT0=OCR0 CLI(); PORTB|=BIT(PB3); SEI(); } #pragma interrupt_handler timer0_ovf_isr:10 void timer0_ovf_isr(void) { CLI(); TCNT0 = 0x83; //reload counter value PORTB&=~BIT(PB3); SEI(); } #pragma interrupt_handler timer1_pipei:7 void timer1_pipei(void) { CLI(); PORTD|=BIT(PD4); SEI(); } #pragma interrupt_handler timer1_ovf_isr:9 void timer1_ovf_isr(void) { CLI(); TCNT1H=0x00; TCNT1L=0x83; PORTD&=~BIT(PD4); SEI(); } #pragma interrupt_handler timer2_pipei:4 void timer2_pipei(void) { CLI(); PORTD|=BIT(PD7); SEI(); } #pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { CLI(); TCNT2 = 0x83; //reload counter value PORTB&=~BIT(PD7); SEI(); } #pragma interrupt_handler uart_rxc:12 void uart_rxc(void) { uchar i; SREG&=~BIT(7); data[0]=UDR; if(data[0]==0x55) { do { while(!(UCSRA&(1<