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************************************************************** ************************************************************************ *******
Als Erstes benötigst Du eine Endlosschleife. Deine if Abfragen werden einmal durchlaufen und dann ... ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.