First commit 10/04/1996
This commit is contained in:
261
PRN_CNT.BAS
Normal file
261
PRN_CNT.BAS
Normal file
@ -0,0 +1,261 @@
|
||||
' /**************************************************************************\
|
||||
'| |
|
||||
'| Codigo Fuente de PRN_CNT |
|
||||
'| |
|
||||
' \**************************************************************************/
|
||||
|
||||
dim shared Salidas(10) as single, PortAddress(3) as integer
|
||||
PortAddress(1) = &378
|
||||
PortAddress(2) = &278
|
||||
PortAddress(3) = &3bc
|
||||
|
||||
dim shared NULL as ESTADOS
|
||||
|
||||
typedef struct ESTADOS
|
||||
{
|
||||
b1 as single
|
||||
b2 as single
|
||||
b3 as single
|
||||
b4 as single
|
||||
b5 as single
|
||||
b6 as single
|
||||
b7 as single
|
||||
}
|
||||
|
||||
sub Init.DeInit
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Esta rutina debe ser llamada al iniciar el programa que use las librerias. |
|
||||
| |
|
||||
| Es la encargada de poner a cero todas la salidas, al principio y al salir. |
|
||||
| |
|
||||
| |
|
||||
| Parametros de Entrada: ( ninguno ) |
|
||||
| Parametros de Salida: |
|
||||
| OK Todo ha ido bien. |
|
||||
| ERROR_EN_ATEXIT Error registrando funci<EFBFBD>n |
|
||||
| FUNCION_YA_REGISTRADA No es la 1<EFBFBD> vez |
|
||||
| |
|
||||
\**************************************************************************/
|
||||
|
||||
call ResetAll
|
||||
|
||||
end sub
|
||||
|
||||
|
||||
|
||||
sub ResetAll
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Resetea todas las salidas y las pone a cero. |
|
||||
| |
|
||||
\**************************************************************************/
|
||||
|
||||
dim ampl as single
|
||||
|
||||
for ampl=0 to ampl<10 step 1
|
||||
call EscribeSalidas( ampl, NULL, 0 )
|
||||
next ampl
|
||||
|
||||
end sub
|
||||
|
||||
function LeeSalidas%( ampl as single, estados as ESTADOS )
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Obtiene el estado de las salidas ( On/Off ), de la ampliacion AMPL. |
|
||||
| |
|
||||
| Parametros de Entrada: |
|
||||
| ampl Ampliaci<EFBFBD>n donde debemos mirar |
|
||||
| estados Puntero a estructura con los estados |
|
||||
| |
|
||||
| Parametros de Salida: |
|
||||
| char 1Byte con los estados |
|
||||
| |
|
||||
| NOTA: si &estados es NULL, solo se devolvera el char de salida. |
|
||||
\**************************************************************************/
|
||||
|
||||
dim desp as single
|
||||
|
||||
if ampl < 0 or ampl >9 then
|
||||
LeeSalidas = 0
|
||||
exit
|
||||
end if
|
||||
if estados <> NULL then
|
||||
|
||||
estados.Salida0 = ( ( Salidas( ampl ) and&00 ) <> 0 )
|
||||
estados.Salida1 = ( ( Salidas( ampl ) and&02 ) <> 0 )
|
||||
estados.Salida2 = ( ( Salidas( ampl ) and&04 ) <> 0 )
|
||||
estados.Salida3 = ( ( Salidas( ampl ) and&08 ) <> 0 )
|
||||
estados.Salida4 = ( ( Salidas( ampl ) and&10 ) <> 0 )
|
||||
estados.Salida5 = ( ( Salidas( ampl ) and&20 ) <> 0 )
|
||||
estados.Salida6 = ( ( Salidas( ampl ) and&40 ) <> 0 )
|
||||
estados.Salida7 = ( ( Salidas( ampl ) and&80 ) <> 0 )
|
||||
}
|
||||
|
||||
return Salidas( ampl )
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Obtiene el estado de una salida ( On/Off ), cualquiera. |
|
||||
| |
|
||||
| Parametros de Entrada: |
|
||||
| salida ( Si 1 ampl. 0 a 7 ) |
|
||||
| ( Si 10 ampl. 0 a 80 ) |
|
||||
| |
|
||||
| Parametros de Salida: |
|
||||
| char 1Byte con el estado |
|
||||
| |
|
||||
\**************************************************************************/
|
||||
|
||||
char Lee_Salida( char salida )
|
||||
{
|
||||
return ( Salida( (salida / 8) + 1 ) and( &01 << ( salida - ((salida/8)+1)*8 ) ) <> 0
|
||||
}
|
||||
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Escribe la variable 'estados' ( On/Off ), en la ampliacion AMPL. |
|
||||
| |
|
||||
| Parametros de Entrada: |
|
||||
| ampl Ampliaci<EFBFBD>n donde debemos mirar |
|
||||
| estados Puntero a estructura con los estados |
|
||||
| estadosb 1byte con los estados |
|
||||
| |
|
||||
| Parametros de Salida: |
|
||||
| char 1Byte con los estados |
|
||||
| |
|
||||
| NOTA: si &estados es NULL, solo se utilizar<EFBFBD> la variable estadosb. |
|
||||
\**************************************************************************/
|
||||
|
||||
char Escribe_Salidas( char ampl, ESTADOS *estados, char estadosb )
|
||||
{
|
||||
char byte_out=0, cont
|
||||
|
||||
outportb( Port_Address(Lpt_usado-1) + 1, &0 )
|
||||
|
||||
|
||||
if ( estados = NULL )
|
||||
{
|
||||
outportb( Port_Address(Lpt_usado-1), estadosb )
|
||||
Salida( ampl ) = estadosb
|
||||
} else {
|
||||
byte_out = estados.Salida0
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 1) )
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 2) )
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 3) )
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 4) )
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 5) )
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 6) )
|
||||
byte_out = ( bytes_out or( ( estados.Salida1 ) << 7) )
|
||||
outportb( Port_Address(Lpt_usado-1), byte_out )
|
||||
Salida( ampl ) = byte_out
|
||||
}
|
||||
/*
|
||||
A2 (ampl and&01)
|
||||
A1 (ampl and&02)
|
||||
A0 (ampl and&04)
|
||||
*/
|
||||
outportb( Port_Address(Lpt_usado-1) + 1, &0 )
|
||||
|
||||
|
||||
outportb( Port_Address(Lpt_usado-1) + 1, &0 )
|
||||
|
||||
/*
|
||||
A2 01.0 Strobe
|
||||
A1 14.0 AutoFeed
|
||||
A0 16.0 Inicializaci<EFBFBD>n
|
||||
|
||||
11 10 12 13 15
|
||||
128 64 32 16 8 4 2 1
|
||||
0 1 0 1 0 1 0 1
|
||||
|
||||
13 12 11 10
|
||||
. . . . <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . <-- 1
|
||||
- - - - - - - - . . . .
|
||||
15
|
||||
*/
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function EscribeSalida%( salida as single, estados as single )
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Escribe el estado de una salida ( On/Off ), cualquiera. |
|
||||
| |
|
||||
| Parametros de Entrada: |
|
||||
| salida ( Si 1 ampl. 0 a 3 ) |
|
||||
| ( Si 10 ampl. 0 a 80 ) |
|
||||
| |
|
||||
| Parametros de Salida: |
|
||||
| char 1Byte con el estado |
|
||||
| |
|
||||
\**************************************************************************/
|
||||
|
||||
dim ampl as single, byte_out as single
|
||||
ampl = (salida / 8) + 1
|
||||
|
||||
byte_out = Lee_Salidas( ampl, NULL )
|
||||
byte_out = ( byte_out and!( &01 << ( salida - ampl*8 ) ) ) or( estado << ( salida - ampl*8 ) )
|
||||
Salida( ampl ) = byte_out
|
||||
EscribeSalidas( ampl, NULL, byte_out )
|
||||
EscribeSalida = byte_out
|
||||
end function
|
||||
|
||||
|
||||
|
||||
function LeeEntradas%( ampl as single, estados as ESTADOS )
|
||||
|
||||
' /**************************************************************************\
|
||||
'| |
|
||||
'| Lee las entradas y la almacena en la variable estados. |
|
||||
'| |
|
||||
'| Parametros de Entrada: |
|
||||
'| ampl Ampliaci<63>n donde debemos mirar |
|
||||
'| estados Puntero a estructura con los estados |
|
||||
'| |
|
||||
'| Parametros de Salida: |
|
||||
'| char 1Byte con los estados |
|
||||
'| |
|
||||
' \**************************************************************************/
|
||||
|
||||
end function
|
||||
|
||||
function LeeEntrada%( entrada as single )
|
||||
/**************************************************************************\
|
||||
| |
|
||||
| Lee una entrada cualquiera. |
|
||||
| |
|
||||
| Parametros de Entrada: |
|
||||
| entrada ( Si 1 ampl. 0 a 3 ) |
|
||||
| ( Si 10 ampl. 0 a 80 ) |
|
||||
| |
|
||||
| Parametros de Salida: |
|
||||
| char 1Byte con el estado |
|
||||
| |
|
||||
\**************************************************************************/
|
||||
|
||||
dim byte_out as single, ampl as single
|
||||
ampl = (salida / 8) + 1
|
||||
|
||||
byte_out = Lee_Entradas( ( (salida / 8) + 1 ), NULL )
|
||||
|
||||
byte_out = ( byte_out and( &01 << ( salida - ampl*8 ) ) )
|
||||
LeeEntrada = byte_out
|
||||
|
||||
end function
|
||||
|
||||
|
||||
|
||||
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD>I<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>E<EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD>B<EFBFBD>E<EFBFBD>C<EFBFBD>E<EFBFBD>R<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user