Advertisement
Guest User

Untitled

a guest
Oct 10th, 2012
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.10 KB | None | 0 0
  1. /********************************************************************************/
  2. /*                                                                              */
  3. /*     Betrieb des PT - First Step!                                             */
  4. /*                                                                              */
  5. /*     Programm:            Betrieb des ON-Chip A/D-Wandlers und Darstellung    */
  6. /*                          der Wandlungsergebnisse auf HyperTerm!              */
  7. /*                                                                              */
  8. /*     Autoren:             P.G. / B.v.B.                                       */
  9. /*                                                                              */
  10. /*     Zielsystem:          PT - First Step, Prozessor: AT89C51CC03 (Atmel)     */
  11. /*                                                                              */
  12. /*     IDE/C-Compiler:      uC/51 (Wickenhäuser)                                */
  13. /*                                                                              */
  14. /*     Letzte Änderung:     13.01.2010                                          */
  15. /*                                                                              */
  16. /*     Datei:               AD_WANDLER.c                                        */
  17. /*                                                                              */
  18. /********************************************************************************/
  19.  
  20. /*** Einbinden von Include-Dateien ***/
  21. #include <stdio.h>                      // Standard Ein-/Ausgabefunktionen
  22. #include <at89C51cc03.h>                // CC03er-Grundregister
  23.  
  24. /********************************************************************************/
  25. /*  Die Funktion void seri_init(void) initialisiert die ser. Schnittstelle des  */
  26. /*  CC03ers bei einer Taktfrequenz von 11,0592MHz mit nachfolgenden Schnitt-    */
  27. /*  stellen Parametern: 9600 Bd, 1 Stopp-Bit, keine Parität, asynchr. Betrieb!  */
  28. /********************************************************************************/
  29.  
  30. void seri_init(void)
  31.   {
  32.     SCON=0x52;
  33.     TMOD |=0x20;
  34.     TH1=0xfd;                      
  35.     TR1=1;
  36.     TI=1;
  37.   }
  38.  
  39. /********************************************************************************/
  40. /*  Funktion void clear_screen(void) löscht den Terminal Bildschirm!            */
  41. /********************************************************************************/
  42.  
  43. void clear_screen(void)
  44.   {
  45.     printf("\x1b\x48\x1b\x4a");
  46.   }
  47.  
  48. /********************************************************************************/
  49. /*  Funktion void set_cursor(unsigned char z, unsigned char s) positioniert den */
  50. /*  Terminal Cursor auf die angegebene Position:                                */
  51. /*  Parameter z := Zeile, Parameter s := Spalte                                 */
  52. /********************************************************************************/
  53.  
  54. void set_cursor(unsigned char z, unsigned char s)
  55.   {
  56.     printf("\x1b\x59%c%c",(32+z),(32+s));
  57.   }  
  58.  
  59. /********************************************************************************/
  60. /*  Die Funktion unsigned int mw_erf10(unsigned char kanal) dient zum Betrieb   */
  61. /*  des ON-Chip A/D-Wandlers des AT89C51CC03. Der Funktion wird der Eingangs-   */
  62. /*  kanal übergeben und sie liefert ein 10-Bit Wandlungsergebnis als Funktions- */
  63. /*  wert zurück.                                                                */
  64. /*  Wichtig:        Diese Funktion setzt voraus, das die Grundinitialisierung   */
  65. /*                  des ON-Chip A/D-Wandlers ausserhalb der Funktion, also      */
  66. /*                  z. B. im Hauptprogramm erfolgt. Zur Grundinitialisierung    */
  67. /*                  muss der A/D-Wandler eingeschaltet werden, also das         */
  68. /*                  ADEN-Bit im ADCON SFR gesetz werden ( ADCON = 0x20) und     */
  69. /*                  der zu wandelnde Eingangskanal im SFR ADCF als Analog-      */
  70. /*                  eingang definiert werden (z. B. ADCF = 0xff ->              */
  71. /*                  gesamter Port 1 als Analogeingang definiert!                */
  72. /*  Parameter kanal := Auswahl des A/D-Wandler Eingangskanals (0..7)            */
  73. /********************************************************************************/
  74.  
  75. unsigned int mw_erf10(unsigned char kanal)
  76.   {      
  77.     unsigned int erg;                       // Variable für 10-Bit Wandlungsergebnis
  78.     ADCON = (ADCON & 0xe8);                 // Kanalauswahl und Wandlungsende-Bit rücksetzen!
  79.     ADCON = (ADCON | (0x08+kanal));         // Kanalauswahl und Start der einmaligen Wandlung!
  80.     while((ADCON & 0x10) == 0);             // Warte bis A/D-Wandlung beendet ist!
  81.     erg = ((ADDH << 2) + (ADDL & 0x03));    // Ergebnisregister auslesen u. zusammenbauen!
  82.     return(erg);
  83.   }
  84.  
  85. /********************************************************************************/
  86. /*** Start des Hauptprogramms! **************************************************/
  87. /********************************************************************************/
  88.  
  89. void main(void)
  90.   {
  91.     unsigned int ANA_INT1, ANA_INT2;                    // Hilfsvariablen zur Messwertausgabe
  92.     float ANA_SPG1, ANA_SPG2;                           // Hilfsvariablen zur Spannungsausgabe
  93.     seri_init();                                        // Initialisierung der ser. Schnittstelle
  94.     clear_screen();                                     // Bildschirm löschen
  95.  
  96.     printf(" Betrieb des ON-Chip A/D-Wandlers! \n");    // Textmeldungen und Bildschirmmaske auf Hyperterm
  97.     printf("===================================\n\n");
  98.     printf("   Programm laeuft ... \n\n\n\n\n");
  99.  
  100.     printf(" Wandlungsergebnisse:      P1.6:      P1.7:\n\n");
  101.     printf(" Hexadezimal:\n");
  102.     printf(" Dezimal:\n");
  103.     printf(" Spannung:                      V         V");
  104.  
  105.     ADCF = 0xc0;                                        // Port P1.6 und P1.7 als Analogeingang!
  106.     ADCON = 0x20;                                       // ON-Chip A/D-Wandler eingeschaltet!
  107.     while(1)                                            // Endlosschleife!      
  108.       {
  109.         ANA_INT1 = mw_erf10(6);                         // 10-Bit Messwert an Port P1.6 erfassen!
  110.         ANA_INT2 = mw_erf10(7);                         // 10-Bit Messwert an Port P1.7 erfassen!
  111.         ANA_SPG1 = ANA_INT1 * 2.5/1024;                 // Spannungswert Port P1.6 berechnen!
  112.         ANA_SPG2 = ANA_INT2 * 2.5/1024;                 // Spannungswert Port P1.7 berechnen!
  113.         set_cursor(10, 27);                              // Cursor positionieren und Werte
  114.         printf("%5x      %5x", ANA_INT1, ANA_INT2);     // auf HyperTerm ausgeben!
  115.         set_cursor(11, 27);
  116.         printf("%5u      %5u", ANA_INT1, ANA_INT2);
  117.         set_cursor(12, 27);
  118.         printf("%5.3f      %5.3f", ANA_SPG1, ANA_SPG2);
  119.       }
  120.   }
  121.  
  122. /*******************************************************************************************/
  123. /*** Ende des Hauptprogramms, d.h. Ende des gesamten Programms! ****************************/
  124. /*******************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement