 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mkosmac Član


Pridružen-a: Čet 26 Mar 2009 22:18 Prispevkov: 301 Aktiv.: 1.52 Kraj: Limbarska Gora
|
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.42
|
Objavljeno: Sob Mar 24, 2012 10:33 pm Naslov sporočila: |
|
|
V datasheetu je razloženo vse, na dolgo in široko. Tudi timerji... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
hahalolek Član


Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.09 Kraj: Domžale
|
Objavljeno: Ned Mar 25, 2012 7:42 pm Naslov sporočila: |
|
|
Do sedaj sem to sestavil in ne dela:
Koda: |
int counter=1;
void main() {
T08BIT=1;
T0CS=0;
PSA=1;
TMR0ON=1;
while (1) {
}
}
void interrupt() {
counter++;
} |
Tole mi javi:
5 324 Undeclared identifier 'T08BIT' in expression test timerja in interuptov.c
6 318 Assigning to non-lvalue 'T0CS' test timerja in interuptov.c
7 318 Assigning to non-lvalue 'PSA' test timerja in interuptov.c
9 324 Undeclared identifier 'TMR0ON' in expression test timerja in interuptov.c
0 102 Finished (with errors): 25 mar 2012, 19:36:07 test timerja in interuptov.mcppi _________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Ned Mar 25, 2012 8:01 pm Naslov sporočila: |
|
|
Pa kaj MikroC ne ponuja kakšnih tutorialov ali primerov s katerih bi se lahko naučil? Po moje je spraševanje takšnih splošnih stvari precej zamudno. Poglej si kak primer in ti bo v 5 minutah precej več jasno. Raje, kot da čakaš tu na pomoč.
Na žalost nimaš ničesar specifičnega, da bi ti lahko odgovorili. Redko kdo pa želi voditi tečaj programiranja, sploh ker je tega toliko na spletu...
Absolutno, na podlagi tega, kar si napisal, raje preberi kakšen tutorial in preglej primere. Bo lažje. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
hahalolek Član


Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.09 Kraj: Domžale
|
Objavljeno: Pon Mar 26, 2012 3:24 pm Naslov sporočila: |
|
|
Evo sem malo poiskal in mi sedaj program builda ampak sem sprobal v debugu in mi TMR0 sploh ne prišteva in ne skoči v interrupt.
Koda: |
int count=0;
void main() {
INTCON=0b10100000;
OPTION_REG=0b10000000;
TMR0=10;
while (1) {
}
}
void interrupt() {
if (INTCON.T0IF = 1) {
count++;
INTCON.T0IF=0;
TMR0=10;
}
} |
_________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali.
Nazadnje urejal/a hahalolek Pon Mar 26, 2012 5:35 pm; skupaj popravljeno 2 krat |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Pon Mar 26, 2012 5:32 pm Naslov sporočila: |
|
|
MikroC-ja ne poznam in ne vem, če je funkcija interrupt() že kje napisana v kakšni knjižnici, vendar v tem primeru ti prav gotovo manjka vsaj kakšen #include.
Kako naj program ve, da želiš ob interruptu klicati funkcijo interrupt()?
Če je interrupt pravilno definiran, bo program counter (PC) ob tem eventu skočil na interrupt lokacijo. Poglej za tvoj uC kje to je. Pri malih picih 16 serije je to na adresi 0x05 ali 0x20. Če se pa na tej lokaciji ne nahaja koda za hendlanje interupta, se pač ne bo izvedla.
Poglej med primeri, če je kakšen, ki vsebuje kakršnekoli interupte. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
hahalolek Član


Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.09 Kraj: Domžale
|
Objavljeno: Pon Mar 26, 2012 5:53 pm Naslov sporočila: |
|
|
Očitno da ne dela interrupt v debugerju ker mi tudi primer ki je bil zraven ni delal.
Bom moral to testirati na plati. _________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
 |
MvE Član


Pridružen-a: Ned 04 Jan 2009 12:24 Prispevkov: 146 Aktiv.: 0.73 Kraj: MB
|
Objavljeno: Sre Mar 28, 2012 11:15 pm Naslov sporočila: |
|
|
Vidim, da si že ugotovil. Ne vem pa zakaj imaš v funkciji count, ki se ti povečuje?
Drugače pa imam en kratki program, ki sem ga hotel že prej prilepiti. Če na RA0 priklopiš LED z uporom, bi morala utripati na približno 1 s. Če ni kakšne napake upam, da je razumljivo napisano:
Koda: |
int stevec = 0;
//Tukaj se zacne prekinitvena funkcija, v MikroC se napise tako, v MPLAB-u je nekoliko drugace
void interrupt() {
stevec++;
//Ce je vzrok prekinitve T0IF in ce je stevec vecji ali enak 15 se stanje na izhodu RA0 spremeni
if (INTCON.T0IF == 1 && stevec >= 15) {
PORTA.F0 = ~PORTA.F0;
stevec = 0;
}
INTCON.T0IF = 0; //Izbrisemo T0IF, v nasprotnem primeru bi ponovno vstopili v prekinitveno funkcijo
}
void main() {
TRISA = 0x00000000; //Vsi pini A so izhodi
PORTA = 0x00000001; //Vklopimo samo pin RA0
//Nastavimo prekinitve
INTCON = 0x10100000;
//0x1....... omogoci prekinitve
//0x..1..... T0IE postavimo na 1 da omogocimo vklop prekinitve povzrocenega zaradi timerja 0
//0x.....0.. T0IF postavimo na 0 saj bi nam v nasprotnem primeru takoj sprožil prekinitev, je pokazatelj da se je sprožila prekinitev zaradi timerja 0
//Nastavimo timer 0
OPTION_REG = 0x00001111;
//0x..0..... izberemo notranjo uro
//0x...0.... povečanje pri prehodu iz nizkega stanja na visokega
//0x....1... preddelilnik je namenjen timerju 0
//0x.....111 preddelilnik je nastavljen na 256
while(1) {
}
} |
Nazadnje urejal/a MvE Pet Mar 30, 2012 8:56 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
hahalolek Član


Pridružen-a: Sob 29 Maj 2010 11:49 Prispevkov: 199 Aktiv.: 1.09 Kraj: Domžale
|
Objavljeno: Čet Mar 29, 2012 4:27 pm Naslov sporočila: |
|
|
Hvala za ta primer
Count sem imel zaradi istega razloga kot ti samo da še nisem dal v program za prižiganje ledice. _________________ Lp Blaž
Prvi poklic na svetu je bil električar. Še preden je bog rekel naj bo luč, so oni že kable napeljevali. |
|
Nazaj na vrh |
|
 |
surla Član

Pridružen-a: Ned 14 Dec 2003 15:22 Prispevkov: 722 Aktiv.: 3.05 Kraj: Ljubljana
|
Objavljeno: Čet Mar 29, 2012 9:47 pm Naslov sporočila: |
|
|
A ni treba v zadnjem primeru ob izhodu iz interupta tudi int števec dati na nič? |
|
Nazaj na vrh |
|
 |
MvE Član


Pridružen-a: Ned 04 Jan 2009 12:24 Prispevkov: 146 Aktiv.: 0.73 Kraj: MB
|
Objavljeno: Pet Mar 30, 2012 8:58 am Naslov sporočila: |
|
|
Pa res, hvala za opozorilo. Sem že popravil.
LP |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 491 dni
Powered by phpBB © 2001, 2005 phpBB Group
|