|
stern1
1 Beitrag
 Neuer Benutzer
|
17-11-2011 12:45
Hallo,
kann jemand bitte mir diese Funktion erklären:
unsigned Read_ADC( unsigned char channel )
{
ADCON0 &= ~0x07; ADCON0 |= 0x07 & channel; ADDATL |= ~ADDATL; while( ADCON0 & 0x10); return( ( ( (unsigned) ADDATH > 6 );
}
|
|
Rai
34 Beiträge
 Seltener Benutzer
|
17-11-2011 13:47
Hi,
kein Problem, allerdings habe ich gerade kein Datenblatt dabei, deshalb alles ausm Kopf:
ADCON0 &= ~0x07;
Die Tilde negiert alle Bits von 0x07, also könnte man auch 0xF8 schreiben.
Dann wird noch eine UND Maskierung mit dem ADCON0 register gemacht --> Die letzten 3 Bits von ADCON0 werden somit gelöscht. (Dort sollte der Kanal stehen)
ADCON0 |= 0x07 & channel;
Mit "0x07 & channel" wird sichergestellt dass nur ein "richtiger" kanal übergeben wurde, also eine Zahl zwischen 0 und 7. Alle anderen Bits würden gelöscht werden
Dann wird der Kanel mit einer ODER Maskierung in ADCON 0 geschrieben
ADDATL |= ~ADDATL;
Diese Zeile kann ich dir auswendig ohne Datenblatt nicht erklären, vermutlich wird aber hier die Wandlung gestartet indem das zuständige Bit invertiert wird.
while( ADCON0 & 0x10);
Hier wird gewartet bis der AD Wandler ein Ergebnis vorliegen hat
return( ( ( (unsigned) ADDATH > 6 );
Hier fehlt was! Prinzipiell wird aber am Schluss das höherwertige Byte um 2 Bit nach links verschoben und dann das niederwertigere Byte mit einer Maskierung draufaddiert.
Rai
|