hallo alle, Ich arbeitet mit AT89C51CC01. Ich habe ein ADC-Programm geschrieben wie folgt. #include <stdio.h> #include "reg_c51.h" // Standard-Konvertierung // Die Variable "Kanal" den Kanal enthält, zu konvertieren // Die Variable "value_converted" ist ein unsigned int #define Kanal P1_7 // ADC-Eingang #define Value_converted P0 // ADC-Ausgang void main () ( ADCF = 0x80; // configure-Kanal P1.7 für ADC ADCON = 0x20; // Aktivieren des ADC ADCON & = 0xF8; // Lösche das Feld SCH [2.00] ADCON | = Kanal; // Select-Kanal ADCON | = 0x08; // Konvertierung starten im Standard-Modus // Warten Flagge End of Conversion while ((ADCON & 0x01)! = 0x01) ( ADCON & = 0xEF; value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert ) while (1) () ) In diesem Programm meinen Analogen Eingangs-Pin ist p1_7 und Ausgang Port ist P0. Ich kann geben die Analog signal beim P1_7 pin aber keine Ausgang kommt von P0-Port gegeben. Weiß ich nicht, warum? Ich habe richtig geschreiben value_converted = (ADDH <<2) + (ADDL); #define Value_converted P0 // ADC ausgang Warum dann dieses Programm nicht die Ausgang geben? Bitte überprüfen Sie dieses Programm. Empfehlen Sie mir für dieses Problem. Vielen Dank im Voraus.
weil ein ADC einen analogen Eingang hat, aber einen digitalen Ausgang. um einen digitalen Wert in einen analogen umzusetzen benötigst du einen DAC.
while ((ADCON & 0x01)! = 0x01) ( ADCON & = 0xEF; value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert ) ich habe etwas mühe den syntax zu verstehen, aber ggf. macht das mehr sinn: while ((ADCON & 0x01) != 0x01); ADCON &= 0xEF; // was macht diese zeile? value_converted = (ADDH << 2) + ADDL; // Lesen Sie den Wert
Look again
1 | // Warten Flagge End of Conversion
|
2 | while ((ADCON & 0x01)! = 0x01) |
3 | (
|
4 | ADCON & = 0xEF; |
5 | value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert |
6 | )
|
Aha. while the ADC is not ready with its value, you do: turn off the ADC read the value You want to read the value from the ADC when the ADC has finished its work. So you have to wait until it is finished! You want
1 | // Warten Flagge End of Conversion
|
2 | while ((ADCON & 0x01)! = 0x01) |
3 | ; // do nothing |
4 | |
5 | // now the value is ready, get it ...
|
6 | value_converted = (ADDH <<2) + (ADDL); // Lesen Sie den Wert |
7 | |
8 | // ... and turn of the ADC
|
9 | ADCON & = 0xEF; |
noch was: wenn "(ADDH << 2) + ADDL" grösser als '1' ist, wird der ausgangspin auf high sein; und wenn "(ADDH << 2) + ADDL" '0' ist, wird der ausgangspin auf low sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.