PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8Bit abfragen Silabs C8051F020?



niki1
15.04.2010, 17:51
Hallo Leute,

ich benutze einen Silabs C8051F020, und wollte einen ADC konfigurieren, und ich bin bei meinem Programm soweit das ich nur mehr das INT Flag abfragen muss, nun leider ist das nicht bitaddressierbar, deshalb muss ich gleich 8bit abfragen, nur hab ich bis jz noch nie bzw weiß nicht wie man aufeinmal 8 bit abfragt?

Mfg niki1

sast
15.04.2010, 19:56
The AD0BUSY bit is set to logic 1 during conversion and restored to logic 0 when conversion is complete. The falling
edge of AD0BUSY triggers an interrupt (when enabled) and sets the AD0INT interrupt flag (ADC0CN.5). Converted
data is available in the ADC0 data word MSB and LSB registers, ADC0H, ADC0L. Converted data can be either left or right justified in the ADC0H:ADC0L register pair (see example in Figure 5.11) depending on the programmed
state of the AD0LJST bit in the ADC0CN register.
When initiating conversions by writing a ‘1’ to AD0BUSY, the AD0INT bit should be polled to determine when a conversion has completed (ADC0 interrupts may also be used). The recommended polling procedure is shown below.
Step 1. Write a ‘0’ to AD0INT;
Step 2. Write a ‘1’ to AD0BUSY;
Step 3. Poll AD0INT for ‘1’;
Step 4. Process ADC0 data.

Wo liegt da dein Problem? Das kannst du ja fast schon so abschreiben.

sast

niki1
15.04.2010, 21:26
Ja aber das ist für den 12Bit Wandler, ich verwende den 8 Bit Wandler, und dessen AD1INT Bit ist nicht BITadressierbar, vom 12Bit Wandler jedoch schon! Das ist mein Problem nun weiß ich nicht wie ich AD1INT abfragen soll das im ADC1CN Register steht ?!?!

Mfg niki1

Richard
15.04.2010, 21:46
Dann lade das ganze Byte/Register und mach mit dem entsprechenden Bit eine
AND Verknüpfung. Wenn die "War = 1" ist, ist die Wandlung fertig.

11100111 z.B. Register
00000100 AND
-----------------------
00000100 Ergebnis


Welche Bit`s jetzt Verknüpft werden müssen sollte das Datenblatt
sagen können. :-)

Gruß Richard

Peter1060
15.04.2010, 21:53
moin moin,

lade AD1INT in den Accu und lege die Bitmaske für das Bit drauf. Ist der Accu 0 war das Bit nicht gesetzt.

Mit Gruß
Peter

niki1
15.04.2010, 22:47
Oke hab es so gemacht, nur die Sache ist die, dass ich nicht wirklich einen Richtigen Vergleichsvefehl finde .. kann mir jemand helfen ... denn beim JB A, again meckert der Assambler ..


mov A, ADC1CN ; Register in ACCU
anl A, #00100000b ;Bitmaske

again: jb A, again ; wenn ACCU 1 spring
anl ADC1CN, #11011111b
orl ADC1CN, #00010000b ;Busybit wieder setzen

jmp again

END

NACHT niki1

Peter1060
16.04.2010, 06:45
moin moin,

bei Deine Abfrage wird NIE etwas und der Assembler meckert wegen fehlender Bitangabe bei JB....das steht aber in jeder Doku.

StartADU: ; UP: starte ADU und warte bis fertig
anl ADC1CN, #11011111b
orl ADC1CN, #00010000b ;Busybit setzen
again: mov A, ADC1CN ; Register in ACCU
jb A.5, again ;warte bis not Busy
Ret ; ok., ADU fertig


Mit Gruß
Peter

niki1
16.04.2010, 09:05
Hallo Peter,

danke es klappt einwandfrei, nur bei dem heißt es nicht A.5 sondeern ACC.5 aber vielen Dank nochmal ..

MFG niki1

Peter1060
16.04.2010, 10:42
ja, aber..
da ich schreibfaul bin, habe ich in meinem Assembler beides eingebaut...