Forum: Mikrocontroller und Digitale Elektronik Variablen zwischen Unterprogrammen übergeben


von Bastian S. (basti2s)


Lesenswert?

Hallo,

möchte wie in der Überschrift bereits erwähnt eine Variable, von dem 
einem Unterprogramm in ein anderes Unterprogramm übergeben. Wie mache 
ich das?

Programmiere in C mit MPLAB auf dem PIC16F887.

von Peter II (Gast)


Lesenswert?

was sind unterprogramme?

von Bastian S. (basti2s)


Lesenswert?

weist du nicht was ich meine?
Halt ein Programm im Programm.

von Rolf M. (rmagnus)


Lesenswert?

Die übergibst du einfach als Funktionsparameter beim Aufruf.

von Bastian S. (basti2s)


Lesenswert?

und wie mache ich das?

von Hui (Gast)


Lesenswert?

anderefunktion(uebergeben);

naja für weiteres bitte mal ein Tutorial für C Grundlagen aufsuchen ;)

von ich (Gast)


Lesenswert?

Sorry, wenn man mal blöd fragt. Geht es hier um die Übergabe von 
Variablen zu Unterprogrammen oder anderen Funktionen?? Das ist mir 
überhaupt nicht klar.

von Dussel (Gast)


Lesenswert?

Die können einfach benutzt werden. Variablen sind in der ganzen Funktion 
definiert und deklariert.

von Bastian S. (basti2s)


Lesenswert?

also... ich möchte von diesem Programm
1
  
2
void_umrechnen(void)        // Rechnet Timer Ausgang in Minuten um, Minuten werden auf "minuten" ausgegeben.
3
{
4
    unsigned int ms=0;
5
    unsigned int min_einer=0;
6
    unsigned int min_zehner=0;
7
    OPTION_REG= 0b11000010;     //Pull up disable
8
                                //Interrupt on rising edge of INT pin
9
                                //Internal cycle clock
10
                                //Increment on Low to high transition on T0CKI
11
                                //PSA assigned to timer0
12
                                //Prescaler 1:8
13
    INTCON= 11100100;           //Enable all unmasked interrupts
14
                                //Enables all unmasked peripheral interrupts
15
                                //Enables the INT external interrupt
16
                                //Disables the INT external interrupt
17
                                //Disables the PORTB change interrupt
18
                                //TMR0 Register has overflowed (cleared in software)
19
                                //INT external interrupt did not occur
20
                                //None of the PORTB general purpose I/O pins have changed state
21
    TMR0 = 0;                   //Timer0 auf 0 Setzen
22
    T0IF = 0;                   //Interrupt Flag zurücksetzen
23
    PORTC=0b00000000;           //PORTC rücksetzen
24
    TMR0 = 6;
25
    
26
27
       while (1)
28
    {
29
        if (T0IF)
30
        {
31
            ms=ms+1;  //Counter bei Timerüberlauf um 1 erhöhen
32
            T0IF=0;             //Interrupt Flag zurücksetzen
33
            TMR0=6;             //Timer preload auf 6 stellen
34
        }
35
36
        if (ms==60000)
37
        {
38
            min_einer=min_einer+1;
39
            ms=0;
40
        }
41
42
        if (min_einer==9)
43
        {
44
            min_zehner=min_zehner+1;
45
            min_einer=0;
46
        }
47
48
        if (min_zehner==9)
49
        {
50
            min_zehner=0;
51
        }
52
53
54
  }
55
}
in dieses Programm die Variable min_einer und min_zehner übergeben
1
    void_7Segment(void)
2
{
3
unsigned int min_einer;
4
void_umrechnen();
5
6
while (1)
7
{
8
    if  (min_einer==0) PORTC=0b00000000;
9
    if  (min_einer==1) PORTC=0b00010000;
10
    if  (min_einer==2) PORTC=0b00100000;
11
    if  (min_einer==3) PORTC=0b00110000;
12
    if  (min_einer==4) PORTC=0b01000000;
13
    if  (min_einer==5) PORTC=0b01010000;
14
    if  (min_einer==6) PORTC=0b01100000;
15
    if  (min_einer==7) PORTC=0b01110000;
16
    if  (min_einer==8) PORTC=0b10000000;
17
    if  (min_einer==9) PORTC=0b10010000;
18
}
19
20
21
22
}

von Jürgen S. (starblue) Benutzerseite


Lesenswert?

Du liest in einem C-Lehrbuch nach, wie das geht, und dann machst du das 
so.

von Helmut L. (helmi1)


Lesenswert?

Bastian Schmidt schrieb:
> void_7Segment(void)
> {
> unsigned int min_einer;
> void_umrechnen(&min_einer);   <--- einfach uebergeben
>
> while (1)
> {
>     if  (min_einer==0) PORTC=0b00000000;
>     if  (min_einer==1) PORTC=0b00010000;
>     if  (min_einer==2) PORTC=0b00100000;
>     if  (min_einer==3) PORTC=0b00110000;
>     if  (min_einer==4) PORTC=0b01000000;
>     if  (min_einer==5) PORTC=0b01010000;
>     if  (min_einer==6) PORTC=0b01100000;
>     if  (min_einer==7) PORTC=0b01110000;
>     if  (min_einer==8) PORTC=0b10000000;
>     if  (min_einer==9) PORTC=0b10010000;
> }

void_umrechnen(void)        // Rechnet Timer Ausgang in Minuten um, 
Minuten werden auf "minuten" ausgegeben.
{

aendern in

void_umrechnen(int *min_einer)
{
   *min_einer =  blabla;
}

von ich (Gast)


Lesenswert?

Das sind keine Programme. Das sind einfach Funktionen. Gurgel hilft bei 
solchen Fragen weiter.

Gurgel: "c parameterübergabe funktion"

von Rolf M. (rmagnus)


Lesenswert?

Ich muß den Vorrednern rechtgeben. Das sind absolute C-Grundlagen, die 
man in jedem C-Tutorial oder Einsteigerbuch nachlesen kann. Sowas in 
einem Forum zu erklären ist unsinnig.

ich schrieb:
> Geht es hier um die Übergabe von Variablen zu Unterprogrammen oder
> anderen Funktionen??

Ich kenne "Unterprogramm" nur als allgemeinen Begriff für das, was in C 
"Funktion" heißt. Wo ist also der Unterschied?

von Coder (Gast)


Lesenswert?

Stundenlanges Probieren kann einem minutenlanges Lesen ersparen :-)
Und vermutlich verwendest Du wohl kein Multitasking bzw. kein OS?
Das bedeutet, du hast nur ein Hauptprogramm mit einer 
Endlos-while(1)-schleife?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.