' /**************************************************************************\ '| | '| 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¢n | | FUNCION_YA_REGISTRADA No es la 1¦ 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¢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¢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  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¢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 . . . . þ þ þ þ þ þ þ þ . <-- 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¢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 /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛFÛIÛNÛÛÛDÛEÛÛÛLÛAÛÛÛÛCÛAÛBÛEÛCÛEÛRÛAÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/ /*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/