Huhu!

Da ich neu bin erst mal ein großes hallo an alle hier
Und direkt mein Problem:

Ich hab mich in letzter Zeit recht viel mit Microcontroller-Programmierung beschäftigt. Nun habe ich hier einige PIC16F628A und einen amateurhaft-selber-geätzten PIC-Programmer. Nachdem meine ersten Programme (LED blinken lassen, ...) funktioniert haben, wagte ich mich auch an kompliziertere Dinge (aktuell: Steuerung für einen Platinen-Belichter, wenn der klappt ein DMX-Sender).
Leider habe ich zum einen das Problem, dass der Programmer nur bei ~ 1/10 aller programmiervorgänge überhaupt etwas tut und dass das Programm scheinbar kein Stück funktioniert.

Hier zunächst mal der Code an sich:
Code:
/*
 *  Belichtungstimer v1.0
 *  Autor: Josef Burg
 *
 *	Portbelegung:
 *  -----------------------------------------------
 *	PortA.0: Taster zum erhöhen von time
 *	PortA.1: Taster zum erniedrigen von time	
 *	PortA.2: Anode 1. Siebensegmentanzeige
 *	PortA.3: Anode 2. Siebensegmentanzeige
 *	PortA.4: Anode 3. Siebensegmentanzeige
 *	PortA.5: Start/Stop-Taster
 *	PortA.6: Anschluss grüne "Im Betrieb"-LED
 *	PortA.7: Relais zum schalten der UV-Röhren
 *	PortB.0: Kathode A-Segment
 *	PortB.1: Kathode B-Segment
 *	PortB.2: Kathode C-Segment
 *	PortB.3: Kathode D-Segment
 *	PortB.4: Kathode E-Segment
 *	PortB.5: Kathode F-Segment
 *	PortB.6: Kathode G-Segment
 *	PortB.7: -
*/

#include <16F628A.h>
#include "delay20.c"
#define Null 0b.0100.0001;
#define Eins 0b.0111.1001;
#define Zwei 0b.0010.0100;
#define Drei 0b.0011.0000;
#define Vier 0b.0001.1001;
#define Funf 0b.0001.0010;
#define Sechs 0b.0000.0010;
#define Sieben 0b.0111.1000;
#define Acht 0b.0000.0000;
#define Neun 0b.0001.0000;
// Wenn PortB eines dieser Bytes zugewiesen wird, sollte die angegebene Zahl erscheinen
#pragma config = 0b.1111.1111.0011
// Bit 1,0 :  	11-RC, 10-HS,  	01-XT, 00-LP
// Bit 2 : 	1 - Watchdog Ein, 	0 - Watchdog Aus
// Bit 3 : 	0- Power up Timer Ein, 	1- Power up Timer Aus
// Bit's 13...4 : 	0-Leseschutz Ein, 	1-Leseschutz Aus

// --> Hier also: Oszilator RC (Intern), Watchdog aus, PuT ein und Leseschutz aus

void Delay1s( uns16 time) {
 do {
  Delay1ms(1000);
 } while ( -- time != 0);
}

void output(int time) {

}

void main(void)
{
 TRISA = 0b.0010.0011; // Am Port A sind Pins 5, 1 und 0 (Pins 17, 18 und 16) als Eingänge definiert - der Rest als Ausgänge
 TRISB = 0b.0000.0000; // Alle Pins an Port B als Ausgänge für die Anzeige
 int time; // Variable für die Wartezeit
 time = 0; // Initialisieren
 bit up @ PORTA.0;    // Über up wird der Taster zum erhöhen der Zeit angesprochen
 bit down @ PORTA.1;  // Über down der Taster zum erniedrigen
 bit start @ PORTA.5; // Und über start - wie könnte es anders sein - der zum starten
 bit LED @ PORTA.6;   // Variable zum ansprechen der BetriebsLED
 bit UV @ PORTA.7;    // Variable zum Ansprechen der UV-Röhren
 bit S1 @ PORTA.2;
 bit S2 @ PORTA.3;
 bit S3 @ PORTA.4;
 char Disp @ PORTB;   // Display an PortB

 while(1) { // Endlosschleife

  if (up) { // Wenn die Erhöhen-Taste gedrückt wird
   time++;  // Erhöhe den Stand
   output(time); // Gib den neuen Stand des Timers aus
   Delay1ms(100); // 0,1s zum entprellen warten
   if(up) { // Solange man die Taste gedrückt hält, wird zunächst 0,5s gewartet, dann jede 0,1s um 1 erhöht
    Delay1ms(500);
    while(up) {
     time++;
     output(time);
     Delay1ms(100);
    } // Ende while
   } // Ende if
  } // Ende if

  if (down) { // Für die Erniedrigen-Taste das gleiche in grün
   time--;
   output(time);
   Delay1ms(100);
   if(down) {
    Delay1ms(500);
    while(down) {
     time--;
     output(time);
     Delay1ms(100);
    } // Ende while
   } // Ende if
  } // Ende if

  if (start) { // Wenn start gedrückt wird
   LED = 1; // LED einschalten
   if (time > 5) { // Röhren nur einschalten wenn länger als 5sec ein um beschädigung der Röhren zu vermeiden
    UV = 1;
    while (time) {
     Delay1s(1); // 1sek warten
     time--;       // timer erniedrigen
     if (start) { // Wenn ncohmal start gedrückt wird, wird der Vorgang abgebrochen
      time = 0;
     }
     output(time); // und ausgeben
    }
    UV = 0; // UV-Röhren ausschalten
   }
   LED = 0; // LED wieder ausschalten
  }
 } // Ende while
} // Ende main
Am Anfang des Codes steht die Belegung, zur Verdeutlichung ist im Anhang nochmal ein Schaltplan (Das ganze ist auf 2 Platinen verteilt, welche über ein Flachbandkabel miteinander verbunden sind).

Natürlich wäre es toll wenn jetzt einer sagen könnte/würde "In Zeile xy ist der Fehler, es muss blablub heißen", aber natürlich bin ich überJEGLICHEN Tipp wie ich den Fehler finden kann dankbar (Da ich nciht den leisesten schimmer habe wie man an ein solches Problem rangeht).

Vielen dank für alle Tipps die ich (hoffentlich) bekommen werden
NovitA

PS: Ich bitte es zu entschuldigen wenn obiger Code kompletter Mist ist