⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lptregistar.h

📁 pc paralel port programming
💻 H
字号:
// LPTRegistar.h: interface for the CLPTRegistar class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_LPTREGISTAR_H__3B6B9539_FF2C_46C2_AD52_C6B9BC183376__INCLUDED_)
#define AFX_LPTREGISTAR_H__3B6B9539_FF2C_46C2_AD52_C6B9BC183376__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "LPTDefRegistar.h"
//#include "SpisakBitova.h"
#include "SpisakBitovaFast.h"
#include <string>

class CLPTRegistar  
{
public:
	CLPTRegistar(int adresaPorta);
	virtual ~CLPTRegistar();

public:
    // Funkcija vraca tekucu vrednost registra
    short DajSadrzaj(void);

    // Funkcija vraca stanje pinova koje odgovara tekucem sadrzaju registra
    short DajStanjePinova(void);

    // Funkcija cita registar LPT porta i vraca :
    //  - sadrzaj registra, ako je posmatrajPinove=false ili
    //  - stanje pinova, ako je posmatrajPinove=true
    short Procitaj(bool posmatrajPinove = true);

    // Funkcija salje datu vrednost na LPT port.
    // Ako je posmatrajPinove=false, postavlja sadrzaj registra na datu vrednost.
    // Ako je posmatrajPinove=true, postavlja pinove na datu vrednost.
    void Posalji(short sadrzaj, bool posmatrajPinove);

    //////////////////////////////////////////////////////////////////////
    // Funkcije koje zavise od konkretnog registra
    // (treba da se definisu u izvedenim klasama)
    //////////////////////////////////////////////////////////////////////

    // Funkcija vraca naziv registra
    // NAPOMENA: nazivi treba da budu jedinstveni (koristim ih kao ID-ove)
    virtual std::string Naziv(void) = 0;

    // Funkcija vraca ofset registra u odnosu na baznu adresu porta
    virtual short Offset(void) = 0;

    // Funkcija vraca true ako maska sadrzi bar jedan bit registra
    bool AdresiranMaskom(int bitMaska);

    // Postavlja bitove sadrzaja u pozicije definisane maskom za dati registar
    // Ako je posmatrajPinove=true, za svaki bit koji ima inverznu logiku,
    // vraca komplementarnu vrednost.
    int RasporediBitoveSadrzajaUMasku(bool posmatrajPinove);

    // Vraca true ako je dati bit sadrzaja setovan
    // Ako je posmatrajPinove=true i ako bit ima inverznu logiku,
    // vraca komplementarnu vrednost.
    // Ako je posmatrajPinove=false vraca bit bez komplementiranja.
    bool Postavljen(int bitMaska, bool posmatrajPinove);

    // Funkcije za setovanje pojedinih bitova registra (ako je upis u registar moguc).
    // Bitovi koji se ne pominju u bit masci ostaju NEIZMENJENI.
    // Ako je proveriInvert=true, bitove koji se odnose na 'invertovane pinove'
    // postavlja na 0, a ne na 1.
    void Postavi(int bitMaska, bool posmatrajPinove);
    // Ako je proveriInvert=true, bitove koji se odnose na 'invertovane pinove'
    // postavlja na 1, a ne na 0.
    void Obori(int bitMaska, bool posmatrajPinove);

    // Get
    bool MoguceCitanje(void);
    bool MogucUpis(void);
    // Set
    void MoguceCitanje(bool omoguci);
    void MogucUpis(bool omoguci);

protected:
    // Funkcija koju treba pozvati u konstruktoru izvedenih klasa
    virtual void Inicijalizuj(bool moguceCitanje, bool mogucUpis);

    // Funkcija koja definise spisak bitova za konkretni registar
    virtual void FormirajSpisakBitova(void) = 0;

    // Funkcija vraca masku koja ima jedinice na pozicijama koje odgovaraju
    // bitovima koji pripadaju registru i nule na ostalim pozicijama
    virtual int FormirajMaskuZaRegistar(void);

    inline int BrojBitovaMaske(void);
    inline int BrojBitovaSadrzaja(void);

    // Funkcija vraca redni broj bita sadrzaja koji odgovara datom bitu maske.
    // Redni brojevi idu od 0(za bit najmanje tezine sadrzaja).
    virtual int PozicijaBitaUSadrzaju(int bitMaska);

    // Funkcija vraca true ako je pin koji odgovara bitu invertovan
    virtual bool PinInvertovan(int bitMaska);

    // Funkcija izdvaja samo jedan bit u datoj masci ('prvi').
    // Ako nijedan bit nije setovan, vraca 0.
    virtual int PrviBitMaske(int bitMaska);

protected:
    // definicije bitova registra
//    CSpisakBitova spisakBitova;
    CSpisakBitovaFast spisakBitova;

private:
    //////////////////////////////////////////////////////////////////////
    // Pomocne funkcije 
    //////////////////////////////////////////////////////////////////////

    // Set
    void PostaviSadrzaj(short noviSadrzaj);

    // Funkcija izdvaja bit na datoj poziciji iz sadrzaja i 
    // pomera ga na poziciju najmanje tezine.
    int IzdvojiBitIPomeriNaLSB(unsigned int pozicija, int sadrzaj);

    // Funkcija vraca poziciju jedinice sa datim indeksom u datoj masci
    // (indeksi pocinju od 0, a bit najmanje tezine u masci ima poziciju 0).
    // Na primer, u masci 00001100, jedinica sa indeksom 0 je na poziciji 2,
    // jedinica sa indeksom 1 je na poziciji 3,...
    // (gleda se sdesna ulevo tj. od bita najmanje tezine).
    // Ako ne nadje, vraca -1.
    int DajPozicijuJedinice(unsigned int indeks, int maska);

    // Funkcija postavlja na 1 ili na 0 vrednost bitova definisanih datom maskom
    // (ako je snimanje u registar dozvoljeno).
    // Parametar definise da li se bitovi postavljaju na 1 ili na 0.
    void NasetujIzabraneBitove(int bitMaska, bool postaviNaJedinicu, bool posmatrajPinove);

    // Funkcija komplementira bit najmanje tezine
    inline void NegirajLSB(int& vrednost);

private:
    int adresa_m; // adresa registra
    short sadrzaj_m; // poslednja vrednost procitana sa registra ili upisana u registar

    bool moguceCitanje_m; // da li citanje registra ima smisla
    bool mogucUpis_m; // da li upis u registar ima smisla

};

#endif // !defined(AFX_LPTREGISTAR_H__3B6B9539_FF2C_46C2_AD52_C6B9BC183376__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -