Спойлер
#include <mega2560.h>void main(void) {
PORTB=0xFF;
DDRB=0xFF;
PORTD=0x00;
DDRD=0x00;
while (1)
{
while (PIND.0==1) {}
if (PINB.0==1)
{ PORTB.0=0;
}
else
{ PORTB.0=1;
}
while (PIND.0==0) {}
};
}
Да с++ и Маи. Всмысле лихо завернул? Слишком сложно иди что перепробовал по разному писать код смысл тот же этот код на одну кнопку а так их 12. И надо все это заставить работать . Даже если код на одну кнопку при подключении еще кнопок они тоже включают диод м выключают.ploop писал(а):Лихо вы завернули
я готов бесплатно сделать за вас любую программу по вашему курсу обучения, если вы приведете мне скан страницы книги по С++, где бы давалось объяснение такого финта, как у вас в программе: PIND.0. то есть уточняю: после точки стоит не идентификатор, а цифровая константа.Braimik писал(а):Да с++ и Маи.
В том смысле, что C (Си) и C++ грубо говоря разные языки, хоть и с одинаковым синтаксисом. Последний требует больших аппаратных ресурсов (так как заточен на ООП), и в таких архитектурах, как AVR8 не используется.Braimik писал(а):Всмысле лихо завернул?
Не мудрено при таком потоке сознанияBraimik писал(а):не могу никак заставить программму делать что мне надо
Braimik писал(а):Слишком сложно иди что перепробовал по разному писать код смысл тот же этот код на одну кнопку а так их 12.
Да я в курсе, но предлагаете написать ТСу класс зажигания светодиода?ARV писал(а):для статических экземпляров самописных классов оверхед С++ очень невелик и вполне может быть приемлемым даже для atmega8
а почему бы и нет? с методами void set_state(bool on) и bool get_state(void)ploop писал(а):Да я в курсе, но предлагаете написать ТСу класс зажигания светодиода?![]()
Честно признались - хорошо.Braimik писал(а):Kavka, мне нужно чтобы при нажатии на pd0 загорелся и горел светодиод на pb0 и т.д. до pd7 и pb7. Признаюсь в неопытности печатанья кода.
Код: Выделить всё
while (1) {
if (PIND.0 == 1)
PORTB.0 = 0;
else
PORTB.0 = 1;
}
Код: Выделить всё
while (1) {
if (PIND & (1<<5) == (1<<5);
PORTB &= ~(1<<5);
else
PORTB |= (1<<5);
}Код: Выделить всё
void main(void){
DDRD = 0;
PORTD = 0xFF;
DDRB = 0xFF;
PORTB = 0;
for(;;){
PORTB = ~PIND;
}
}Код: Выделить всё
void main(void){
for(PORTB=DDRD=~(PORTD=DDRB=0xFF);;) PORTB =~PIND;
}ARV писал(а):а так:
Код: Выделить всё
void main(void){
for(DDRD = PORTB = 0, DDRB = PORTD = 0xFF;;PORTB = ~PIND);
}Код: Выделить всё
for(DDRD = 0, PORTB = 0, DDRB = 0xFF, PORTD = 0xFF;;PORTB = ~PIND);Код: Выделить всё
for(DDRB = 0xFF, PORTD = 0xFF;;PORTB = ~PIND);WiseLord писал(а):А так будет ещё быстрее (из-за volatile-ности портов):
Код: Выделить всё
// 25 for(DDRD = PORTB = 0, DDRB = PORTD = 0xFF;;PORTB = ~PIND);
LDI R16, 0
OUT 0x18, R16
OUT 0x11, R16
LDI R16, 255
OUT 0x12, R16
OUT 0x17, R16
??main_0:
IN R16, 0x10
COM R16
OUT 0x18, R16
RJMP ??main_0
// 26 for(DDRD = 0, PORTB = 0, DDRB = 0xFF, PORTD = 0xFF;;PORTB = ~PIND);
LDI R16, 0
OUT 0x11, R16
OUT 0x18, R16
LDI R16, 255
OUT 0x17, R16
OUT 0x12, R16
??main_0:
IN R16, 0x10
COM R16
OUT 0x18, R16
RJMP ??main_0