Přerušení u 16F627

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
MirrA1
Příspěvky: 531
Registrován: 30 srp 2006, 02:00

Přerušení u 16F627

#1 Příspěvek 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

Uživatelský avatar
urbanek
Příspěvky: 556
Registrován: 01 kvě 2005, 02:00
Kontaktovat uživatele:

#2 Příspěvek 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ě")

Uživatelský avatar
MirrA1
Příspěvky: 531
Registrován: 30 srp 2006, 02:00

#3 Příspěvek od MirrA1 »

Díky, funguje to :)

Odpovědět

Zpět na „Poradna“