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 | }
|