Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********************************************************************************/
- /* */
- /* Betrieb des PT - First Step! */
- /* */
- /* Programm: Betrieb des ON-Chip A/D-Wandlers und Darstellung */
- /* der Wandlungsergebnisse auf HyperTerm! */
- /* */
- /* Autoren: P.G. / B.v.B. */
- /* */
- /* Zielsystem: PT - First Step, Prozessor: AT89C51CC03 (Atmel) */
- /* */
- /* IDE/C-Compiler: uC/51 (Wickenhäuser) */
- /* */
- /* Letzte Änderung: 13.01.2010 */
- /* */
- /* Datei: AD_WANDLER.c */
- /* */
- /********************************************************************************/
- /*** Einbinden von Include-Dateien ***/
- #include <stdio.h> // Standard Ein-/Ausgabefunktionen
- #include <at89C51cc03.h> // CC03er-Grundregister
- /********************************************************************************/
- /* Die Funktion void seri_init(void) initialisiert die ser. Schnittstelle des */
- /* CC03ers bei einer Taktfrequenz von 11,0592MHz mit nachfolgenden Schnitt- */
- /* stellen Parametern: 9600 Bd, 1 Stopp-Bit, keine Parität, asynchr. Betrieb! */
- /********************************************************************************/
- void seri_init(void)
- {
- SCON=0x52;
- TMOD |=0x20;
- TH1=0xfd;
- TR1=1;
- TI=1;
- }
- /********************************************************************************/
- /* Funktion void clear_screen(void) löscht den Terminal Bildschirm! */
- /********************************************************************************/
- void clear_screen(void)
- {
- printf("\x1b\x48\x1b\x4a");
- }
- /********************************************************************************/
- /* Funktion void set_cursor(unsigned char z, unsigned char s) positioniert den */
- /* Terminal Cursor auf die angegebene Position: */
- /* Parameter z := Zeile, Parameter s := Spalte */
- /********************************************************************************/
- void set_cursor(unsigned char z, unsigned char s)
- {
- printf("\x1b\x59%c%c",(32+z),(32+s));
- }
- /********************************************************************************/
- /* Die Funktion unsigned int mw_erf10(unsigned char kanal) dient zum Betrieb */
- /* des ON-Chip A/D-Wandlers des AT89C51CC03. Der Funktion wird der Eingangs- */
- /* kanal übergeben und sie liefert ein 10-Bit Wandlungsergebnis als Funktions- */
- /* wert zurück. */
- /* Wichtig: Diese Funktion setzt voraus, das die Grundinitialisierung */
- /* des ON-Chip A/D-Wandlers ausserhalb der Funktion, also */
- /* z. B. im Hauptprogramm erfolgt. Zur Grundinitialisierung */
- /* muss der A/D-Wandler eingeschaltet werden, also das */
- /* ADEN-Bit im ADCON SFR gesetz werden ( ADCON = 0x20) und */
- /* der zu wandelnde Eingangskanal im SFR ADCF als Analog- */
- /* eingang definiert werden (z. B. ADCF = 0xff -> */
- /* gesamter Port 1 als Analogeingang definiert! */
- /* Parameter kanal := Auswahl des A/D-Wandler Eingangskanals (0..7) */
- /********************************************************************************/
- unsigned int mw_erf10(unsigned char kanal)
- {
- unsigned int erg; // Variable für 10-Bit Wandlungsergebnis
- ADCON = (ADCON & 0xe8); // Kanalauswahl und Wandlungsende-Bit rücksetzen!
- ADCON = (ADCON | (0x08+kanal)); // Kanalauswahl und Start der einmaligen Wandlung!
- while((ADCON & 0x10) == 0); // Warte bis A/D-Wandlung beendet ist!
- erg = ((ADDH << 2) + (ADDL & 0x03)); // Ergebnisregister auslesen u. zusammenbauen!
- return(erg);
- }
- /********************************************************************************/
- /*** Start des Hauptprogramms! **************************************************/
- /********************************************************************************/
- void main(void)
- {
- unsigned int ANA_INT1, ANA_INT2; // Hilfsvariablen zur Messwertausgabe
- float ANA_SPG1, ANA_SPG2; // Hilfsvariablen zur Spannungsausgabe
- seri_init(); // Initialisierung der ser. Schnittstelle
- clear_screen(); // Bildschirm löschen
- printf(" Betrieb des ON-Chip A/D-Wandlers! \n"); // Textmeldungen und Bildschirmmaske auf Hyperterm
- printf("===================================\n\n");
- printf(" Programm laeuft ... \n\n\n\n\n");
- printf(" Wandlungsergebnisse: P1.6: P1.7:\n\n");
- printf(" Hexadezimal:\n");
- printf(" Dezimal:\n");
- printf(" Spannung: V V");
- ADCF = 0xc0; // Port P1.6 und P1.7 als Analogeingang!
- ADCON = 0x20; // ON-Chip A/D-Wandler eingeschaltet!
- while(1) // Endlosschleife!
- {
- ANA_INT1 = mw_erf10(6); // 10-Bit Messwert an Port P1.6 erfassen!
- ANA_INT2 = mw_erf10(7); // 10-Bit Messwert an Port P1.7 erfassen!
- ANA_SPG1 = ANA_INT1 * 2.5/1024; // Spannungswert Port P1.6 berechnen!
- ANA_SPG2 = ANA_INT2 * 2.5/1024; // Spannungswert Port P1.7 berechnen!
- set_cursor(10, 27); // Cursor positionieren und Werte
- printf("%5x %5x", ANA_INT1, ANA_INT2); // auf HyperTerm ausgeben!
- set_cursor(11, 27);
- printf("%5u %5u", ANA_INT1, ANA_INT2);
- set_cursor(12, 27);
- printf("%5.3f %5.3f", ANA_SPG1, ANA_SPG2);
- }
- }
- /*******************************************************************************************/
- /*** Ende des Hauptprogramms, d.h. Ende des gesamten Programms! ****************************/
- /*******************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement