Forum: PC-Programmierung int, char, main , programmieren


von Marry H. (Gast)


Lesenswert?

Hallo zusammen, kann mir jemand helfen, um dies alles zu verstehen.

Ich habe daweil sehr wenige erfahrungen mit MPLAB X gemacht und ich 
verstehe nicht, was wir hier in der Schule gemacht haben, weil ich krank 
war. Ich würde das gerne nachholen.

Kann mir jemand helfen dies alles zu verstehen ??

#include <xc.h>
//#include <pic16f866.h> nicht notwendig ??

//#######################
//## CONFIG1
//#pragma config  CONFIG1 = 0x03f4
#pragma config FOSC = INTRC_NOCLKOUT // Oscillator Selection bits 
(External RC oscillator)
#pragma config WDTE = OFF            // Watchdog Timer Enable bit (WDT 
is controlled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF           // Power-up Timer Enable bit (PWRT 
disabled)
#pragma config MCLRE = ON            // MCLR Pin Enable bit (MCLR pin 
enabled; RA3 input pin disabled)
#pragma config CP = OFF              // Code Protection bit
#pragma config CPD = OFF             // Data EEPROM Code Protection bit 
(Data EEPROM not code-protected)
#pragma config BOREN = ON            // Brown-out Reset Enable bits 
(Brown-out Reset disabled in hardware and software)
#pragma config IESO = OFF            // Internal/External Oscillator 
Switchover bit (Oscillator Switchover mode disabled)
#pragma config FCMEN = OFF           // Fail-Safe Clock Monitor Enable 
(Fail-Safe Clock Monitor disabled)
#pragma config LVP = OFF             // Single-Supply ICSP Enable bit 
(Single-Supply ICSP enabled)
//## CONFIG2
#pragma config BOR4V = BOR21V         // Brown-out Reset Voltage bits 
(VBOR set to 2.1 V nominal)
#pragma config WRT = OFF              // Table Write Protection bit

//************************
//## Hardware Definitionen
#include "HW_Definition.h"

//************************
//## Funktionen Deklaration
extern void init_pic(void);
extern void set_zahl(char);
extern void wait_xms(int);
extern void start_tmr1_int(void);
extern void start_tmr0_int(void);
extern void start_countdown(void);
extern void reset_countdown(void);
extern void set_alarm(void);
extern void rs232(void);
extern void send_zeichen(char);
extern void convert_time(void);


//************************
//## Meine Variablen
char test @ 0x20;  /* * ACHTUNG BUG bei XC Version V1.10 **
          im Watch-Fenster wird Variable nicht angezeigt,
          obwohl richtig zugeordnet --> XC Update V1.32 = OK
          */
char zeit[4];    // char : Datentyp legt fest, dass die einzelnen 
Zeichen eines Speicherbereichs aus je 8 Bits bestehen,
                 // die je ein darstellbares Zeichen (Buchstabe, Ziffer, 
Sonderzeichen) repräsentieren.
char zeit_min=0;
char zeit_sec=0;
char zeit_default_min=1;
char zeit_default_sec=30;
char zeit_startwert_min=0;
char zeit_startwert_sec=0;
char i=0;
int int_count;    //
char eingabe[5] = {'0','3',':','1','0'};
int x=4;          // Variablentyp, unter dem in einem Programm Variablen 
definiert werden
char rs232_active=0;
char alarm=0;
/************************************************
* Achtung anzeigen der Variablen im Watchfenster
Global Variablen --> direkt eingeben
Lokale Variablen --> mit z.B. my_ISR@temp anzeigen lassen
         --> name = <funktionsname>@<variablenname>
************************************************/


//###################################################################
//## Main                               ##
//###################################################################
int main(void) //@ 0x010 mit Adresszuweisung kein ordentliches debugggen 
möglich
{

  T1CON = 0x00;
  init_pic();
  init_rs232();    //initalisierung RS232
  start_tmr0_int();
  start_tmr1_int();
  zeit_min = zeit_default_min;     //zeit den defaultwert zuweisen
  zeit_sec = zeit_default_sec;



  while(1)      //Endlosschleife
  {

        //RS232 auslesen
        if(rs232_active==1)
        {
          if(eingabe[0]>57 || eingabe[1]>57 || eingabe[2]!=':' || 
eingabe[3]>53 || eingabe[4]>57)
          {
            send_error();
            eingabe[0]='0';
            eingabe[1]='0';
            eingabe[2]='0';
            eingabe[3]='0';
            eingabe[4]='0';
            rs232_active=0;
          } else {
          zeit_min = (((eingabe[4]-48)*10)+(eingabe[3]-48));
          zeit_sec = (((eingabe[1]-48)*10)+(eingabe[0]-48)); //umwandeln 
in korrekte DEC
          rs232_active=0;    //ausschalten damit interrupt wieder 
aktivieren kann
          }//end if else

        }


        //umbauen in char zeit[] damit auf Display angezeigt wird
        convert_time();
        if (S1) //beginnt mit countdown
        {
        rs232_active=0;
        zeit_startwert_min = zeit_min;    //startwert speichern für 
resetfunktion
        zeit_startwert_sec = zeit_sec;
        start_countdown();

        }
  }//endwhile

}//Ende Main

von Rolf M. (rmagnus)


Lesenswert?

Jeanetta Z. schrieb:
> Kann mir jemand helfen dies alles zu verstehen ??

Es wird dir kaum einer den kompletten Code Zeile für Zeile erklären.
Wenn du konkrete Fragen stellst, werden die auch beantwortet.

Jeanetta Z. schrieb:
> Ich habe daweil sehr wenige erfahrungen mit MPLAB X gemacht und ich
> verstehe nicht, was wir hier in der Schule gemacht haben, weil ich krank
> war. Ich würde das gerne nachholen.

Was meint denn dein Lehrer dazu?

von Mark B. (markbrandis)


Lesenswert?

Jeanetta Z. schrieb:
> Kann mir jemand helfen dies alles zu verstehen ??

Du hast vergessen die eigentliche Aufgabe zu schildern, und an welcher 
Stelle genau Du ein Problem hast.

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.