Мое упражнение №2
Задание такое:
На PA0 мигать светодиодом.
При получении 1 на PB0 зажечь светодиод PA6, иначе потушить PA6
При получении 0 на PB1 зажечь светодиод PA5, иначе потушить PA5
При PB0=1 и PB1=0 зажечь светодиод PA7, иначе потушить PA7
При симуляции в VMlab все ОК. Прошиваю - все светодиоды горят. Почему?
#include <mega16.h>
#include <delay.h>
void initialization(void){
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=Out
// State7=1 State6=1 State5=1 State4=T State3=T State2=T State1=T State0=0
PORTA=0xE0;
DDRA=0xE1;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
//PORTB=0x03;
//DDRB=0x00;
PORTB=0b00000000;
DDRB =0b00000011;
TCCR0 = 0x4;
}
void LedOff(void)
{
PORTA.0=1;
PORTA.5=1;
PORTA.6=1;
}
void main(void)
{
unsigned int Flag,i;
unsigned int Timer=0;
initialization();
LedOff();
while (1)
{
Flag=0;
if((TIFR&0x01))
{
TIFR = 0x01;
Timer=Timer+1;
if(Timer==10)
{
PORTA.0=~PORTA.0;
Timer=0;
}
}
if(PINB.0)
{
PORTA.6=0;
Flag=Flag+1;
}
else PORTA.6=1;
if(!PINB.1)
{
Flag=Flag+1;
PORTA.5=0;
}
else PORTA.5=1;
if(Flag==2) PORTA.7=0;
else PORTA.7=1;
};
}