/*****************************************************************************//*                                                                           *//*                    Demo für die ON-Chip-DAC-Einheit                       *//*                    ================================                       *//*                                                                           *//*    Name:	       DAC_1.C                                                   *//*    Funktion:    Ausgabe verschiedener Signalformen über die DAC´s         *//*    Autor:       B.v.B. / P.G.                                             *//*    Stand:       03.02.01                                                  *//*                                                                           *//*                                                                           *//*****************************************************************************/ /*** Allgemeine Festlegungen für den Compiler ***/#pragma DEBUG OBJECTEXTEND CODE/*** Einbinden von Include-Dateien ***/#include <ADuC812.h>                   // Register-Definitionen für ADuC812#include <stdio.h>                     // Standard I/O Funktionen/*** Globale Variablen ***/signed int i0,i1;/*****************************************************************************//*** Selbstgeschriebene Funktionen *******************************************//*****************************************************************************//*** Initialisierung der ser. Schnittstelle auf:   ***************************//**   9600 Bd, 8 Datenbits, keine Parität          ***************************/void ser_init(void){   SCON=0x52;	TMOD |=0x20;	TH1=0xfd;	TR1=1;	TI=1;}/*****************************************************************************//*** Ausgabe eines Wertes an einen der DAC´s   *******************************/void dac_set(unsigned char kanal, unsigned int wert, unsigned char aufl){   unsigned int low, high;   // Auflösung auswerten   if (aufl==0)                // 8 Bit Auflösung       {           // Kanal-Auswahl           if (kanal==0)               {                   DAC0L=wert;               }             else               {                   DAC1L=wert;               }         }     else                      // 12 Bit Auflösung       {           // Übergebenen Wert aufbereiten in High- und Low-Anteil          high=wert/256;          low=wert-(high*256);                        // Kanal-Auswahl          if (kanal==0)               {                   DAC0H=high;                   DAC0L=low;               }             else               {                   DAC1H=high;                   DAC1L=low;               }        }}   /*****************************************************************************//*** Ausgabe eines Sägezahn-Signales an DAC0 mit 12 Bit Auflösung   **********/void sz_out_12 (void){   printf("\n   Sz (12 Bit) laeuft, Stop mit Reset !");   i0=0;   while (1)       {          // DAC0 setzen          dac_set(0,i0,1);             i0++;                    if (i0==4096) i0=0;       }}/*****************************************************************************//*** Ausgabe eines Sägezahn-Signales an DAC0 mit 8 Bit Auflösung   ***********/void sz_out_8 (void){   printf("\n   Sz (8 Bit) laeuft, Stop mit Reset !");   // DAC´s auf 8 Bit Auflösung umstellen   DACCON=0xff;   i0=0;   while (1)       {          // DAC0 setzen          dac_set(0,i0,0);             i0++;                    if (i0==256) i0=0;       }}/*****************************************************************************//*** Ausgabe eines Dreieck-Signales an DAC1 mit 12 Bit Auflsöung   **********/void dr_out_12(void){   signed char k;      printf("\n   Dr (12 Bit) laeuft, Stop mit Reset !");   i1=0;   k=1;   while (1)       {           // DAC1 setzen           dac_set(1,i1,1);              i1=i1+k;                     if (i1==4096)               {                   i1=4094;                   k=-1;               }           if (i1==-1)               {                   i1=1;                   k=1;               }                  }}/*****************************************************************************//*** Ausgabe eines Dreieck-Signales an DAC1 mit 8 Bit Auflsöung   **********/void dr_out_8(void){   signed char k;      printf("\n   Dr (8 Bit) laeuft, Stop mit Reset !");   // DAC´s auf 8 Bit Auflösung umstellen   DACCON=0xff;   i1=0;   k=1;   while (1)       {           // DAC1 setzen           dac_set(1,i1,0);              i1=i1+k;                     if (i1==256)               {                   i1=254;                   k=-1;               }           if (i1==-1)               {                   i1=1;                   k=1;               }                  }}/*****************************************************************************//*****************************************************************************//*****************************************************************************//* Start des Hauptprogramms                                                  *//*****************************************************************************/void main(void){	// Variablen für main   unsigned char c;   // Initialisierung der ser. Schnittstelle    ser_init();      // Titel-Meldung   printf("\x1b\x48\x1b\x4a");         // Bildschirm löschen   printf("DAC-Demo 1:\n");	   // Grundinitialisierung für die DAC-Funktionsbaugruppe:       /*  - 12 Bit Mode für beide DAC´s           - DAC1-Ausgang: 0 ... VDD (+5V)           - DAC0-Ausgang: 0 ... VDD (+5V)           - DAC1-Ausgang normal           - DAC0-Ausgang normal           - Beide DAC´s nicht synchronisiert           - DAC1 eingeschaltet           - DAC0 eingeschaltet  ====>       */   DACCON=0x7f;                        // Für 8 Bit Auflösung: 0xff	// Endlos-Schleife	while(1)	    {           printf("   1) Sz an DAC0 (12 Bit)\n");           printf("   2) Dr an DAC1 (12 Bit)\n\n");           printf("   3) Sz an DAC0 ( 8 Bit)\n");           printf("   4) Dr an DAC1 ( 8 Bit)\n");           printf(" Bitte Auswahl: ");             // Eingabe           c=_getkey();                      // Auswertung           switch (c)               {                   case '1':   sz_out_12();               // Sägezahn an DAC0 (12 Bit) ausgeben                               break;                   case '2':   dr_out_12();               // Dreieck an DAC1 (12 Bit) ausgeben                                   break;                   case '3':   sz_out_8();                // Sägezahn an DAC0 (8 Bit) ausgeben                               break;                   case '4':   dr_out_8();                // Dreieck an DAC1 (8 Bit) ausgeben                               break;                }           printf("\n\n");       }// Ende des Hauptprogramms}