A/D einlesen und über serielle Schnittstelle ausgeben

Gast #1310927
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.