#include // Register Set of 80C167 controller #include // Standard I/O functions int Buffer[2]; int PWin, PPin; // Pulsweiteneingang, Pulspauseneingang float Pulsweite, Pulspause; float aufloesung = 0.0048828125; //Auflösung 5V/10Bit...5V/1024 void init_PEC(void){ SRCP7 = (int) &ADDAT; // Sourcepointer 7 wird mit Adresse des // Ergebnisregisters der A/D Umsetzung geladen DSTP7 = (int) &Buffer; // Destinationspointer 7 wird mit Anfangsadresse // eines Puffers geladen PECC7 = 0x0202; // COUNT = 0x02 : 2 Wort-Transfer // BWT = 0 : Worttransfer // INC = 01 : DSTP7 um ein Wort erhöhen } void init_AD_single(void){ ADCIC = 0x7F; // Interruptpriorität setzen // ILVL=15; GLVL=3 --> PEC-Kanal 7 // ADCIE=1 --> enable Interrupt ADCON = 0x0021; } void AD_conversion(void){ while(ADBSY); ADST=1; while (ADBSY); } void Pufferbearbeitung(void){ PWin = Buffer[0] & 0x03FF; Pulsweite = PWin * aufloesung; PPin = Buffer[1] & 0x03FF; Pulspause = PPin * aufloesung; } void Anzeige(void){ P3 |= 0x0400; DP3 |= 0x0400; S0TIC=0x80; S0RIC=0x80; S0BG=0x40; S0CON=0x8011; printf("Pulsweite = %f V\n", Pulsweite); printf("Pulspause = %f V\n", Pulspause); printf("Buffer-Adresse = 0x%p\n", Buffer); printf("Buffer[0]-Inhalt = 0x%p\n", Buffer[0]); printf("Buffer[1]-Inhalt = 0x%p\n", Buffer[1]); } void main (void){ // execution starts here IEN = 1; while(1){ init_PEC(); // Initialisierung PEC init_AD_single(); // Initialisierung ADC AD_conversion(); Pufferbearbeitung(); Anzeige(); } }