domingo, 5 de janeiro de 2014

Chat via Paralela

//Envia sinal para a Porta Paralela LPT1:
#include
#include
#include
#include
#define LPT1 0x378
void outport(UINT portid, UINT value)
{
  __asm mov edx,portid;
  __asm mov eax,value;
  __asm out dx,ax;
}
void outportb(UINT portid, BYTE value)
{
  __asm mov edx,portid
  __asm mov al,value
  __asm out dx,al
}
BYTE inportb(UINT portid)
{
  unsigned char value;
  __asm mov edx,portid
  __asm in al,dx
  __asm mov value,al
  return value;
}
UINT inport(UINT portid)
{
  int value=0;
  __asm mov edx,portid
  __asm in ax,dx
  __asm mov value,eax
  return value;
}
int main(void)
{
    unsigned char Valor=128; //Em binário: 10000000
    while( Valor > 0 )
   {
              outportb(LPT1, Valor); // Envia para a Porta LPT1
              printf("\nPressione uma tecla para ascender o próximo LED...");
              getch( );
              Valor = Valor >> 1; //A cada passagem, o bit 1 é movido para a direita
    }
}



Chat via Paralela

#include
#include


int gnEstado=0;
int gnDataOK=0;
int cursorChat=0;
struct StatusPortReg
{
        unsigned                :2;
        unsigned _IRQ           :1;
        unsigned _Error         :1;
        unsigned Select         :1;
        unsigned PrintEmpty     :1;
        unsigned _ACK           :1;
        unsigned Busy           :1;
};

struct ControlPortReg
{
        unsigned _Strobe        :1; /*LSB*/
        unsigned _Autofeed      :1;
        unsigned InitPrinter    :1;
        unsigned _SelectIn      :1;
        unsigned IRQEnable      :1;
        unsigned Direction      :1;
        unsigned                :2; /*MSB*/
};
typedef unsigned char BYTE;

void Dormir(int nSec)
{
 int i,j;
 for(i=0;i<2000 i="" o:p="">
  for(j=0;j
}
void EnviaParalela(BYTE byte)
{
 outportb(0x378, byte);
}
BYTE RecebeParalela()
{
 return inportb(0x379);
}

BYTE FiltroRecepcao(BYTE Receber)
{
 Receber=(Receber^0x80)>>3;
}
BYTE Separacao(BYTE Receber, BYTE * pData)
{
 int CH;

 CH=Receber & 0x10;
 switch(gnEstado)
 {
  case 0:
   gnDataOK=0;
   if(CH==0x0)
   {
    gnEstado=1;
    /*Recebe o CH - Low*/
    *pData&=0xF0;
    *pData|= ( Receber & 0xF);

   }
   else
   {

   }
   break;

  case 1:
   gnDataOK=0;

   if(CH==0x0)
   {
    gnEstado=1;
   }
   else
   {
    gnEstado=2;
    /*Recebe o CH - High*/
    *pData&=0x0F;
    *pData|= ( Receber & 0xF)<<4 o:p="">
    gnDataOK=1;
   }

   break;
  case 2:
   gnDataOK=1;
   if(CH==0x0)
   {
    gnEstado=1;
    /*Recebe o CH - Low*/
    *pData&=0xF0;
    *pData|= ( Receber & 0xF);
   }
   else
   {
    gnEstado=3;
    gnDataOK=0;
   }
   break;
  case 3:
   gnDataOK=0;
   if(CH==0x0)
   {
    gnEstado=1;
    /*Recebe o CH - Low*/
    *pData&=0xF0;
    *pData|= ( Receber & 0xF);
   }
   else
   {
    gnEstado=3;
   }
   break;
  default:
   gnEstado=0;
 }

 if( Receber & 0x10)  /*condicao do bit mais significativo 1, lembrese que ele vem invertido*/
 {
 }
 else
 {
 }
 return *pData;
}
BYTE FiltroEnvio(BYTE Enviar)
{
 return (Enviar&0x1F);
}

BYTE ReadByteParalela()
{
 BYTE nData;
 nData=FiltroRecepcao(RecebeParalela());
 Dormir(100);
 nData|=FiltroRecepcao(RecebeParalela());
 return nData;
}
void SendByteParalela(BYTE nData)
{
 EnviaParalela(nData>>4);
 Dormir(1000);
 EnviaParalela(nData);
}
void do_leia();
int main(void)
{

 unsigned char aux=0;
 unsigned char codigo = 0;
 unsigned char ch0 = 0;
 unsigned char ch1 = 1;
 unsigned int x=0,y=0;
 unsigned int iColuna = 4;
 unsigned int iLinha  = 3;
 int cursor = 0;
 int iIntervalo = 10000;
 clrscr();
 for(x=0;x<80 o:p="" x="">
 {
  gotoxy(x,1);printf(".");
  gotoxy(80-x,24);printf(".");
  Dormir(1800);
 }
 cursor=iColuna-1;
 while (codigo!=27)
 {

                while(!kbhit())
                       do_leia();

         cursor==30?cursor=iColuna:cursor++;
  codigo=getch();
  aux=codigo;
  gotoxy(iColuna,iLinha+9);printf("Codigo ch=%c d=%d 0x%x",codigo,codigo,codigo);
  gotoxy(cursor,iLinha+11);printf("%c ",codigo);


  /*
   b0 b1 b2 b3 b4 b5 b6 b7
   10000 (0x10)
   ~(0x10)
   01111  agora faz operacao &
  */

  codigo&=~(0xF0); /* Zera A parte Alta do codigo*/
  gotoxy(iColuna,iLinha+15);printf("1 outport(0x378)  0x%x %c",codigo,codigo,codigo);
  outportb(0x378,codigo);
  Dormir(iI


Postar um comentário