/********************************************************************************************/ /* */ /* TFH Georg Agricola, Bochum / Elektor-Verlag, Aachen (Fernlehrgang) */ /* */ /* Lehrbrief_03: */ /* ============= */ // Programm: ADCON_1 Aufgabe: Seite 96, ... /* */ /* Autor: KLENPER /* */ /* */ /* Zielsystem: PT-Core ONE, Prozessor: AT89C51CC03 (Atmel) */ /* */ /* IDE/C-Compiler: uC/51 (Wickenhäuser) */ /* */ // Neu, Änderung: 24.01.2010 /* */ // Datei/en: C:\uC51\_Lehrgang\LB_03\Analog\ // ADCON_1c // /********************************************************************************************/ // /*** *** Include - Dateien *** ***/ // #include #include // ============================================================================ /**/ unsigned char Programm[16] = "ADCON_1.c "; // Dieses Programm. // ============================================================================ // /*** *** Globale Definitionen SFRs, Variablen, *** ***/ // unsigned char bit Summer @ 0x91; // Port-Pin P1.1 // ----------------------------------------------------------------------------- // /*** *** Funktions Deklaration *** ***/ // void seri(void); /* Serielle Schnittstelle Initialisieren */ void cls(void); /* HyperTerminal loeschen */ void pip(void); /* pipser */ void kopf(void); /* Programmkopf: ( Start ? */ void cursor_set(unsigned char z, unsigned char s); // Kursor Positionieren // ---------------------------------------------------------------------------- // // ############################################################################# // void main (void) /***** Hauptprogramm *****/ { float U_ref = 2.5 ; // 2.5 V ist die Referenzspannung // Wandler Auflösung = 10 Bit = 2^10 = 1024 float U_teil = U_ref / 1024 ; // ~2.44 V / Impuls (2 / 0.00244 = 819.7) float d_wert = 0. ; // Eingangspannung vom Poti [R2], [R3] unsigned int wert; unsigned int summ = 2 / U_teil ; // Summer 'an' bei 2 V unsigned int i=13; // Print zeile // ---------------------------------------------------------------------------- // seri(); // Serielle Schnittstelle Initialisieren cls(); // HyperTerminal loeschen kopf(); // Programmkopf: ( Start ? ) cls(); // ---------------------------------------------------------------------------- // cursor_set( 7, 8); puts("Messwert:"); cursor_set( 7, 19); puts("Hex -"); cursor_set( 8, 19); puts("Dez -"); cursor_set( 10, 21); puts("U -"); ADCF = 0x40; cursor_set(11,0); printf("ADCF =%x,",ADCF); // '1000000' Ch_6 ADCON = 0x00; // '00000000' Der 7. Bit ist immer '1' =>> 0x80 '10000000' cursor_set(i ,0); printf("%d ADCON =%x,",i ,ADCON); i++; // 13 // ============================================================================ // while(1) // Programm halten { // Kanal 6 oder // Hex. ' Bits ' ADCON = 0x26; // '100110' ADEN'1', Ch6, bereit zum Start 0xa6 '10100110' cursor_set(i ,0); printf("%d ADCON =%x,",i ,ADCON); i++; // 14 // Kanal 7 ADCON = 0x27; // '123456' ADEN'1', Ch7, bereit zum Start 0xa7 '10100111' cursor_set(i ,0); printf("%d ADCON =%x,",i ,ADCON); i++; // 15 // Start der Wandlung ADCON = ADCON | 0x08; // ADST'1', Start,Bit nicht sichtbar 0xa7 '10100111' cursor_set(i ,0); // 0xb7 '10110111' printf("%d ADCON =%x,",i ,ADCON); i++; // 16 // Warten while( (ADCON & 0x10) == 0 ); // ADEOC'0' Warten auf '1' dann 0xb7 '10110111' cursor_set(i ,0); printf("%d ADCON =%x,",i ,ADCON); i++; // 17 i = 14; // Umlauf für printf() // Auswerten 10 Bit wert = (ADDH << 2) + (ADDL & 0x03); // Add Low- an High-Byt if ( wert > summ ) { Summer=0x00; // Summer 'AN' cursor_set( 12, 1); puts("Ueberschreitung: U > +2.0 V"); } else { Summer=0x01; // Summer 'AUS' cursor_set( 12, 1); puts(" "); } cursor_set( 7, 27); printf("%3X h",wert); cursor_set( 8, 25); printf("%5d Impulse",wert); d_wert = wert * 2.44 * 0.001 ; cursor_set( 10, 25); printf("%+5.2f V", d_wert ); _wait_ms(500); }/* ende while() */ // // ============================================================================ // }/*** ende main() ***/ // ############################################################################ // // ---------------------------------------------------------------------------- // void seri(void) // Serielle Schnittstelle Initialisieren { // // Schnittstellen-Parameter zu (SS0 des cc03) SCON = 0x52; // 9600 Baud, 8 Datenbit, 1 Stopp-Bit, asynchroner Betrieb, TMOD |=0x20; // keine Paritätsprüfung. TH1 = 0xfd; // TR1 = 1; // Somit stimmen jetzt die Datenübertragungs-Parameter, TI = 1; // PT-Core ONE zu HyperTerm // } /* ende seri() */ // ---------------------------------------------------------------------------- // void cls(void) // HyperTerminal Löschen { printf("\x1b\x48"); // ESC H Cursor auf Home-Position printf("\x1b\x4a"); // ESC J Bildschirm ab Cursor-Position löschen } /* ende cls */ // ---------------------------------------------------------------------------- // void pip(void) // Piepser { putchar(0x07); } /* ende pip() */ // ---------------------------------------------------------------------------- // void kopf(void) // Programmkopf: ( Start ? ) { unsigned char c; printf("--> %s <-- Programm Start ",Programm); printf("\t Taste druecken: "); c = getchar()&7; // Code ein putchar(c); // Code aus printf("\n"); // pip(); } /* ende kopf() */ // ---------------------------------------------------------------------------- // void cursor_set(unsigned char z, unsigned char s) // Kursor Positionieren { printf("\x1b\x59%c%c",(32+z), (32+s) ); } // ---------------------------------------------------------------------------- //