A/D einlesen und über serielle Schnittstelle ausgeben

Gast #1310927
Lesenswert?

Hi,

ich hab schon mehrfach hier im Forum gesucht und auch einiges 
ausprobiert, aber nach 6 Stunden ausprobieren such ich jetzt eure Hilfe.

Will ein Signal über den A/D einlesen und über die serielle 
Schnittstelle ausgeben. Habe folgende Code schon fertig und bin zu der 
Erkenntnis gekommen wenn ich in der Simulation den Wert ALTSELOP3 = 1 
setze kommt was auf der seriellen Schnittstelle raus sonst nicht.
Setze ich den Wert im Code auf 1 muss ich noch eine zustäzliche Klasse 
einbinden, die sich aber mit der reg167.h nicht verträgt und mir 
Fehlermeldungen ausgibt.

Vielleicht hat jemand ja eine Idee bzw. ne andere Lösung für mich.

Danke im vorraus!
1
/*********************************************/
2
/*                       */  
3
/*  Beipsielprogramm zur Anzeige an Port 2   */
4
/*                       */
5

6
#include <reg167.h>          // einbinden der 80C167 Header Datei
7
#include <stdio.h>          // Standard I/O Funktionen einbinden
8

9

10
void wait (void) {          // wait Funktion
11
  unsigned long i;
12
  for (i=0; i<150000; i++) {;}  // Verzögerungsschleife    
13
}
14
        
15
void ser_init (void) {        // Initialisierungsfunktion für die serielle Schnittstelle
16
  
17
  P3 |= 0x0400;          // Port 3.10 auf Output latch (TXD) setzen
18
  DP3 |= 0x0400;          // Port 3.10 für Output konfigurieren (TXD output)
19

20
  DP3 &= 0xF7FF;          // Port 3.11 für Input konfigurieren (RXD input)
21

22
  S0TIC = 0x80;          // Transmit Interrupt Flag setzen
23
  S0RIC = 0x00;          // Receive Interrupt Flag löschen
24
  S0BG = 0x40;          // Baudrate auf 9600 einstellen bei 20MHz
25
  S0CON = 0x8011;          // Serial Mode setzen  
26
}
27

28
void main (void) {
29
  int iwert=-1;
30
  float u_ein=-1;
31

32
  ser_init();            // Aufruf der Init-Funktion für serielle Schnittstelle
33
  ADCON = 0x0000;          // ADM -> Fixed Channel Continuous Conversion 
34

35
  
36
  while(1) {            // Endlosschleifen
37
    
38
    ADST = 1;          // Starte AD
39
    while(ADBSY);        // Warten solange AD aktiv
40
    iwert = ADDAT & 0x3ff;    // Wert auslesen und abspeichern
41
    u_ein = 5. * iwert / 1023.;  // Wert umrechnen auf Volt
42
    printf ("Spannung %f \n", u_ein);
43
    wait();
44

45
   }
46
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren