IR_Code

OP #533768
Lesenswert?
• ▲
▼
Hallo

Habe eine Code der regelmäßig mit Polling die Pins abfrägt realisiert 
mit if Schleifen ist dies auch mit der Switch()  Funktion möglich


--------------------------------------------


#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 1000000UL     /* Quarz mit 1 Mhz  */
#endif
//#include <avr/delay.h>      /* definiert _delay_ms() ab avr-libc 
Version 1.2.0 */
#include <util/delay.h>     /* in der aktuellen Version in util/ */



void uart_init()
{
    // UART Transmitter ein
    // Data mode 8N1, asynchron 4800 1MHZ

    UBRRH  = 0;                   // Highbyte ist 0
    UBRRL  = 207;                  // Lowbyte ist 12 ( dezimal )
    UCSRB  = (1 << TXEN)|( 1 << RXEN );        // UART TX RX einschalten
    UCSRC  =(1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);



}

void uart_putc(unsigned char c)
{


      while (!(UCSRA & (1<<UDRE)))  //warten bis senden möglich ist
      {
      }
      UDR = c;

           //Ausgabe des Zeichens über UDR
}

unsigned char uart_receiver(void)
{
  while (!(UCSRA & (1<<RXC)));   /* Wait for incomming data */
  return UDR;
}

void uart_puts (char *s)
{
  //schleife wird so lange ausgeführt bis kein Zeichen mehr kommt
    while (*s)
    {

        uart_putc(*s);
        s++;

    }
}


int main(void)
{

  DDRC = 0x00;
  DDRB = 0x00;
  unsigned char statusbyte = 0x00;

     uart_init();
  int i=0;
//  int n=0;
//  int s=0;

  //int x;

for(;;)
{
  //x++;



  switch(!PINC)

  {
    case PINC = 0x01:  statusbyte = 0x02;

               break;
    case 0x02:   statusbyte = 0x02;

          break;
    case 0x04:   statusbyte = 0x03;

          break;
    case 0x08:   statusbyte = 0x04;

          break;
    default:  break;
  }


  switch(PINB)

  {
    case 0x01:  statusbyte = 0x07;

          break;
    case 0x02:   statusbyte = 0x06;

          break;
    case 0x04:   statusbyte = 0x05;

          break;

    default:  break;
  }



  if(statusbyte != 0x00)
  {

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


      uart_putc(statusbyte);

    }

  }

  statusbyte = 0x00;
  _delay_ms(1);




   }

}


..................................


mfg Mathias
Angehängte Dateien:
Gast #533781
Lesenswert?
• ▲
▼
>Habe eine Code der regelmäßig mit Polling die Pins abfrägt realisiert
>mit if Schleifen ist dies auch mit der Switch()  Funktion möglich

Klar geht das, schon mal ausprobiert ?

>  switch(!PINC)

Falsch

>    case PINC = 0x01:  statusbyte = 0x02;

Falsch
OP #534033
Lesenswert?
• ▲
▼
Ich möchte gerne einfach eine Switch Funktion die so geht:


switch(!PINC)
  {
    case 0:    statusbyte = 0x02;  //macht das,wenn PC0
      break;
    case 1:   statusbyte = 0x02;  //macht das,wenn PC1
      break;
    case 2:   statusbyte = 0x03;  //macht das,wenn PC2
      break;
    case 3:   statusbyte = 0x04;  //macht das,wenn PC3
      break;
    case 4:   statusbyte = 0x04;  //macht das,wenn PC4
      break;
    case 5:   statusbyte = 0x04;
      break;
    case 6:   statusbyte = 0x04;
      break;
    default:  break;
  }

Hab alles was oben angeführt ist ausprobiert.

mfg Mathias

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