Stránka 1 z 1

Timer u PIC16F628a

Napsal: 10 bře 2011, 14:31
od ludvaludva
Zdravím, mám takový hloupý dotaz,
nevím jak udělat v MPLABU časovač u 16F628a, vůbec nevím, jaký registry mám použít :-(
Mám PIC-C Compiler pro PIC12/14/16

Může mi někdo pomoct?

Napsal: 15 bře 2011, 07:17
od MartinOV
Jelikož jsi dotaz napsal dost obecně, odpovědi budou asi taky obecné. :)

F628A má tři vestavěné časovače (TMR0, TMR1 a TMR2). Ideální je použít je společně s přerušením a vhodným ošetřením.
Další možností je, že chceš nějakou čekací smyčku. Pak si vezmeš kterýkoliv registr z RAM a přičítáš/odčítáš jedničku do/z dané hodnoty a při pod/pře-tečení jedeš v programu dál.
Na názvy registrů se mrkni do datasheetu, měly by být stejné jako názvy čítačů (TMR0, TMR1). Pozor, TMR0 má nastavovací bity v OPTION_REG, TMR1 je má ve vlastním registru T1CON a TMR2 má T2CON. TMR2 je ještě přiřazen k PWM, ale to už jsou další detaily.
Je nutné si dát pozor na ty nastavovací registry, kolikrát jsem vyšiloval u nějakého jednoduchého programu, že mi neběželo třeba přerušení a hle, já jsem ten čítač neměl zapnutý... :)

Napsal: 16 bře 2011, 09:11
od Atlan
TMR0 = 100;
OPTION_REG = 0b00110101;
INTCON = 0;
T0CS = 0; // 0 - Timer increments on instruction clock; 1- ext pin4
T0IE = 1; // Enable interrupt on TMR0 overflow
GIE = 1; // Global interrupt enable


void interrupt isr (void)
{
if(T0IF) // Was this a timer0 overflow?
{
TMR0 = 100;
//kod
// t++;
// if ((timerun)) timerun--;
// if ((timestop)) timestop--;

T0IF = 0; // Clear interrupt flag, ready for next
}