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 | /********************************************************************************************/
|