Interruptproblem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
BOTTNA
Inlägg: 7
Blev medlem: 13 augusti 2007, 18:47:46
Ort: DINGLE

Interruptproblem

Inlägg av BOTTNA »

Hej alla!
Jag använder mikrobasic och har försökt lära mig hur interrupt funkar.Jag kan väl säga att jag har
fattat det mesta ang register mm. Om man söker i olika forum efter exempel hur man skriver interruptprogramm, så handlar det mest om att
få LEDar att blinka.Vad jag skulle vilja veta är hur man åstadkommer
interrupt i ett programm, efter en viss tid till exempel 5 S.
Senast redigerad av BOTTNA 17 augusti 2007, 18:42:19, redigerad totalt 1 gång.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Interrupt i sig kan ju nyttjas av många saker, men du är nog ute efter timerinterrupt.
Men du bör nog tala om *vad* (hehe, sodjans fel) du ska ha det till, och vad du ska ha det *på* (oops).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Processor ?

> efter en viss tid till exempel 5 S.

Läs på om timders.
Ingen timer kan ge 5 s direkt (om du inte kör processorn väldigt långsamt),
så du får helt enkelt räkna ett antal interrupt tills det har gått 5 s.

Om det är mitt blinka-en-LED program som du har hittat, så duger
det aldeles utmärkt att utgå från.
BOTTNA
Inlägg: 7
Blev medlem: 13 augusti 2007, 18:47:46
Ort: DINGLE

Interruptproblem

Inlägg av BOTTNA »

Hej igen!
Jag uttryckte mig oklart.
Det är förmodlingen timerinterrupt som skall användas.Att man kan räkna interrupt, det har jag förstått.Jag har också experementerat med detta,
och vet ungefär hur man går till väga.
Koden nedan går ut på, som ni ser, att lysdioden blinkar, om tryckknapp
kopplad till portA.0 eller A.1, trycks ned.
Jag antar att det måste vara så, att när någon av knapparna trycks ned,
så börjar timern att räkna. Om man släpper upp knappen efter tex 1 S, så
skall timern nollställas, men om man håller någon av knapparna nedtryckt
för länge,3 till5 S (eller den tid som passar bäst till slut), så skall man få
interrupt, så att lysdioden slocknar. För att få lysdioden att blinka igen måste man släppa upp knappen och trycka ned den på nytt.
Detta har jag inte fått att fungera.
Jag vet inte om det är möjligt att åstadkomma, men jag vänder mig till
Forumet, och hoppas att någon skall ha vänligheten, och tiden att titta
på problemet.
Här följer koden

program TEST
'**********************
'Mikrokontroller: PIC16F84
'Datum 070819
'Skrivet i mikrobasic
'**********************
main:
TrisB=0 'B är utgång
TrisA=1 'A är ingång
while (1)
'**********************
if (PortA.0=1 'Tryckbrytare till portA.0 till
Then PortB.1=1 'LED till portB.1 blinkar, till i -
delay_ms(100) '0,1 S
PortB=0
delay_ms(900) 'Från i 0,9 S
else PortB.1=0
'**********************
if PortA.1=1 'Tryckbrytare till portA.1 till
Then PortB.1=1 'LED till portB.1 blinkar, till i-
delay_ms(500) '0,5 S
PortB=0
delay_ms(500) 'Från i 0,5 S
else PortB.1=0
'**********************
end if
if wend
end.
wend
end.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Använd code-taggarna när du postar kod.
Används gärna något modernare/bättre än 16F84!
Använd *antingen* delay-rutiner (dåligt) eller timers (bättre).
Använd inte Basic, så förstår du också vad du gör...

För övrigt är det du vill göra inget speciellt problem.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

För den enkla funktionen (om detta är allt du vill) så behövs inte interupt.

Timerinterupt inträffar när timern slår om från 255 eller 65535 till 0.

Alltså kan du tex göra så att timern måste slå om (tex) 5 gånger före den gör det du vill. Detta görs genom att en variabel tickar upp varje gång interuptet inträffar och du har knappen nedtryckt, är knappen inte nedtryckt nollas variabeln.
Skriv svar