программирование в winavr
программирование в winavr
всем добрый день у меня такая проблема мне необходима объединить три программы в одну я пробовал объединить но у меня одно действия мешает другому как так сделать чтобы они работали независимо
программа сделана под игрушечную машинку на ней стоит 1tsop-ы для объезда препятствий 2радиоуправление 3датчик освещенности в пространстве
хотелось сделать так если нет пару секунд команд от пульта он просто едет и объезжает препятствия но датчик срабатывал всегда независимо от того есть команды от пульта или нет
есть код на cи для winavr но он в ужасном состоянии его надо дорабатывать в программирование я только начинаю осваивать очень прошу помочите
#include <avr/io.h>
#include <util/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные
for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}
volatile int modulation=200; // длина всей посылки (можно менять)
unsigned long int t_1 = 9990;
SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала//
{
if(modulation<20) //длина пачки//
{
PORTB ^= 0b00000001;
}
else
{
PORTB &= 0b00000000;
}
if(modulation<200) //для счета длины посылки
{modulation++;}
else
{modulation=0;}
TCNT0 = 0;
}
void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}
int main(void) //основная программа
{
DDRD ^= 0b00000001;/*фары*/
DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-светодиод */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, индикаторный светодиод 2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 3 */
/* PB5 */
/* PB6 */
/* PB7 */
DDRC &= (~(1<<0)); /* датчик света в пространстве */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */
DDRD &= (~(1<<1)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */
PORTD |= (1<<1); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<6); /* PD6 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */
_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)
init_timer0(); //инициализация таймера!!!
while(1) /* бесконечный цикл */
{
/* ---------- моторы вперед ---------- */
PORTC |= (1<<1); /* установить "1" на линии 1 порта C */
PORTC &= (~(1<<2)); /* установить "0" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4)); /* установить "0" на линии 4 порта C */
/* ---------- */
/* проверка TSOP 1 */
if( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{
PORTB |= (1<<1); /* установить "1" на PB1, включить индикаторный светодиод */
/* ------- левый мотор назад, правый мотор вперед ------- */
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4));
/* ---------- */
_delay_ms(1000); /* задержка */
PORTB &= (~(1<<1)); /* установить "0" на PB1, выключить индикаторный светодиод */
}
/* проверка TSOP 2 */
if( !(PIND & (1<<6)) ) /* проверить "0" на PD6 */
{
PORTB |= (1<<2); /* установить "1" на PB2, включить индикаторный светодиод */
/* ---------- моторы назад ---------- */
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC &= (~(1<<3)); /* установить "0" на линии 3 порта C */
PORTC |= (1<<4); /* установить "1" на линии 4 порта C */
_delay_ms(175);
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4));
_delay_ms(700);
/* ---------- моторы назад ---------- */
PORTB &= (~(1<<2)); /* установить "0" на PB2, выключить индикаторный светодиод */
}
/* проверка TSOP 3 */
if( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{
PORTB |= (1<<3); /* установить "1" на PB3, включить индикаторный светодиод */
/* ------- левый мотор вперед, правый мотор назад ------- */
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4));
/* ---------- */
_delay_ms(1000); /* задержка */
PORTB &= (~(1<<3)); /* установить "0" на PB3, выключить индикаторный светодиод */
}
/* ---- датчик света в пространстве ---- */
if( !(PINC & (1<<0)) ) /* проверить "0" на PD5 */
{
PORTD &= 0b00000001; /* установить "0" на линии 0 порта D */
}
else
{
PORTD ^= 0b00000001; /* установить "1" на линии 0 порта D */
}
/* ------РАДИОУПРАВЛЕНИЕ----------- */
{
if( (PIND & (1<<PIND1)) && /* проверить "1" на линии 1 порта D */
(PIND & (1<<PIND2)) && /* проверить "1" на линии 2 порта D */
(PIND & (1<<PIND3)) && /* проверить "1" на линии 3 порта D */
(PIND & (1<<PIND4)) ) /* проверить "1" на линии 4 порта D */
{
t_1 = t_1 + 1;
}
else
{
if ( PIND & (1<<PIND1) ) /* проверить "1" на линии 1 порта D */
{ // ---------- включаем моторы вперед ----------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта D
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта D
PORTC |= _BV(PC3); // установить "1" на линии 3 порта D
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта D
}
else
{ PORTC &= ~_BV(PC2); } /* установить "0" на линии 1 порта C */
/* ---------- */
if ( PIND & (1<<PIND3) ) /* проверить "1" на линии 2 порта D */
{ // ---------- отъезд назад ----------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта D
PORTC |= _BV(PC2); // установить "1" на линии 2 порта D
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта D
PORTC |= _BV(PC4); // установить "1" на линии 4 порта D
}
else
{ PORTC &= ~_BV(PC3); } /* установить "0" на линии 2 порта C */
if ( PIND & (1<<PIND4) ) /* проверить "1" на линии 3 порта D */
{ // ---------- поворот ----------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта D
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта D
PORTC |= _BV(PC3); // установить "1" на линии 3 порта D
}
else
{ PORTC &= ~_BV(PC4); } /* установить "0" на линии 4 порта C */
/* ---------- поворот ---------- */
if ( PIND & (1<<PIND5) ) /* проверить "1" на линии 5 порта D */
{ PORTC &= ~_BV(PC1); // установить "0" на линии 0порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
}
else
{ PORTC &= ~_BV(PC4); } /* установить "0" на линии 4 порта C */
t_1 = 0;
}
}
}
} /* закрывающая скобка бесконечного цикла */
программа сделана под игрушечную машинку на ней стоит 1tsop-ы для объезда препятствий 2радиоуправление 3датчик освещенности в пространстве
хотелось сделать так если нет пару секунд команд от пульта он просто едет и объезжает препятствия но датчик срабатывал всегда независимо от того есть команды от пульта или нет
есть код на cи для winavr но он в ужасном состоянии его надо дорабатывать в программирование я только начинаю осваивать очень прошу помочите
#include <avr/io.h>
#include <util/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные
for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}
volatile int modulation=200; // длина всей посылки (можно менять)
unsigned long int t_1 = 9990;
SIGNAL(SIG_OVERFLOW0) //функция модуляции сигнала//
{
if(modulation<20) //длина пачки//
{
PORTB ^= 0b00000001;
}
else
{
PORTB &= 0b00000000;
}
if(modulation<200) //для счета длины посылки
{modulation++;}
else
{modulation=0;}
TCNT0 = 0;
}
void init_timer0 () //настройка таймера 0
{cli();
TCNT0 = 111;
TCCR0 = 1;
TIMSK = 1;
sei();
}
int main(void) //основная программа
{
DDRD ^= 0b00000001;/*фары*/
DDRB |= (1<<0); /* PB0 сконфигурировать как выход, ИК-светодиод */
DDRB |= (1<<1); /* PB1 сконфигурировать как выход, индикаторный светодиод 1 */
DDRB |= (1<<2); /* PB2 сконфигурировать как выход, индикаторный светодиод 2 */
DDRB |= (1<<3); /* PB3 сконфигурировать как выход, индикаторный светодиод 3 */
/* PB5 */
/* PB6 */
/* PB7 */
DDRC &= (~(1<<0)); /* датчик света в пространстве */
DDRC |= (1<<1); /* PC1 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<2); /* PC2 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<3); /* PC3 сконфигурировать как выход, драйвер двигателя */
DDRC |= (1<<4); /* PC4 сконфигурировать как выход, драйвер двигателя */
/* PC5 */
/* PC6 */
/* PC7 */
DDRD &= (~(1<<1)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */
PORTD |= (1<<1); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<2); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<3); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<4); /* PD4 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<5); /* PD5 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<6); /* PD6 установить "1", включаем подтягивающий резистор */
PORTD |= (1<<7); /* PD7 установить "1", включаем подтягивающий резистор */
_delay_ms(100); //сброс ложного сигнала тсопа при включении (можно убрать)
init_timer0(); //инициализация таймера!!!
while(1) /* бесконечный цикл */
{
/* ---------- моторы вперед ---------- */
PORTC |= (1<<1); /* установить "1" на линии 1 порта C */
PORTC &= (~(1<<2)); /* установить "0" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4)); /* установить "0" на линии 4 порта C */
/* ---------- */
/* проверка TSOP 1 */
if( !(PIND & (1<<5)) ) /* проверить "0" на PD5 */
{
PORTB |= (1<<1); /* установить "1" на PB1, включить индикаторный светодиод */
/* ------- левый мотор назад, правый мотор вперед ------- */
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4));
/* ---------- */
_delay_ms(1000); /* задержка */
PORTB &= (~(1<<1)); /* установить "0" на PB1, выключить индикаторный светодиод */
}
/* проверка TSOP 2 */
if( !(PIND & (1<<6)) ) /* проверить "0" на PD6 */
{
PORTB |= (1<<2); /* установить "1" на PB2, включить индикаторный светодиод */
/* ---------- моторы назад ---------- */
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC &= (~(1<<3)); /* установить "0" на линии 3 порта C */
PORTC |= (1<<4); /* установить "1" на линии 4 порта C */
_delay_ms(175);
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4));
_delay_ms(700);
/* ---------- моторы назад ---------- */
PORTB &= (~(1<<2)); /* установить "0" на PB2, выключить индикаторный светодиод */
}
/* проверка TSOP 3 */
if( !(PIND & (1<<7)) ) /* проверить "0" на PD7 */
{
PORTB |= (1<<3); /* установить "1" на PB3, включить индикаторный светодиод */
/* ------- левый мотор вперед, правый мотор назад ------- */
PORTC &= (~(1<<1)); /* установить "0" на линии 1 порта C */
PORTC |= (1<<2); /* установить "1" на линии 2 порта C */
PORTC |= (1<<3); /* установить "1" на линии 3 порта C */
PORTC &= (~(1<<4));
/* ---------- */
_delay_ms(1000); /* задержка */
PORTB &= (~(1<<3)); /* установить "0" на PB3, выключить индикаторный светодиод */
}
/* ---- датчик света в пространстве ---- */
if( !(PINC & (1<<0)) ) /* проверить "0" на PD5 */
{
PORTD &= 0b00000001; /* установить "0" на линии 0 порта D */
}
else
{
PORTD ^= 0b00000001; /* установить "1" на линии 0 порта D */
}
/* ------РАДИОУПРАВЛЕНИЕ----------- */
{
if( (PIND & (1<<PIND1)) && /* проверить "1" на линии 1 порта D */
(PIND & (1<<PIND2)) && /* проверить "1" на линии 2 порта D */
(PIND & (1<<PIND3)) && /* проверить "1" на линии 3 порта D */
(PIND & (1<<PIND4)) ) /* проверить "1" на линии 4 порта D */
{
t_1 = t_1 + 1;
}
else
{
if ( PIND & (1<<PIND1) ) /* проверить "1" на линии 1 порта D */
{ // ---------- включаем моторы вперед ----------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта D
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта D
PORTC |= _BV(PC3); // установить "1" на линии 3 порта D
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта D
}
else
{ PORTC &= ~_BV(PC2); } /* установить "0" на линии 1 порта C */
/* ---------- */
if ( PIND & (1<<PIND3) ) /* проверить "1" на линии 2 порта D */
{ // ---------- отъезд назад ----------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта D
PORTC |= _BV(PC2); // установить "1" на линии 2 порта D
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта D
PORTC |= _BV(PC4); // установить "1" на линии 4 порта D
}
else
{ PORTC &= ~_BV(PC3); } /* установить "0" на линии 2 порта C */
if ( PIND & (1<<PIND4) ) /* проверить "1" на линии 3 порта D */
{ // ---------- поворот ----------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта D
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта D
PORTC |= _BV(PC3); // установить "1" на линии 3 порта D
}
else
{ PORTC &= ~_BV(PC4); } /* установить "0" на линии 4 порта C */
/* ---------- поворот ---------- */
if ( PIND & (1<<PIND5) ) /* проверить "1" на линии 5 порта D */
{ PORTC &= ~_BV(PC1); // установить "0" на линии 0порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
}
else
{ PORTC &= ~_BV(PC4); } /* установить "0" на линии 4 порта C */
t_1 = 0;
}
}
}
} /* закрывающая скобка бесконечного цикла */
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: программирование в winavr
это не код, а УЖОС!!!!
задержки пустыцми циклами делать нельзя - оптимизатор это выбросит и задержка будет нулевая
макрос SIGNAL не рекомендуется к применению, хотя его поддержка оставлена для совместимости со старыми программами
просто тихий ужас... хотя работать будет
подобного там много, точнее, весь код такой. если его причесать, то хоть можно будет понять, что к чему, а в таком виде...
Код: Выделить всё
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные
for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}Код: Выделить всё
SIGNAL(SIG_OVERFLOW0) Код: Выделить всё
DDRD &= (~(1<<1)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<2)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<3)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<4)); /* PD4 сконфигурировать как вход, канал радиоуправления */
DDRD &= (~(1<<5)); /* PD5 сконфигурировать как вход, TSOP 1 */
DDRD &= (~(1<<6)); /* PD6 сконфигурировать как вход, TSOP 2 */
DDRD &= (~(1<<7)); /* PD7 сконфигурировать как вход, TSOP 3 */подобного там много, точнее, весь код такой. если его причесать, то хоть можно будет понять, что к чему, а в таком виде...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: программирование в winavr
я же говорил в программировании я начинающий код та работает но не так как надо когда его включаешь он должен ехать а он просто стоит но тсопы у него реагируют датчик освещенности у него вообще не работает ни как не могу разобратся 
убрал void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
и программа вообще не хочет компелироватся
убрал void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
и программа вообще не хочет компелироватся
- Danko
- Сверлит текстолит когтями
- Сообщения: 1287
- Зарегистрирован: Пн окт 13, 2008 11:45:54
- Откуда: РФ, Крым, г.Бахчисарай
- Контактная информация:
Re: программирование в winavr
alex91, во первых большие исходники оформляются вложением, а во вторых тема по WinAVR уже есть.
два нарушения правил форума.

