Beispiel logische FunKtion

Gast #829423
Lesenswert?

Hallo Zusammen,
Ich habe eine bitte an euch ich moechte gern mit dem Programm MPLAB  den 
Mikrochip PIC18F4550  und den Microchip MPLAB-C18 Compiler eine logische 
Funktion Programmiert. Ich habe so versucht aber es klapp nicht . Das 
ist mein Programm:

#include <pconfig.h>
#include <stddef.h>
#include <i2c.h>
#include <usart.h>
#include <func1.h>

void main(void) {
 \par
  OSCCON |=0x80; // 8 MHz


TRISA=1 ; // Port A Input
TRISB=1 ; // Port B Input
LATBbits.LATB0=1;
TRISC=0; // Port C Output
TRISD=1; // Port D Input


 LATCbits.LATC1= AND1(LATAbits.LATA1,LATBbits.LATB1);

}


#ifndef FUNC1_H
#define FUNC1_H

extern void AND1(){
   bool A=0 ;
 if((X=1)&&(Y=1))
{
A=1;
}
return A ;
}

#endif

Executing: "C:\\MCC18\\bin\\mcc18.exe" -p=18F4550 "test.c" -fo="test.o" 
-D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-\par
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:5:Error [1105] symbol 'A' has not 
been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:5:Error [1101] lvalue required
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:6:Error [1105] symbol 'X' has not 
been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:6:Error [1101] lvalue required
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:6:Error [1105] symbol 'Y' has not 
been defined
C:\\Users\\VPI\Desktop\\DIP\\func1.h:6:Error [1101] lvalue required\par
C:\\Users\\Nomgabou\\Desktop\\DIP\\func1.h:8:Error [1105] symbol 'A' has 
not been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:8:Error [1101] lvalue required
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:10:Error [1105] symbol 'A' has not 
been defined
C:\\Users\\VPI\\Desktop\\DIP\\func1.h:10:Warning [2052] unexpected 
return value
C:\\Users\\VPI\\Desktop\\DIP\\test.c:38:Warning [2058] call of function 
without prototype
C:\\Users\\VPI\\Desktop\\DIP\\test.c:38:Error [1131] type mismatch in 
assignment
Halting build on first failure as requested.
}
Ich habe bestimmt  dummen Fehler gemacht. Ich brauche ihre Hilfe
Gast #829438
Lesenswert?

> Ich habe bestimmt  dummen Fehler gemacht.

Ja, etwa im Schnitt ein bis zwei Fehler pro Zeile!


> Ich brauche ihre Hilfe

Sehe ich auch so. Kauf Dir ein Grundlagenbuch über C, wenn Du schon kein 
Tutorial im Internet suchen und/oder lesen willst.
Persönliche Seite #829441
Lesenswert?

Alles formale Fehler in der Bedienung der Sprache C. Es fehlen die 
Angaben zu Übergabewerten an die Funktion AND1 und die Beachtung des 
Rückgabewertes.

Formal könnte man die Sache so verbessern. Das muss aber überprüft 
werden, ob die Programmlogik so gewünscht ist:

Datei test.c
1
#include <pconfig.h>
2
#include <stddef.h>
3
#include <i2c.h>
4
#include <usart.h>
5
#include <func1.h>
6

7
void main(void) 
8
{
9
/*
10
  Verstehe ich nicht.
11
  \par
12
*/
13
  OSCCON |= 0x80; // 8 MHz
14
  TRISA = 1; // Port A Input
15
  TRISB = 1; // Port B Input
16
  LATBbits.LATB0 = 1;
17
  TRISC = 0; // Port C Output
18
  TRISD = 1; // Port D Input
19

20
  LATCbits.LATC1 = AND1(LATAbits.LATA1, LATBbits.LATB1);
21
}

Datei func1.c
1
#include <stddef.h>
2
#include <func1.h>
3

4
bool AND1(bool X, bool Y)
5
{
6
  bool A = 0;
7

8
  if ( ( X == 1 ) && ( Y == 1 ) )
9
  {
10
    A = 1;
11
  }
12

13
  return A ;
14
}

Datei func1.h
1
#ifndef FUNC1_H
2
#define FUNC1_H
3

4
extern bool AND1(bool X, bool Y);
5

6
#endif
Gast #829451
Lesenswert?

In den Header kommt der Prototyp, aber nur wenn Du Die Funktion von 
extern aufrufen willst:
extern void AND1(?); den Typ müßtest Du noch angeben

Ins c-file kommt die Funktionsdefinition:
void AND1(?) // TypX?, TypY?
{
   bool A=0 ;            // bool muß dem Compiler bekannt sein
 //if((X=1)&&(Y=1))      // nicht Zuweisung
   if((X==1)&&(Y==1))    // sondern Vergleich

{
A=1;
}
return A ;               // wenn Du etwas zurückgibst ist es nicht void
}
Vielleicht eher so:

char AND1(char X, char Y)
{
   char A=0 ;            // char kennt der Compiler au jeden Fall
   if((X==1)&&(Y==1))
   {
      A=1;
   }
   return A ;
}

Gruß Matthias
Gast #829487
Lesenswert?

Für mich kommt es darauf an, wie jemand fragt. Wenn ein Wille und ein 
Weg ersichtlich ist, warum nicht. Wenn jemand nach einer c++ Funktion 
fragt, die ein Sensorsignal auf eine Motoransteuerung umrechnet, werde 
ich auch schnell ironisch.

Gruß Matthias
Gast #829534
Lesenswert?

> Weil der OP offensichtlich Anfänger ist und man ihm zunächst
> mal einen Weg zeigt, der ohne die C-typischen Abkürzungen und
> Konventionen auskommt.

Ein sauberer Programmierstil ist keine "C-typischen Abkürzung".

Übrigens, die Klammern sind völlig unnötig und sinnlos:
1
#include <stddef.h>
2
#include <func1.h>
3

4
bool AND1(bool X, bool Y)
5
{
6
  return X && Y;
7
}
Gast #829772
Lesenswert?

Was ist daran implementierungsabhängig? Allerdings muss noch stdbool.h
eingebunden werden, da dort der Datentyp bool (als _Bool) definiert
ist.

Ich hätte die Funktion bis auf die Großbuchtaben in Funktions- und
Variablennamen, die noch vom OP stammen, genauso wie Unbekannter
geschrieben. Klarer kann man doch eine Und-Verknüpfung nicht
ausdrücken, 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