пишу на AVR Studio Atmega 32
вот код:
- Код: Выделить всё
- #include <avr/io.h>
 #include <avr/interrupt.h>
 #include <avr/pgmspace.h>
 #include <util/delay.h>
 #define BACKWARD ((0 << PC0)|(1 << PC1)|(1 << PC2)|(0 << PC3))
 #define FORWARD ((1 << PC0)|(0 << PC1)|(0 << PC2)|(1 << PC3))
 #define STOP ((1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3))
 #define MOTOR_PORT PORTC
 unsigned char u;
 ISR(ADC_vect)
 {
 if (ADCH == 0)
 {
 MOTOR_PORT = STOP;
 DDRB = 1 << PB0;
 PORTB = 1 << PB0;
 }
 else
 {
 DDRB = 0 << PB0;
 MOTOR_PORT = FORWARD;
 ADMUX |= (0 << MUX0);//объявляем порт считывания adc0
 ADCSRA |= (1 << ADSC);//запускаем пробразование
 
 while(ADIF == 0);//ждём пока завершится преобразование
 
 OCR1A = ADCH;//считываем старшие биты и подаём мощность на моторы пропорциональна напр на ацп
 
 
 ADMUX |= (1 << MUX0);//меняем порт на adc1
 ADCSRA |= (1 << ADSC);
 
 while(ADIF == 0);
 
 OCR1B = ADCH;
 
 }
 }
 void init()
 {
 //////////PortC Initialization////////////////////////
 DDRC = (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
 PORTC = (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
 //-----------------------------------------------------
 //////////PortD Initialization/////////////////////////
 DDRD = (1 << PD4)|(1 << PD5);
 PORTD = 0;
 //-----------------------------------------------------
 //////////Timer 1 Initialization//////////////////////
 TCCR1A = (1 << COM1A1)|(1 << COM1B1)|(1 << WGM10);
 TCCR1B = (1 << WGM12)|(1 << CS10);
 TCNT1 = 0;
 OCR1A = 0;
 OCR1B = 0;
 //-----------------------------------------------------
 //////////ADC Intitialization////////////////////////
 ADMUX = (1 << ADLAR)|(1<<MUX0);
 ADCSRA = (1 << ADEN)|(0 << ADATE)|(1 << ADSC)|(1 << ADIE)|(3 << ADPS0);
 //----------------------------------------------------
 MOTOR_PORT = STOP;
 
 };
 int main(void)
 {
 init();
 sei();
 while(1)
 {
 
 };
 }
вроде всё должно работать, но на практике порты не меняются



