timers/ledswitch_tmr0.c fájlreferencia

#include "piccolo_all.h"
#include "timers.h"

Ugrás a fájl forráskódjához.

Makródefiníciók

#define USE_OR_MASKS
#define SW1_PRESSED()   SW1_minta==0
#define SW1_RELEASED()   SW1_minta==1
#define SW3   PORTBbits.RB5
 SW3 kapcsoló RB5-re csatlakozik.

Enumerációk

enum  ISRSTATE { WAIT_FOR_PRESS = 0, WAIT_FOR_RELEASE }
enum  MAINSTATE {
  STATE_RESET = 0, STATE_WAIT_FOR_PNR1, STATE_WAIT_FOR_PNR2, STATE_BLINK,
  STATE_WAIT_FOR_RELEASE3
}

Függvények

void hi_isr (void)
 Magas prioritású programmegszakítás kiszolgálása.
void lo_isr ()
 Alacsony prioritású programmegszakítás kiszolgálása.
void printNewState (MAINSTATE currentState)
void main (void)

Változók

volatile unsigned char delay
 késleltetés számlálója
volatile unsigned char SW1_minta
 a nyomógomb mintavételezett állapota
volatile unsigned char pnrSW1
 Press & Release szemafor.
ISRSTATE isrState = WAIT_FOR_PRESS
 ISR állapota.
MAINSTATE LastState = STATE_RESET
 Az utoljára kiírt állapot.


Részletes leírás

Annak bemutatása, hogyan használhatjuk a periodikus programmegszakítást egy nyomógomb pergésmentesítésére, feleslegessé téve a pergésmentesítő késleltetések alkalmazását. Az állapotgép a főprogramban van megvalósítva, de a nyilvántartott állapotok számát csökkentettük azáltal, hogy a nyomógomb megnyomás és fölengedés figyelését egy másik állapotgép végzi, ami az interrupt kiszolgáló eljárásban van megvalósítva, s egy szemafor állításával jelzi a főprogramnak a nyomógomb lenyomás és felengés ciklusának bekövetkeztét. A szemafort az ISR állítja '1'-be és a főprogram törli.

A program véges állapotgép megközelítéssel valósítja meg a LED1 kijelzőnek az SW1 nyomógombbal és az SW3 kapcsolóval történő vezérlését az alábbiak szerint:

  1. LED1-et kikapcsoljuk
  2. Az SW1 nyomógomb megnyomását és elengedését követően LED1-et bekapcsoljuk.
  3. Az SW1 nyomógomb újabb megnyomását és elengedését követően a programot az SW3 állásától függően így folytatódik:
    • Ha SW3 = 0 (a kapcsoló zár), akkor az 1. pontnál folytatjuk
    • Ha SW3 = 1 (a kapcsoló nyitott), akkor a 4. pontnál folytatjuk
  4. Villogtatjuk LED1-et (LED1 állapotának átbillentése után 100 ms várakozás következzen)
  5. Az SW1 nyomógomb megnyomását követően bekapcsoljuk LED1-et (stabilan világít)
  6. Az SW1 nyomógomb felengedését követően a program az 1. pontnál folytatódik

Hardver igény:

Projekt konfiguráció: A program működéséhez a HID_BOOTLOADER szimbólumon kívül az USE_INTERRUPT és az USE_USB szimbólumokat is definiálni kell.

Definíció a(z) ledswitch_tmr0.c fájlban.


Függvények dokumentációja

void printNewState ( MAINSTATE  currentState  ) 

Nyomkövető üzenet kíírása minden állapotváltáskor

Paraméterek:
currentState a főprogram aktuális állapota
LastState (globális változó) a főprogram utoljára kiírt állapota

Definíció a(z) ledswitch_tmr0.c fájl 109. sorában.


Projekt: PICCOLO projekt - PIC18 támogatói programkönyvtár Készült: Thu Apr 7 21:00:25 2011 Készítette:   doxygen 1.5.9