Stránka 1 z 1

Přerušení u 16F627

Napsal: 02 srp 2008, 15:41
od MirrA1
Učím se programovat a momentálně řeším problém s přerušením.

Konkrétně chci, aby při změně stavu na RB5 procesor skočil do přerušení a vykonal tam nějakou činnost.

Našel jsem výukovou rutinu, která vykoná činnost v přerušení při změně na RB0. Takže jsem si říkal, že jen změním registr INTCON z původní hodnoty B'10010000' na hodnotu B'10001000' a přerušení bude spouštěno při změně na RB4-RB7.

Dosáhl jsem toho, že přerušení spustím změnou na RB5, ale program v přerušení "uvízne" - neustále se opakuje rutina přerušení a program neskočí do klidového stavu kdy bude čekat na podnět k přerušení. Zatím to pouze teoreticky simuluju v MPLABU.

Jinak vycházím z tohoto:
http://pandatron.cz/?154&skola_programovani_pic-10_dil

program zde:
http://pandatron.cz/elektronika2/skolp101.asm

Neporadí mě nekdo jak to správně rozchodit? :-) Předm díky

Napsal: 02 srp 2008, 17:26
od urbanek
Na začátek rutiny přerušení hned po uložení W, PCL atd. zakaž RBIE, vynuluj příznak RBIF a přečti port B. To jsou 3 podmínky pro to, aby procesor neustále neskákal do přerušení. Nulování příznaku a přečtení portu je opět vhodné znovu před povolením RBIE.
Nevím jestli tento typ PICu umožňuje povolit přerušení pouze od zvoleného pinu (např. RB5) nebo se dá povolit jen celý port B. Pokud by se dal povolit/zakázat jen celý port B, pak je potřeba zbývající piny kromě RB5 nastavit jako výstupy (nebo je potřeba hardwarově zajistit aby nebyly "v luftě")

Napsal: 05 srp 2008, 14:55
od MirrA1
Díky, funguje to :)