Jag har lagt 5V på PORTD:s 0:te pinne.
Varför vägrar min Atmega att skicka ut en etta på 0:te pinnen på PORTB med denna tillsynes enkla kod?
Går igenom kompilatorn utan fel.
#include <avr/io.h>
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))
#define SET_BIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
void main(void)
{
SET_BIT(DDRB, PB0); // Du måste säga att PB0 ska vara utgång.
while (1)
{
if (CHECKBIT(PIND, PD0))
{
SET_BIT(PORTB, PB0);
}
}
}
Men om SET_BIT(DDRB, PB0); anger att en pinne på porten skall vara utgång, hur sätter man då att den skall vara ingång? Och varför behövs inte det på PORTD, PD0 i detta fall?
Ändrar man inte något i registret DDRB så är alla bitar i registret satta till 0:or, som startvärde. Om en bit är 0 betyder det att motsvarande i/o-pinne är en ingång. Därför behöver man bara ändra i DDRB om man vill att någon pinne ska vara utgång.