1  | /*** Einbinden von Include-Dateien ***/
  | 
2  | #include <stdio.h>                  // Standard Ein-/Ausgabefunktionen
  | 
3  | #include <at89c51cc03.h>            // CC03er-Grundregister
  | 
4  | 
  | 
5  | 
  | 
6  | /*** Festlegung der benoetigen SFRs ***/
  | 
7  | //near unsigned char P_1  @  0x90;    // Port P1 als Ganzes festlegeen, d.h. der komplette
  | 
8  |                                    
  | 
9  | 
  | 
10  | 
  | 
11  | 
  | 
12  | /********************************************************************************************/
  | 
13  | /*** Start des Hauptprogramms ***************************************************************/
  | 
14  | /********************************************************************************************/
  | 
15  | 
  | 
16  | void main (void)     // Start des Hauptprogramms
  | 
17  | {
 | 
18  |     /*Definition der benoetigten Variablen*/
  | 
19  |     unsigned int wert1;// Variable zur Berechnung des A/D-Wandler Ergebnisses an Poti 1-->t_p 
  | 
20  |     unsigned int wert2;// Variable zur Berechnung des A/D-Wandler Ergebnisses an Poti 2-->t_n
  | 
21  |     unsigned int t_p;//fuer die positive Imspulsbreite
  | 
22  |     unsigned int t_n;//fuer die negative Impulsbreite   
  | 
23  | 
  | 
24  |     /**************************************************************/
  | 
25  |     /*  Initialisierung der seriellen Schnittstelle 0 des CC03ers */
  | 
26  |     /*  Schnittstellenparameter: 9600Baud, 8 Datenbit, 1 Stopp-Bit*/
  | 
27  |     /*  asynchroner Betrieb                                       */
  | 
28  |     /**************************************************************/
  | 
29  | 
  | 
30  |     SCON=0x52;
  | 
31  |     TMOD |=0x20;
  | 
32  |     TH1=0xfd;
  | 
33  |     TR1=1;
  | 
34  |     TI=1;
  | 
35  | 
  | 
36  |     /* Punkt 2, Analog-/Digital-Wandler initialisieren! */
  | 
37  |     ADCF = 0xc0;        // Portpin P1.6 und P1.7 als Analogeingaenge definieren
  | 
38  |     ADCON = 0x20;       // ADC einschalten --> ADEN = 1
  | 
39  | 
  | 
40  |     /* Bildschirm loeschen und Cursor auf Home-Position */
  | 
41  |     printf("\x1b\x48\x1b\x4a");
 | 
42  | 
  | 
43  |     /* Bildschirm-Ueberschrift */
  | 
44  |     printf("Programm zuer Einstellung einer Impulsbreite\n");
 | 
45  |     printf("==================================================\n\n");
 | 
46  |     //printf("\n\n\n***********Menu*************\n");
 | 
47  |     printf("\n\n\n   positive Impulsbreite am Port P1.6, Bereich 1- 256ms!");
 | 
48  |     printf("\n\n   negative Impulsbreite am Port P1.7, Bereich 1- 256ms!");
 | 
49  | 
  | 
50  |     //ADCON &= 0xf8;// alle Kanaele auf null setzen
  | 
51  | 
  | 
52  |     while(1)
  | 
53  |     {
 | 
54  |  
  | 
55  |         if ((ADCON |= 0x06))   // Kanal 6 ausgewaehlt
  | 
56  |         {
 | 
57  |             printf("\n\n\n Port P1_6 wird ausgegeben: \n");
 | 
58  |             ADCON = (ADCON | 0x08);                     // Einmalige Wandlung des ADUs starten!
  | 
59  |             while((ADCON & 0x10) == 0);                 // Warte bis A/D-Wandlung beendet ist!
  | 
60  |             ADCON = ADCON & 0xef;                       // Wandlungsendebit ADEOC auf log. 0 setzen!
  | 
61  |             wert1 = ((ADDH << 2) + (ADDL & 0x03));       // Ergebnisregister auslesen u. zusammenbauen!
  | 
62  |             t_p = (256 / 1024) * wert1;                  // positive Impulsbreite berechnen!
  | 
63  |             if (wert1 == 0) t_p = 1;         // Wenn Wert ist null, t_p ist 1 ms (niedrigste Impulsbreite)
  | 
64  |             if (wert1 > 1024) t_p = 256;     // Wenn Wert groesser 1024, t_p ist 256 ms (hoechstte Impulsbreite)
  | 
65  |             printf("\x1b\x59\x2c\x34 %u    ", wert1);    // Cursor positionieren und Ergebnis in Dezimal ausgeben
 | 
66  |             printf("\x1b\x59\x32\x34 %u ms    ", t_p);   // als positive Impulsbreite ausgeben!
 | 
67  |             _wait_ms(2000);           
  | 
68  |         }
  | 
69  | 
  | 
70  |         if (ADCON |= 0x07)//Wenn ADU eingeschalten und Kanal 7 ausgewaehlt
  | 
71  |         {
 | 
72  |             printf("\n\n\n Port P1_7 wird ausgegeben: \n");
 | 
73  |             ADCON = (ADCON | 0x08);                     // Einmalige Wandlung des ADUs starten!
  | 
74  |             while((ADCON & 0x10) == 0);                 // Warte bis A/D-Wandlung beendet ist!
  | 
75  |             ADCON = ADCON & 0xef;                       // Wandlungsendebit ADEOC auf log. 0 setzen!
  | 
76  |             wert2 = ((ADDH << 2) + (ADDL & 0x03));       // Ergebnisregister auslesen u. zusammenbauen!
  | 
77  |             t_n = (256 / 1024) * wert2;                  // positive Impulsbreite berechnen!
  | 
78  |             if (wert2 == 0) t_n = 1;         // Wenn Wert ist null, t_p ist 1 ms (niedrigste Impulsbreite)
  | 
79  |             if (wert2 > 1024) t_n = 256;     // Wenn Wert groesser 1024, t_p ist 256 ms (niedrigste Impulsbreite)
  | 
80  |             printf("\x1b\x59\x2c\x34 %u    ", wert2);    // Cursor positionieren und Ergebnis in Dezimal ausgeben
 | 
81  |             printf("\x1b\x59\x32\x34 %u ms    ", t_n);   // als positive Impulsbreite ausgeben!
 | 
82  |             _wait_ms(2000);           
  | 
83  |         }
  | 
84  |     }
  | 
85  | 
  | 
86  |     /* Endlosschleife zum ordnungsgemaessen Abschluss des Programms ist
  | 
87  |        hier nicht mehr notwendig, da ja das Programm selber als End-
  | 
88  |        losschleife laeuft !
  | 
89  |     */
  | 
90  | 
  | 
91  | }
  | 
92  | 
  | 
93  | /********************************************************************************************/
  | 
94  | /*** Ende des Hauptprogramms, d.h. Ende des gesamten Programms! *****************************/
  | 
95  | /********************************************************************************************/
  |