(27.02.2006) problem mit programm

Das Forum fĂĽr Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

(27.02.2006) problem mit programm

Beitragvon djcalvo » Mo 27 Feb, 2006 21:37

hallo
ich hab ein problem mit diesem programm.
also ich kenn mich nicht gut aus und hab am 2.3.06 einen test ĂĽber das programm
also ich brauch die ganzen kommtare fĂĽr diese ganzen zeilen

das eine ist mit c programmiert
http://www.yourfilehost.com/media.php?c ... mpel.c.doc

und das mit assembler
http://www.yourfilehost.com/media.php?c ... el.asm.doc

kann mir vielleicht jemand mit einigen befehlen weiterhelfen
(und wenns nur ein befehl ist)
bitte
danke
djcalvo
Neu im Board
Neu im Board
 
Beiträge: 2
Registriert: Mo 27 Feb, 2006 21:24

Beitragvon max_payne » Mo 27 Feb, 2006 21:56

also ich versteh das programm ĂĽberhaupt nicht....
bitte wo programmiert man noch so?
max_payne
Ultimate Power-User
Ultimate Power-User
 
Beiträge: 4982
Registriert: Mo 30 Aug, 2004 12:25

Beitragvon mo » Mo 27 Feb, 2006 23:09

max_payne hat geschrieben:also ich versteh das programm ĂĽberhaupt nicht....
bitte wo programmiert man noch so?

z.b. in der htlstp/dept. elektronik :oops:

handelt sich hierbei um die programmierung von µCs, wovon ich zwar auch nicht wirklich ein freund bin, aber mich trotzdem damit abmühen muss.

alles kann ich dir auch nicht sagen, ich versuch mich mal, wo ichs weis ;)
Assembler:
Code: Alles auswählen
ANFG:  MOV SP,#80H        ;
       CLR RI             ; setzt das RI-bit auf 0
HLOOP: MOV R2,#00H        ;
       MOV DPTR,#TAB      ;
LADE:  MOV A,R2           ;
       MOVC A,@A+DPTR     ;
       CALL WAITOUT       ;aufruf von unterprogramm WAITOUT
       INC R2             ;R2 um eins inkrementieren
       CJNE R2,#20D,LADE  ;falls R2!=525 springt er nach LADE
       JNB RI,HLOOP       ;falls RI=0x0 springt er nach HLOOP
       LJMP UEXIT         ;sprung nach UEXIT
;
;
;****************************************
;*                                      *
;*          UNTERPROGRAMM               *
;*                                      *
;* TABELLENPARAMETER FUER FARBE UND     *
;* ZEIT WIRD IM REGISTER A UEBERGEBEN   *
;* UPRO GIBT ENTSPRECHENDE FARBE MIT    *
;* GEWUENSCHTER ZEIT AUF PERIPHERIE AUS *
;****************************************
;
         ORG 0200H      ;
WAITOUT: MOV R3,A       ;
         ANL A,#0FCH    ;hat was mit AND-Logik zu tun, denke, das wird bitweise mit AND verknĂĽpft
         MOV P1,A       ;
         MOV A,R3       ;
         ANL A,#03H     ;
         JNZ WAIT       ;
         MOV A,P4       ;
;       
WAIT:                   ;
        MOV R4,#HIGH(NUL5) ;
X1:     MOV R5,#LOW (NUL5) ;
        DEC R5             ; R5 um eins dekrementiern
        NOP                ; null-operation
        PUSH 00            ;
        POP  00            ;
        CJNE R5,#00,$-6    ; ĂĽberprĂĽft R5 auf 0, falls R5!=0 fĂĽhrt er den jump-befehl "$-6" aus. was mit $-6 gemeint ist, weis ich jedoch auch nicht, vllt 6 anweisungen nach oben
        DJNZ R4,X1         ; springt nach X1 falls (R4-1)==0
        DEC A              ;dekrementiert A
        JNZ X1             ; 
        RET                ;  springt dahin zurĂĽck, wo die funktion aufgerufen wurde
       
       END


zum C programm kann ich nicht viel sagen...
LINEA7/XPIRIO ADSL 2048/512 FLAT
mo
Board-Mitglied
Board-Mitglied
 
Beiträge: 185
Registriert: Do 06 Jan, 2005 16:45

Beitragvon codec » Mo 27 Feb, 2006 23:52

okay bin mit der materie "in der htlstp/dept. elektronik programmierung" nicht vertraut, allerdings kann ich dir das Programm mal so erklaeren.

Code: Alles auswählen

//name AMPEL.c;

#include <reg552.h>   // Special Function Register fuer SBC3 (8x552)    

/****************************************
/*                                      *
/*          AMPELSTEUERUNG              *
/*                                      *
/* ZEIT UND FARBWAHL IN TABELLENFORM :  *
/* BIT BELEGUNG FUER PORT UND TABELLE   *
/*   _______________________________    *
/*  | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |   *
/*   -------------------------------    *
/*   SEITE1     |  SEITE2   |  ZEIT     *
/*   RT  GB  GN   RT  GB  GN            *
/*   ZEIT UEBER SCHALTER      0   0     *
/*        O.5  SEC.           0   1     *
/*        1.0  SEC.           1   0     *
/*        1.5  SEC.  TEST     1   1     *
/*                                      *
/****************************************


/****************************************/
/*                                      */
/*    VEREINBARUNGEN & TABELLE          */
/*                                      */
/****************************************/

// Hier wird ein Array/Vektor mit 20 Feldern erstellt.
// Die explizite Angabe in [] ist nicht noetig,
// da die Variable Deklariert und Initalisiert wird, daher
// weiss der Compiler wieviele Felder er braucht.
char code TAB[] =
  {
  0x84,        // rot grĂĽn       variabel
  0x81,        // ROT FINSTER  0.5S     
  0x85,        // ROT GRUEN    0.5S     
  0x81,        //{ROT FINSTER  0.5S     }
  0x85,        //{ROT GRUEN    0.5S     }
  0x81,        //{ROT FINSTER  0.5S     }
  0x85,        //{ROT GRUEN    0.5S     }
  0x81,        //{ROT FINSTER  0.5S     }
  0x85,        //{ROT GRUEN    0.5S     }
  0xCA,        //{ROT GB GB    1SEC     }
  0x30,        //{GRUEN ROT    VARIABEL }
  0x11,        //{FINSTER ROT  0.5S     }
  0x31,        //{GRUEN ROT    0.5S     }
  0x11,        //{FINSTER ROT  0.5S     }
  0x31,        //{GRUEN ROT    0.5S     }
  0x11,        //{FINSTER ROT  0.5S     }
  0x31,        //{GRUEN ROT    0.5S     }
  0x11,        //{FINSTER ROT  0.5S     }
  0x31,        //{GRUEN ROT    0.5S     }
  0x5A         //{GELB ROT GB  1SEC     }
  };

char             DUMMY; // Deklaration einer Variable
char             SCHRITT; //--""--

/****************************************/
/*                                      */
/*          UNTERPROGRAMME              */
/*                                      */
/* TABELLENPARAMETER FUER FARBE UND     */
/* ZEIT WIRD IN VARIABLE DUMMY ĂśBERGEBEN*/
/* UPRO GIBT ENTSPRECHENDE FARBE MIT    */
/* GEWUENSCHTER ZEIT AUF PERIPHERIE AUS */
/****************************************/
// Funktionsdeklaration, at zeigt auf den Speicherbereich wo sich
// das unterprogramm befindet
at 0x8cb0 void monexit (void);   // (Monitorausstieg)
at 0xe099 void z100us (void);    // 100 usec wait , Funktionsdeklaration

/****************************************/
/*                                      */
/*          UNTERPROGRAMM               */
/*                                      */
/*     20 X TABELLENWERT LADEN UND      */
/*  ZEIT-FARBEN UNTERPROGRAMM AUFRUFEN  */
/****************************************/
// Deklaration und Definition der Funktion WAITOUT die keine Uebergabe Parameter
// erwartet und auch kein Ergebnis zurueck liefert
void             WAITOUT(void){

unsigned char    ZEIT; //Deklaration ohne Vorzeichen - (da unsigned)
unsigned char    TIME;
int             N;
 
P1 = DUMMY & 0xFC; //Bitweise Verknuepfung von DUMMY und 0xFC
ZEIT = DUMMY & 0x03;
// Wenn Zeit = 0 ist wird P4 der Zeit zugewiesen,
// P4 wird wahrscheinlich im Header/Source von reg552.h deklariert sein.
if (ZEIT == 0) {
  ZEIT = P4;
  }

// for schleife wo Time auf 1 gesetzt wird, wird solange betrieben
// solange Time kleiner oder gleich Zeit ist, dabei Wird Time immer um 1
// erhoeht
for(TIME = 1; TIME <= ZEIT; TIME++){
// gleicher hier, wird allerdings solange durchgefuerht solange
// N kleiner gleich 5000 ist
   for(N = 1; N <= 5000; N++) {   // 0.5s
// Funktionsaufruf
     z100us() ;
     }
   }
 
} /*  End WAITOUT */


/****************************************/
/*                                      */
/*          HAUPTPROGRAMM               */
/*                                      */
/*     20 X TABELLENWERT LADEN UND      */
/*  ZEIT-FARBEN UNTERPROGRAMM AUFRUFEN  */
/****************************************/

// Einstiegspunkt des Programms
void    main (void) {
// Fuss Schleife die auf jeden Fall einmal durchlaeuft, while ist das
// Kriterium wie lang sie laeuft
  do {
// Zuweisung
    SCHRITT=0;
// Wieder Fussschleife, wird solange durchgefuehrt solange Schritt kleiner
// gleich 19 ist
    do {
// hier wird offenbar die Farbe zugewiesen (HEX),
// die im Array TAB steht, siehe oben
      DUMMY=TAB[SCHRITT];
      WAITOUT(); // Funktion WAITOUT Aufruf, siehe oben
      SCHRITT++; // schritt wird um 1 inkrementiert
      } while (SCHRITT <= 19);
    } while (!RI);      //{KEYPRESSED}

  monexit(); // Funktion -> Austieg
  }




codec
Board-User Level 1
Board-User Level 1
 
Beiträge: 553
Registriert: Di 28 Okt, 2003 12:48

Beitragvon djcalvo » Di 28 Feb, 2006 18:23

danke ihr habt mir schon sehr viel weitergeholfen
djcalvo
Neu im Board
Neu im Board
 
Beiträge: 2
Registriert: Mo 27 Feb, 2006 21:24


ZurĂĽck zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 18 Gäste