Problem att kolla en pinne på Atmega8

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
mrhedin
Inlägg: 114
Blev medlem: 3 maj 2005, 19:46:24
Ort: Trollhättan/Kiruna
Kontakt:

Problem att kolla en pinne på Atmega8

Inlägg av mrhedin »

Hej!

Jag blir lite knas på det här problemet...

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.

Kod: Markera allt

#include <avr/io.h>
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))
void main(void)
{
   while (1)
   {
      if(CHECKBIT(PORTD,PIND0))
         {
            sbi(PORTB,0);
         }
   }
}
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Med makros:

Kod: Markera allt

#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);
        }
    }
}
eller utan makros:

Kod: Markera allt

#include <avr/io.h>

void main(void)
{
    DDRB |= _BV(PB0);

    while (1)
    {
        if (PIND & _BV(PD0))
        {
            PORTB |= _BV(PB0);
        }
    }
}
Det är en smaksak hur man väljer att skriva.
mrhedin
Inlägg: 114
Blev medlem: 3 maj 2005, 19:46:24
Ort: Trollhättan/Kiruna
Kontakt:

Inlägg av mrhedin »

Tackar! Det funkar...

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?
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Ä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.
Skriv svar