Sida 1 av 1
Interruptproblem
Postat: 17 augusti 2007, 17:58:48
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.
Postat: 17 augusti 2007, 18:01:19
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).
Postat: 17 augusti 2007, 18:08:37
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.
Interruptproblem
Postat: 19 augusti 2007, 11:46:50
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.
Postat: 19 augusti 2007, 12:39:03
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.
Postat: 19 augusti 2007, 12:46:44
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.