Прошу не пинать сильно и по возможности указать где черпать более правильную инфу. Использую книгу "Разработка уст-в на мк AVR. А.В.Белов.
Встала поблема при использовании конструкции if else. Привожу код созданый в CVAVR
#include <mega32a.h>
void main(void)
{
#define kn1 PINB.4
#define kn2 PINB.5
#define kn3 PIND.0
#define kn4 PIND.1
#define kn5 PIND.2
#define led1 PORTA.6
#define led2 PORTA.4
#define led3 PORTA.3
#define led4 PORTA.2
#define led5 PORTA.1
PORTA=0x00;
DDRA=0xFF;
PORTB=0xF0;
DDRB=0x0F;
PORTC=0xFF;
DDRC=0x00;
PORTD=0xFF;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
while (1)
{
if ( kn1 == 0 ) led1 = 1; else led1 =0;
if ( kn2 == 0 ) led1 = 1; else led1 =0;
}
}
Проблема ледующая: данная конструкция работает при использовании только одной конструкции if else. Если их более одной то происходят судеса. При нажатии kn1 светодиод led5 начинает мигать, а при нажатии kn2 светодиод led6 светит неприрывно до момента отпускания кнопки kn2. Проверял в протеусе и на мекетной плате результат идентичен.
Конечным результатом было желание получить следующий алгоритм работы:
1 при нажатии kn1 светит led1 пока держим кнопку
2 при нажатии kn2 засвечивается led2 и при отпускании кнопки kn2 светодиод led2 продолжает светить
3 кнопка kn3 для выключения светодиода led2
4 исключить возможность подавать команды kn1 при работе светодиода led2
Нашел на форуме
Atmega8 Включение Реле. сделал аналогично, не помогло.
Раздел: AVR