Forum: Mikrocontroller und Digitale Elektronik A/D einlesen und über serielle Schnittstelle ausgeben


von Dennis (Gast)


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
}

von Dennis (Gast)


Lesenswert?

zusatz:

benutze das Keil MCB-XC167 Board mit Keil uVision 3

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.