Kör PIC 16F628A med extern kristall på 20Mhz ansluten på RA6/OSC2/CLKOUT, RA7/OSC1/CLKIN
Jag kör ingen prescaler.
Koden nedan fungerar, men den växlar till sekunder för långsamt - så jag har uppenbarligen tänkt fel någon stans.
Så här har jag tänkt när jag beräknat tiden:
Kod: Markera allt
Processorhastighet = 20 mhz
20/4 = 5 mhz (instruction clock är 5 mhz)
5 000 000 instruktioner per sekund
5 000 instruktioner per ms
5 instruktioner per us
Om man startar tmr0 på 1 så räknar den 255 steg, och det tar 51 us
Kod: Markera allt
long TT;
void interrupt() {
if(TT<=0)
{
timeSECOND++;
TT+=1000000;
}
else
{
TT-=51; // se kommentar nedan
}
TMR0 = 1;
INTCON = 0b00100000; // Set T0IE, clear T0IF
}
void main() {
TRISB = 0; // PORTB is output
timeSECOND=10;
TT=1000000;
OPTION_REG = 0b10000000;
TMR0 = 1;
INTCON = 0b10100000; // Enable TMRO interrupt
while(1)
{
calcTime();
}
}