Programmierung Problem Mikrocontroller XC886

Gast #2653526
Hallo,

Ich habe ein Trainingsboard mit dem XC886 Mikrocontroller. Ich möchte 
folgendes Programm verwenden, siehe Anhang. Mein Problem ist das die if 
Schleife usw. nicht funktionieren. Ich möchte wenn die LED auf Low ist 
die Schleife starten. Das funktioniert jedoch nicht. Habe ich einen 
Fehler im Programm? Vielen Dank!

PS: Das Programm ist für ein selbstgebauten Timelapse Slider :)

MfG Julian

//********************************************************************** 
************************************************************************ 
***
// Projekt Timelapse Slider
// Name: Julian Reimer
// Status: V1.2
// Datum: 29.03.2012
// Noch offen: Ausgabe LCD Infos und richtige Darstellung
//********************************************************************** 
************************************************************************ 
***
#include <xc866.h>
//********************************************************************** 
************************************************************************ 
***
// LCD Funktionen :
extern void lcd_init(void);    // Init LCD
extern void lcd_clr(void);     // LCD Lˆschen
extern void lcd_byte(char);    // Ausgabe unsigned char  => 3 stellig
extern void lcd_str(char *ptr);  // Ausgabe String
extern void lcd_curs(char);    // Cursor setzen
extern void asc_out(char);       // Ausgabe eines ASCII Zeichens

// ADC Funktionen :
extern void adc_init(void);
extern unsigned int adc_in(unsigned char);

// eigene Funktionen :
void init();
void adc(void);
void linkslauf(void);
void rechtslauf(void);
void init_port3(void);
void wait(void);
void wait2(unsigned char);
void wait3(unsigned char);
void wait4(void);
void wait_lcd(void);
void bildzaehler(void);
void stop(void);
void lcd(void);
void lcd_startup(void);

//****LOKALE_VARIABLEN************************************************** 
************************************************************************ 
*******************
unsigned int i,wert;
sbit P0_3 = P0_DATA^3;
sbit P0_4 = P0_DATA^4;
sbit P0_5 = P0_DATA^5;
sbit P0_7 = P0_DATA^7;

sbit P1_2 = P1_DATA^2;
sbit P1_3 = P1_DATA^3;
sbit P1_4 = P1_DATA^4;

sbit P3_0 = P3_DATA^0;
sbit P3_1 = P3_DATA^1;
sbit P3_2 = P3_DATA^2;
sbit P3_3 = P3_DATA^3;
sbit P3_4 = P3_DATA^4;
sbit P3_5 = P3_DATA^5;
sbit P3_6 = P3_DATA^6;
sbit P3_7 = P3_DATA^7;

unsigned char stufe1, stufe2;

//****MAIN************************************************************** 
************************************************************************ 
*******
void main(void)
{
  init();
//  bildzaehler();
  lcd_startup();
  wait_lcd();
  wait_lcd();
  wait_lcd();
  lcd_clr();
  lcd();

  while(P0_3 == 1) // PORT 0.3    = START & STOP
  {
  if(P0_4 == 1)    // PORT 0.4    = RECHTS WENN LED = 1
    {
      rechtslauf();
    }

  if(P0_4 == 0)    // PORT 0.4     = LINKS WENN LED = 0
    {
      linkslauf();
    }
  }

  if(P0_5 == 0)    // PORT 0.7    = MOTOR MANUELL AKTIVIEREN
  {
    P3_0 = 1;
    P3_1 = 1;
  }

  if(P3_6 == 0)    // PORT 0.7    = MOTOR STOPPEN WENN DER SCHLITTEN AM 
ENDE IST
  {
    stop();
  }

  if(P3_7 == 0)    // PORT 0.7    = MOTOR STOPPEN WENN DER SCHLITTEN AM 
ENDE IST
  {
    stop();
  }

}
//****INIT************************************************************** 
************************************************************************ 
*******

void init(void)
{
  TMOD = TMOD & 0xF0;
  TMOD = TMOD | 0x01;
  lcd_init();
  lcd_clr();
  adc_init();
  init_port3();

  for(i=0; i<2; i++)
  {
    P3_0 = 1;
    P3_1 = 0;
    P3_2 = 1;
    P3_3 = 0;
    P3_4 = 1;
    P3_5 = 0;
    P3_6 = 1;
    P3_7 = 0;
    wait4();
    P3_0 = 0;
    P3_1 = 1;
    P3_2 = 0;
    P3_3 = 1;
    P3_4 = 0;
    P3_5 = 1;
    P3_6 = 0;
    P3_7 = 1;
    wait4();
  }
  P3_DATA = 0;
}

//****LCD_STARTUP******************************************************* 
************************************************************************ 
*********

void lcd_startup(void)
{
  lcd_str("Julian R.");
  lcd_curs(40);
  lcd_str("STARTUP");
  lcd_curs(79);
}

//****LCD*************************************************************** 
************************************************************************ 
******

void lcd(void)
{
  lcd_str("TIMELAPSE");
  lcd_curs(40);
  lcd_byte(adc_in(4));
  lcd_curs(46);
  lcd_byte(adc_in(5));
  lcd_curs(79);
//  lcd_str("TIMELAPSE SLIDER");
//  lcd_curs(20);
//  lcd_str("Motor_V: ");
//  lcd_byte(platzhalter);
//  lcd_curs(40);
//  lcd_str("Intervall: ");
//  lcd_byte(platzhalter);
//  lcd_curs(60);
//  lcd_str("Bilder: ");
//  lcd_byte(platzhalter);
//  lcd_curs(68);
//  lcd_str("Richtung: ");
//  lcd_byte(platzhalter);
}
//****INIT_PORT_0+3***************************************************** 
************************************************************************ 
****************

void init_port3(void)
{
    wert = 0;
    P3_DIR = 0xFF;
    P0_DIR = 0xff;

    P0_5 = 1;
    P0_4 = 1;
  P0_3 = 1;
  P1_2 = 0;
  P1_3 = 0;
  P1_4 = 0;
}

//****RECHTSLAUF******************************************************** 
************************************************************************ 
*************
// BELICHTUNGS/PAUSE VERHƒLTNIS SOLLTE 50:50 sein!
void rechtslauf(void)
{
  stufe1 = adc_in(4);
  stufe2 = adc_in(5);
  P3_DATA = 0x00;
  wait();       //TEST!!! Verzˆgerungszeit
  wait3(stufe2);   //Timer Belichtungszeitpause
  P3_DATA = 0x02;
  wait2(stufe1);   //Motorlaufzeit
  P3_DATA = 0x00;
  wait();       //Timer Belichtungszeitpause
  P3_DATA = 0x08;
  wait3(stufe2);   //Kameraauslˆse-Signalzeit  (Belichtung)
  wait3(stufe2);
}

//****LINKSLAUF********************************************************* 
************************************************************************ 
************
// BELICHTUNGS/PAUSE VERHƒLTNIS SOLLTE 50:50 sein!
void linkslauf(void)
{
  stufe1 = adc_in(4);
  stufe2 = adc_in(5);
  P3_DATA = 0x00;
  wait();
  P3_DATA = 0x01;
  wait2(stufe1);
  P3_DATA = 0x00;
  wait();
  P3_DATA = 0x08;
  wait3(stufe2);
  wait3(stufe2);
}

//*****STOP************************************************************* 
************************************************************************ 
*******

void stop(void)
{
  P3_DATA = 0x00;
}

//*****WAIT_FUNKTIONEN************************************************** 
************************************************************************ 
******************

void wait3(unsigned char k) // Kameraauslˆse-Signalzeit
{
  unsigned char i=0;
  for(i=0; i<k; i++)
  {
    TF0 = 0;
    TH0 = 20;  //125
    TL0 = 40;  //202
     TR0 = 1;
    while(TF0 == 0);
    TR0 = 0;
  }
}

void wait2(unsigned char j) //Motorlaufzeit
{
  unsigned char i=0;
  for(i=0; i<j; i++)
  {
    TF0 = 0;
    TH0 = 125;    //1 Microsekunde
    TL0 = 202;
     TR0 = 1;
    while(TF0 == 0);
    TR0 = 0;
  }
}

void wait() //Timer Belichtungszeitpause...
{
  unsigned char i=0;
  for(i=0; i<200; i++)
  {
    TF0 = 0;
    TH0 = 125;
    TL0 = 202;
     TR0 = 1;
    while(TF0 == 0);
    TR0 = 0;
  }
}

void wait_lcd()
{
  unsigned char i=0;
  for(i=0; i<200; i++)
  {
    TF0 = 0;
    TH0 = 20;
    TL0 = 40;
     TR0 = 1;
    while(TF0 == 0);
    TR0 = 0;
  }
}

void wait4()
{
  unsigned char i=0;
  for(i=0; i<50; i++)
  {
    TF0 = 0;
    TH0 = 20;
    TL0 = 40;
     TR0 = 1;
    while(TF0 == 0);
    TR0 = 0;
  }
}

void bildzaehler()
{
//  unsigned int b;
//  if(P3_3 == 1)
//  {
//    P0_3 = 1;
//    b++;
//    asc_out(b);
//  }
}

//****ENDE************************************************************** 
************************************************************************ 
*******
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.