два нарушения правил форума.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Re: программирование в winavr
alex91 писал(а):я же говорил в программировании я начинающий
Именно по этому и не получается сделать такую сложную программу - для этого нужно уметь правильно структурировать части программы. Во-первых здесь весь код свален в одну кучу в main'е и как результат в нём хрен чё найдёшь. Нужно как минимум вынести в отдельные функции управление моторами - этот код многократно дублируется(вообще нужно отучатся использовать copy-paste при написании кода - для этого есть функции и директивы препроцессора) и при этом он не зависит от остального кода. То же самое скорее всего относится и к радиоуправлению.
Хотя комментариев в программе много, но реально нужных из них всего два-три. В них не нужно писать "установить "0" на линии 1 порта C" - это и так видно из кода. Так же для блоков типа "/* ------- левый мотор назад, правый мотор вперед ------- */" обычно используются функции, а не комментарии. Хотя например "/* ------РАДИОУПРАВЛЕНИЕ----------- */" и т.п. можно и не выносить в отдельную функцию.
Кроме того делай форматирование кода по-нормальному. Внутри блоков if, else, for и т.д. из одного оператора не обязательно ставить {}. А в случае блоков, состоящих из нескольких строк надо делать отступы:
Код: Выделить всё
int func1(int a,char b)
{
if (a<5) {
return b;
} else {
int c;
for (c=0;c<b;c++) {
if (c>a) break;
}
return c;
}
}
Мне чтобы прочитать код и первого поста потребовалось скопировать его в текстовый редактор и привести к нормальному виду. И только после этого я смог хоть что-нибудь в нём понять.
Ну и на форуме для кода есть специальный тег [ code ].
Ну и похоже что для такой задачи стоит использовать не последовательно выполняющийся в цикле код с задержками в секунды, а структуру с программными таймерами и обработкой событий от них и других устройств в основном цикле.
alex91 писал(а):#include <avr/io.h>
#include <util/delay.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 8000000UL // 8 MHz
Константу F_CPU надо указывать до инклюдов - она в h-файлах тоже может использоваться.
alex91 писал(а):убрал void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
и программа вообще не хочет компелироватся
Значит неправильно убрал - эта функция не используется нигде.
Danko писал(а):тема по WinAVR уже есть
Там вопросы по работе компилятора, а тут - проблемы с написанием кода. С тем же успехом все темы здесь можно отнести к темам про компиляторы - в них во всех программа на чём-нибудь компилится.
Re: программирование в winavr
спасибо за ответы
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: программирование в winavr
А ещё сразу отвыкайте писать такие комментарии
Лишние комментарии только мешают читать код. Вся необходимая информация уже есть в именах PIND, PIND4.
Или уже тогда будьте последовательны и пишите ещё и такие
p.s.
#include <avr/iom8.h>
не нужно. При правильном ключе компилятору -mmcu=atmega8 это будет сделано автоматически из <avr/io.h>
Код: Выделить всё
(PIND & (1<<PIND4)) ) /* проверить "1" на линии 4 порта D */Или уже тогда будьте последовательны и пишите ещё и такие
Код: Выделить всё
t_1 = t_1 + 1; /* прибавить 1 к t_1 */p.s.
#include <avr/iom8.h>
не нужно. При правильном ключе компилятору -mmcu=atmega8 это будет сделано автоматически из <avr/io.h>
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Re: программирование в winavr
Тема оформлена с нарушениями.
Исходный код такого размера оформляется вложением.
Тема по WinAVR есть в начале раздела.
Закрыто.
Исходный код такого размера оформляется вложением.
Тема по WinAVR есть в начале раздела.
Закрыто.
Оптимизм х (Опыт + Знания) = const