
Speciellt punkt 4 :
4. Start conversion:
Set GO/DONE bit (ADCON0)
Kod: Markera allt
//ADCON0 Kontrollerar operationerna i AD-Modulen
//ADCON1 Configurerar funktionerna för portarna
void InitBatteryCheck(void)
{
ADCON0=11000001; //AD CONVERT POWERED UP
ADCON1=01001110; //AN1=ANALOG IN
}
Void BatteryCheck(void)
{
static int Counter=0, Value=0, Temp; //Räknare resultat och tempfil för behandling av resultat
static char FirstPart=0, SecondPart=0; //Variabler för att behandla första och andra delen av resultatet i registrena
if(Counter<1000)
counter++; //Räknare räknas upp
else if(Counter==1)
ADCON0.GO=1;
else
Counter=0;
if(!Counter) //För att inte fylla upp bufferten måste vi vänta, dessutom måste en kondensator hinna laddas upp för att kunna läsa av ingången
{
if(ADCON0 & 0b00000000) //Kolla GO-bit ifall den är redå att läsa av från analog ingång
{
FirstPart=ADRESH; //Första 5 bitarna är ADRESH
SecondPart=ADRESL; //Sista 5 bitarna är ADRESL
Temp=FirstPart; //Första 5 bitarna läggs i Temp
Temp<<=8; //Temp skiftas 5 åt vänster
Value=(Temp|SecondPart); //Temp pollas med SecondPart som tillsammans läggs in i ByteValue
}
printNumber(Value,0,0,NEW_NUMBER); //Skriv ut ByteValue som ett nummer på Column 0, Rad 0, egen funktion för displayen... funkar
}
}
Ta det inte personligt, men den här typen av kodkommentar är inte särskilt meningsfull eftersom det inte är så svårt att lista ut vad som händer. Det brukar vara mer vettigt att spendera tid på att kommentera kod som inte är helt uppenbar, som du t.ex skrivit i koden: "Första fem bitarna är ADRESH".fruce skrev: counter++; //Räknare räknas upp
Kod: Markera allt
i := 5; // tilldela variabeln i 5
i := i + 4; // öka i med 4
writeln(i - 1); // minska i med 2 och skriv ut
Varför har du en variabel som heter "counter" och en som heter "Counter"?fruce skrev:Kod: Markera allt
if(Counter<1000) counter++; //Räknare räknas upp else if(Counter==1) ADCON0.GO=1; else Counter=0;
Se det kodblock jag citerade (dvs if(Counter<1000)... ). Författaren vill att ADCON.GO sätts till "1" om counter är "1", men den if-satsen (som handahåller infon om att counter är 1) kommer aldrig att exekveras, och därför gör inte koden det den är tänkt att göra.sodjan skrev:Jag är inte helt säker på vad du menar.