Hey Leute, ich habe ein Problem mit der ADC des CC03er's. Wir haben grade angefangen µC zu programmieren und ich frage mich was manche Programmzeilen bezwecken. Das Programm
1 | /*** Einbinden von Include-Dateien ***/
|
2 | |
3 | #include <stdio.h> |
4 | #include "studi.h" // enthält die Befehle für die Seri.Schnittstelle und eine Wait Funktion |
5 | |
6 | // A/D-Wandler SFRs:
|
7 | near unsigned char ADCF @ 0xf6; |
8 | near unsigned char ADCON @ 0xf3; |
9 | near unsigned char ADDH @ 0xf5; |
10 | near unsigned char ADDL @ 0xf4; |
11 | |
12 | unsigned char bit SUMMER @ 0xb4; // SUMMER |
13 | |
14 | /**************************************************************************
|
15 | Start des Hauptprogramms ***************************************************************/
|
16 | |
17 | |
18 | void main (void) // Start des Hauptprogramms |
19 | {
|
20 | |
21 | unsigned int messwert; |
22 | float spgwert; |
23 | |
24 | seri_init(); |
25 | clear_screen(); |
26 | printf("Programm gestartet!\n"); |
27 | |
28 | // Kanal 4 einstellen und A/D-Wandler auf Standby setzten: // Labor Kanal 0!!!
|
29 | ADCF = 0x01; // DIESE ZEILE IST MIR UNKLAR |
30 | ADCON = 0x20; // DIESE ZEILE IST MIR UNKLAR |
31 | |
32 | while(1) { |
33 | |
34 | // ADSST = 1:
|
35 | ADCON |= 0x08; // DIESE ZEILE IST MIR UNKLAR |
36 | |
37 | // Warten, bis ADEOC = 1:
|
38 | while((ADCON & 0x10) != 0x10); // DIESE ZEILE IST MIR UNKLAR |
39 | |
40 | // Danach ADEOC = 0 wieder setzen:
|
41 | ADCON &= 0xef; // DIESE ZEILE IST MIR UNKLAR |
42 | |
43 | // Ergebnis aus ADDH und ADDL auslesen und zwischenspeichern:
|
44 | messwert = (ADDH<<2) + (ADDL); // DIESE ZEILE IST MIR UNKLAR |
45 | |
46 | // Den Spannungswert berechnen und abfragen, ob dieser >= 1,8V ist:
|
47 | spgwert = (2.5/1024)*messwert; |
48 | |
49 | if(spgwert>=1.8) { |
50 | SUMMER = 0; |
51 | } else { |
52 | SUMMER = 1; |
53 | }
|
54 | |
55 | // Ergebnis in dezimal, hexadezimal und als Spannungswert ausgeben und 500ms warten:
|
56 | |
57 | printf("Dezimal-Messwert: %u\n", messwert); |
58 | printf("Hexadezimal-Messwer: %x\n", messwert); |
59 | printf("Spannunswert: %.3f\n", spgwert); |
60 | |
61 | _wait_ms(500); |
62 | |
63 | }
|
64 | |
65 | }
|
66 | |
67 | /**************************************************************************
|
68 | Ende des Hauptprogramms, d.h. Ende des gesamten Programms! *****************************/
|
danke für eure Hilfe im voraus. Mfg Dennis