пишу на 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)
{
};
}
вроде всё должно работать, но на практике порты не меняются