On Fri, 6 Jul 2001, Xtian Xultz wrote:
> Olah a todos
>
> Estou montando um circuito eletronico que pretendo ligar numa porta paralela do
>micro e pretendo fazer um programa para ler os bits de dados da porta.
> No DOS eu usava o comando inportb do compilador C que eu tinha (DJGPP), mas no linux
>eu vi que nao existe tal comando.
> Entao, qual seria a melhor maneira de fazer isso? Abrir o /dev/lp0 como arquivo e
>ler o dito, ou existe alguma outra maneira?
>
> Agradeco de antemao a toda ajuda possivel
oi
leia o Linux I/O port programming mini-HOWTO
http://www.linuxdoc.org/HOWTO/mini/IO-Port-Programming.html
um exemplo simples:
/*
* Interface com Multimetro CA3162 -99 a 999mV
* compilar com: gcc -O2 -o nome nome.c
*/
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
int base=0x378; /* parallel port */
int main()
{
int cnt,idx;
int tout=100;
int t;
unsigned char digi=0;
char temp[5];
if (ioperm(base, 3, 1)) { perror("ioperm"); exit(1); }
outb(0x8, base);
usleep(250000);
idx=0;
for(cnt=2;cnt>=0;cnt--)
{
outb( (~(1 << cnt)) & 0x0F , base);
while(((inb(base+1) & 0x80)==0x80) && tout!=0) {tout--; usleep(500);}
digi=inb(base+1) >> 3;
if (digi <= 9) { temp[idx]=digi+48; ++idx;}
else if (digi=10) { temp[idx]='-'; ++idx;}
else { temp[idx]='E'; ++idx;}
/* if (cnt==1) { temp[idx]='.'; ++idx;} */
outb(0, base);
}
temp[3]='\0';
t = atoi(temp);
printf("%d\n",t);
printf("%d\n",t);
printf("temperatura\n");
printf("%3.1fºC\n",(float) t/10);
if (ioperm(base, 3, 0)) {perror("ioperm"); exit(1);}
exit(0);
}
_________________________________ ________________________________________
Paulino Kenji Sato | Universidade Estadual de Maringa
mailto:[EMAIL PROTECTED] | Departamento de Fisica
http://www.dfi.uem.br/~paulino | Maringa Pr Brasil
Linux user 56176
Assinantes em 06/07/2001: 2265
Mensagens recebidas desde 07/01/1999: 121750
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista:
mailto:[EMAIL PROTECTED]