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.
Interruptproblem
Interruptproblem
Senast redigerad av BOTTNA 17 augusti 2007, 18:42:19, redigerad totalt 1 gång.
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.
> 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
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.
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.
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.
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.