Datentransfer von Port C an Port D

OP #467973
Lesenswert?

Habe ein Problem mit einem Datentransfer von Port C an Port D.
Zur Info: Ich habe einen ATmega 16 und habe ihn mit WinAVR Programmiert.
Wenn ich nun von Port C eine Zahl bekomme z.B. 15 oder so dann bekomme 
ich diesen nicht an Port D zurückgesand. Das JTAG habe ich abgeschaltet. 
Weiss langsam nicht mehr weiter.
Für Hilfreiche Tipps Danke ich im vorraus!!!

PS: Wenn in anderen Foren Tipps stehen dann her damit, habe schon 
gesucht aber nichts richtiges gefunden!

Hier mein Quelltext:

#include<avr/io.h>
#include<inttypes.h>
int main (void)
{

  MCUCSR = (1<<JTD);
  MCUCSR = (1<<JTD);
  DDRA = 0x00;     //port A input
  DDRB = 0xFF;      // port B output
  DDRC = 0x00;    // port C input
  //PORTC= 0x00;
  PINC=0x00;
  DDRD = 0xFF;


  int x = 0;
  unsigned char Bsend;
  int B,C,g,Pcdaten;
  TWCR = (0<<TWEN);
  ASSR = (0<<AS2);
  ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
  ADMUX = 0;
  ADMUX = (1<<REFS1) | (1<<REFS0);
  // Select pin ADC0 using MUX
  // Activate ADC with Prescaler 128 -->16Mhz/128 = 125kHz

  //Start conversion
    ADCSRA |= (1<<ADSC);
  // wait until converstion completed
   while (ADCSRA & (1<<ADSC) )

  for (;;) {
  ADCSRA |= (1<<ADSC);
  while (ADCSRA & (1<<ADSC) )
    // get converted value
    x = ADCW;

    x = x>>2;          //Shiften um 2 Stellen nach rechts

   Bsend = x & 0b00001111;
   PORTB = Bsend;


  Bsend = x & 0b11110000;
  Bsend=Bsend>>4;
  Bsend = Bsend + 128;
  PORTB = Bsend;

  Pcdaten = PORTC;
  PORTD=PORTC;
 // Pcdaten = Pcdaten*10;
 //  Pcdaten = 200;

   if (PIND &b00000010)      //pind.2==1
   {
      Pcdaten = Pcdaten + 10;
  }

   if (PIND &b00000100)        //pind.3==1
   {
      Pcdaten = Pcdaten - 10;
  }


  C = 500;

    B = C - Pcdaten;

    g = 0;

// Anschalten der LED
  //PORTD &= ~(1<<PD5);
   PORTD =0b01111111;

   while (g < Pcdaten)
  {
   asm volatile("nop\n\t"
             ::);

       g = g + 1;
  }
 // Ausschalten der LED

PORTD=0;
   //PORTD |= (1<<PD5);
   PORTD = 0b00000000;
   g = 0;

  while (g < B)
  {
   asm volatile("nop\n\t"
             ::);

       g = g + 1;
  }

  }
  ADCSRA &= ~(1<<ADEN);

int i;
i=0;

  for(i=0;i<255;i++)
  {

  asm volatile("nop\n\t"
             ::);
  PORTD=i;
}
}

Gast #467980
Lesenswert?

PORTC => Ausgangsregister
PINC => Eingangsregister
Du hast das ein paarmal durcheinandergebracht, glaub' ich.

Pcdaten = PORTC;
  PORTD=PORTC;

Hier liest du das Ausgangsregister ein, sollte wohl eher PINC heißen, 
oder?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren