www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmierung Problem Mikrocontroller XC886


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Julian Reimer (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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************************************************************** 
************************************************************************ 
*******

Autor: forever (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Als Erstes benötigst Du eine Endlosschleife. Deine if Abfragen werden 
einmal durchlaufen und dann ... ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net