Witam,
Próbuję się "przesiąść" z Bascoma na C dla AVR. W prostym programie próbuję odczytać stan wejść PA0, PA1. Przycisk zwiera do masy.
Dlaczego w symulacji AVR Studio funkcja if od razu jest wykonywana?:
Czy POTRA0, POTRA1, oraz PINA0, PINA1 nie powinny być ustawione po tych rozkazach?
Program wygląda tak:
Próbuję się "przesiąść" z Bascoma na C dla AVR. W prostym programie próbuję odczytać stan wejść PA0, PA1. Przycisk zwiera do masy.
Dlaczego w symulacji AVR Studio funkcja if od razu jest wykonywana?:
if (!(PINA & 0x01))Czy POTRA0, POTRA1, oraz PINA0, PINA1 nie powinny być ustawione po tych rozkazach?
/*PA0, PA0, linie wejscia + podciaganie R*/
DDRA = 0x00;
PORTA = 0x03;
Program wygląda tak:
#define F_CPU 1000000 //1MHz dla delay.h
#include <avr/io.h> //OPIS REJESTROW
#include <avr/delay.h> //262.14 ms / (F_CPU w MHz).
/*********************************************************/
int opuz100ms(unsigned char licz) //licz 0-255
{
for(;licz>0;licz--)
{
_delay_ms(100); //262.14 ms / (F_CPU w MHz).
}
}
int main(void)
{
/*Wszystkie linie PORTD wyjscia*/
DDRD = 0xff;
PORTD = 0x00;
/*Wszystkie linie PORTB wyjscia*/
DDRB = 0xff;
PORTB = 0x00;
/*PA0, PA0, linie wejscia + podciaganie*/
DDRA = 0x00;
PORTA = 0x03;
while(1)
{
if (!(PINA & 0x01)) //czy pin0 jest 0?
{
_delay_ms(80); //drgania stykow
if (!(PINA & 0x01))
{
PORTB =0x0f;
while (!(PINA & 0x01)) {} //czy pin0 jest juz 1?
_delay_ms(80); //drgania stykow
}
}
if (!(PINA & 0x02)) //czy pin1 jest 0?
{
_delay_ms(80); //drgania stykow
if (!(PINA & 0x02))
{
PORTB =0xf0;
while (!(PINA & 0x02)) {} //czy pin1 jest juz 1?
_delay_ms(80); //drgania stykow
}
}
}
}
