megszakítások !! egy pici elakadás!
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Igen. Azért megszakítás.
A waitms sok nem más, mint egy számláló égy várakozás és egy összehasolítás a háttérben, hogy leketyegett-e...
Azaz ez bárhol megszakítható.
Próbáld ki, hogy kiadsz egy hangot a sound utasítással, vagy csak egy LED villogást. És közben az INT-en át valami beesik, és várakozást generál. (INT-ben levő program NEM szakítható meg!)
A waitms sok nem más, mint egy számláló égy várakozás és egy összehasolítás a háttérben, hogy leketyegett-e...
Azaz ez bárhol megszakítható.
Próbáld ki, hogy kiadsz egy hangot a sound utasítással, vagy csak egy LED villogást. És közben az INT-en át valami beesik, és várakozást generál. (INT-ben levő program NEM szakítható meg!)
Szia!
Csak úgy a partszélről:
Amióta van mikroproc és mikrokontroller, van megszakítás, régebben csak hardver, tehát fizikai lábon (TMS1000 a világ első uC-je), késöbb "SW" is bejött. Az INT. utasításszinten működik, tehát magasabb szintű nyelven nem látod, mi történik, csak megjön. (ahogy Robi írta, hiába WAIT 100..
ha engedélyezett INT jön, az alap utasításként megszakítja a futó programot.
Viszont azzal vitatkoznék, hogy nem lehet INT-et megszakítani.
Vannak olyan uc-k (uP), amelyek vagy prioritásba rendezik az INT-eket, jól el is lehet menni az erdőbe a megszakítási szintek átállításával, tehát magasabb prioritásu INT meg tudja szakítani az alacsonyabb prioritásút, általában jobb helyeken 3 szintet használnak. AVR-nél nincs ilyen, de ha időkritikus a dolog, akkor az INT rutinodban töröld azt a bitet, ami jelzi a uC-nek, hogy INTben van, akkor megeszi a többi megszakítást is, tehát meg lehet szakítani a megszakítást. Csak érdekességképp, egy általános uP tudásának kb 1/3-át elviszi az INT rendszer, ezért is ilyen vacak az AVR-eké, tettek rá..."majdogynem nincs is". De pl. egy DMA vezérlő bonyolultabb chip mint maga a uP. Bascomnál azonban ésszel kell kezelni a megszakítás átverését, mert a Basic INT-ben a RETURN utasítás az nem igazi RET, hanem húzza vissza a stack-ből a dolgait, no, most ha bejött másik is, akkor a RETURN nevű basic utasítás elkolbászolhat. Tehát nem kell parázni, csak észben kell tartani. Nagyon tanulságos volt disassemblerrel megnézni, milyen dolgok történnek...meg is szívtam anno.
JAni
Csak úgy a partszélről:
Amióta van mikroproc és mikrokontroller, van megszakítás, régebben csak hardver, tehát fizikai lábon (TMS1000 a világ első uC-je), késöbb "SW" is bejött. Az INT. utasításszinten működik, tehát magasabb szintű nyelven nem látod, mi történik, csak megjön. (ahogy Robi írta, hiába WAIT 100..
ha engedélyezett INT jön, az alap utasításként megszakítja a futó programot.
Viszont azzal vitatkoznék, hogy nem lehet INT-et megszakítani.
Vannak olyan uc-k (uP), amelyek vagy prioritásba rendezik az INT-eket, jól el is lehet menni az erdőbe a megszakítási szintek átállításával, tehát magasabb prioritásu INT meg tudja szakítani az alacsonyabb prioritásút, általában jobb helyeken 3 szintet használnak. AVR-nél nincs ilyen, de ha időkritikus a dolog, akkor az INT rutinodban töröld azt a bitet, ami jelzi a uC-nek, hogy INTben van, akkor megeszi a többi megszakítást is, tehát meg lehet szakítani a megszakítást. Csak érdekességképp, egy általános uP tudásának kb 1/3-át elviszi az INT rendszer, ezért is ilyen vacak az AVR-eké, tettek rá..."majdogynem nincs is". De pl. egy DMA vezérlő bonyolultabb chip mint maga a uP. Bascomnál azonban ésszel kell kezelni a megszakítás átverését, mert a Basic INT-ben a RETURN utasítás az nem igazi RET, hanem húzza vissza a stack-ből a dolgait, no, most ha bejött másik is, akkor a RETURN nevű basic utasítás elkolbászolhat. Tehát nem kell parázni, csak észben kell tartani. Nagyon tanulságos volt disassemblerrel megnézni, milyen dolgok történnek...meg is szívtam anno.
JAni
Ops. Pontosítok:
AVR-re írtam és ott is csak az AVR8 családra....
De pl. AVR-XMEGA esetén 3 szint lehet:
http://www.atmel.com/dyn/resources/prod ... oc8043.pdf
AVR-re írtam és ott is csak az AVR8 családra....
De pl. AVR-XMEGA esetén 3 szint lehet:
http://www.atmel.com/dyn/resources/prod ... oc8043.pdf
Sziasztok!
Csak annyit brekegnék még bele, hogy az INT valami miatt (úgy általánosságban) nagyon meg tudja keverni a cuccal ismerkedőket. Azért írtam, hogy nem olyan bonyolult ám (belülről eszement, de kit érdekel), de ezzel nagyon gyorsan el lehet riasztani az embereket egy életre a programozástól. Szerencsére itt nem gépi ciklusonként kell érteni a dolgot, kivéve, ha valami nagyon időkritikus vackot csinál az ember. Azt viszont nem tudtam, hogy már az X-ben van 3 szint, bár honnan tudtam volna, ha nem dolgoztam vele...
Az viszont nagyon igaz(kapu48), hogy a stack-et meg kell érteni előbb, aztán jöhetnek az egymásrafutó INT-ek meg mifenék. Persze a Bascom elfedi a nagyrészét, de félelmetesen jó dolgokat lehet csinálni, ha tudod, mit-hogyan mentett el.
(és még mindig nem tudom, mire jó a Push SP utasítás, egyszer valaki 20 éve elmagyarázta, de azóta hülyültem)
Na, jóebédhez szól a nóta mindenkinek.
JAni
Csak annyit brekegnék még bele, hogy az INT valami miatt (úgy általánosságban) nagyon meg tudja keverni a cuccal ismerkedőket. Azért írtam, hogy nem olyan bonyolult ám (belülről eszement, de kit érdekel), de ezzel nagyon gyorsan el lehet riasztani az embereket egy életre a programozástól. Szerencsére itt nem gépi ciklusonként kell érteni a dolgot, kivéve, ha valami nagyon időkritikus vackot csinál az ember. Azt viszont nem tudtam, hogy már az X-ben van 3 szint, bár honnan tudtam volna, ha nem dolgoztam vele...
Az viszont nagyon igaz(kapu48), hogy a stack-et meg kell érteni előbb, aztán jöhetnek az egymásrafutó INT-ek meg mifenék. Persze a Bascom elfedi a nagyrészét, de félelmetesen jó dolgokat lehet csinálni, ha tudod, mit-hogyan mentett el.
(és még mindig nem tudom, mire jó a Push SP utasítás, egyszer valaki 20 éve elmagyarázta, de azóta hülyültem)
Na, jóebédhez szól a nóta mindenkinek.
JAni
- szepnorbee
- Bitmanipulátor
- Hozzászólások: 122
- Csatlakozott: 2009. augusztus 31. hétfő, 6:00
Sziasztok! Gomb állapot változásra nincs valakinek mintakódja? pl. Ha tartok egy gombot, akkor játszódjon le egy folyamat (de csak egyszer és ne folyamatosan míg nyomom) aztán ha elengedem akkor egy másik folyamat (és az is csa kegyszer). Aztán míg nem történik állapotváltozás, ne történjen semmi, hanem a jelenleg beállt állapot legyen érvényben. Lehet bonyosan fogalmaztam. Küzdök ezzel de nem segít gugli.
Ha neked kell ezt végrehajtani, hogyan tennéd meg?
Folyamatábra, amiben:
- elágazás 2 irányban
- lineáris utasításvégrehajtás
- start és stop mező van?
Hol tartasz eddig?
Mintakód/elképzelés?
A adjon vki kódot, az a sültgalamb effektus!
PICBasicban vagy 8051 ASMBen jó a kód? Esetleg 80386DX-40 ASMben?
U.i.: Bocsánat ha nyers lett egy kicsit. De tessék erőlködni és legalább elindulni vmi úton...
Ha a Párizs fényeit akarom látni legalább megnézem, hogy mi megy oda (repülő, autó, bringa, gyalog) és szervezkedek. Nem pedig elmondom és várom hogy valaki odavigyen.
Gyalog is el lehet indulni (első lépések, elképzelés) és útközben úgyis segítenek (stoppolás, és kocsival). A gyalogos lennél Te, a sofőrök a stoppolásnál, meg a fórum. Az se visz el végig, de sokat segít a megtett út során... Igaz néha Moszkva fele fog vinni ....
Folyamatábra, amiben:
- elágazás 2 irányban
- lineáris utasításvégrehajtás
- start és stop mező van?
Hol tartasz eddig?
Mintakód/elképzelés?
A adjon vki kódot, az a sültgalamb effektus!
PICBasicban vagy 8051 ASMBen jó a kód? Esetleg 80386DX-40 ASMben?
U.i.: Bocsánat ha nyers lett egy kicsit. De tessék erőlködni és legalább elindulni vmi úton...
Ha a Párizs fényeit akarom látni legalább megnézem, hogy mi megy oda (repülő, autó, bringa, gyalog) és szervezkedek. Nem pedig elmondom és várom hogy valaki odavigyen.
Gyalog is el lehet indulni (első lépések, elképzelés) és útközben úgyis segítenek (stoppolás, és kocsival). A gyalogos lennél Te, a sofőrök a stoppolásnál, meg a fórum. Az se visz el végig, de sokat segít a megtett út során... Igaz néha Moszkva fele fog vinni ....
- szepnorbee
- Bitmanipulátor
- Hozzászólások: 122
- Csatlakozott: 2009. augusztus 31. hétfő, 6:00
-
Bocsi, jogos amit mondasz. Próbálkozom összehozni és egyedül, de sajna sikertelenül.
Itt tartok:
A probléma az, hogy a program az indulásakor már az M2: részt (halványítás) ismétli folyamatosan. A gombot figyelmen kívül hagyja. A B.2 por fel van húzva az 5 V tápfeszre és a kapcsoló a GND-hez érinti a port B.2-t. Biztos az IF.... THEN résznél van a galiba, de nem látom, hogy mi.
Itt tartok:
Kód: Egész kijelölése
$regfile = "attiny45.dat"
$crystal = 8000000
Dim A As Bit
Dim Ok As Bit
Dim Feny As Integer
A = 0
Config Portb.1 = Output 'pwm
Config Pinb.2 = Input 'kapcs
Config Timer0 = Pwm , Prescale = 64 , Compare B Pwm = Clear Up
Enable Timer0
Main:
Do
If Pinb.2 = 0 Then
Waitms 200
Do
If Pinb.2 = 0 And A = 0 Then
A = 1
Goto M1
End If
If Pinb.2 = 1 Then Ok = 0
A = 1
Loop Until Ok = 0
End If
If Pinb.2 = 1 Then A = 0
Goto M2
Loop
M1:
Do
Feny = Feny + 1
Pwm0b = Feny
If Feny > 255 Then Goto Main
Waitms 8
Loop
Goto Main
M2:
Do
Feny = Feny - 1
Pwm0b = Feny
If Feny = 0 Then Goto Main
Waitms 8
Loop
Goto Main
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Első látásra:
A Do-Loop-on belüli
okozza a galibát, ami a csökkentés rutinja (M2) és feltétel nélkül odaugrik.
Mondjuk 1 gombbal én úgy oldanám meg, hogy első gombnyomásra növeli, ha elérte a 255-öt, onnan csökkenti a fényerőt.
A Do-Loop-on belüli
Kód: Egész kijelölése
If Pinb.2 = 1 Then A = 0
Goto M2
Mondjuk 1 gombbal én úgy oldanám meg, hogy első gombnyomásra növeli, ha elérte a 255-öt, onnan csökkenti a fényerőt.
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
- szepnorbee
- Bitmanipulátor
- Hozzászólások: 122
- Csatlakozott: 2009. augusztus 31. hétfő, 6:00