Bus Ieee-488 PDF
Bus Ieee-488 PDF
Bus Ieee-488 PDF
Aprobo (Asesor):
M.-C. J o r m o
Realización:
l/
INTERFAZ
IEEE-488
PARA PC
BIBLIOT€CB
---------
Y
Angel A. Pérez M.
m
mrl UNIVERSIDAD AUTONOMA METROPOLITANA - IZTAPALAPA -
1. Introducción.
O. Desarrollo Teórico.
2.1 El IEEE-488.
2.2 MS-DOSpara programación.
2.2.1 Programas Residentes.
2.2.2 Drivers.
2.3 Hardware de la PC.
3. Desarrollo Experimental.
3.1 Hardware.
3.1.1 Decodificación.
3.1.2 Implementación.
3.2 Software.
3.2.1 Programación en Lenguaje C.
3.2.2 Driver.
4. Resultados.
!
5. Conclusiones.
6. Bibliograña.
Apéndices.
INTRODUCCIÓN
2
capítulo 1 Invoduccidn
3
CAPíTULO 2
DESARROLLO
TEÓRICO
4
capíhib.2 IEEE-488
Asignación de Papeles
5
capítulo 2 IEEE-488
6
caprhib z IEEE-488
Bus de datos
Handshake
DAV (Data Vdd) es una línea de handshake que indica que el &r
activo ha colocado datos en la linea de datos (DIO1-DI08).
NRFD (Not Ready for data) indica que uno o más &enen activos no
están listos para más datos, y el talker activo debe esperar antes de
transmitir más datos hacia el bus.
NDAC (Not data accepted) indica que uno o más Zkteners no pueden
aceptar el dato actual, y el talker activo debe dejar el byte actual
insertado en la línea de datos.
Control
Transferencia de información
CMV
U I
8
capitub 2 IEEE-488
I 5
,
F
igu
rr 2.13. Diagrama de flujo para una transferenciade dam.
9
capítulo 2 IEEE-488
Direccionamiento de dispositivos
11
Capihllo 2 IEEE-488
Polling (Escrutinio)
12
capitulo 2 Ragramas Residentes
F
igu
rr 2.2.1. Mapa de memoria de DOS.
14
capitulo 2 Programas Residentes
Interrupciones
17
capítulo 2 Programas Residentes
18
capstub 2 Programas Residentes
outportb ( 67,182 ) ;
outportb (66,count.c[0]);
bits -
outportb (66,count.c[1]);
inportb (97);
outportb (97,bits13);
outportb (97,bits);
1
r.h.ah = 0x31;
r.h.al = O;
r.x.dx = longitud;
int86 ( 0x2 1, Lr, Lr);
19
capftulo 2 Programas Residentes
setvect (5,musica);
20
caplnib 2 Programas Residentes
aetvect (9,beep);
/* termina y deja residente */
tar(706) ;
1
void interrupt beep (void)
{
int i,j ;
char originalbits,bits;
unsigned char count = 3000;
21
capsnil0 2 Device Drivers
Tipos de manejadores
23'
capítulo 2 Device Driven
24
caprtub 2 Device Drivers
Bit significrdo
15 1 Manejador de carácter.
O Manejador de bloque.
14 1 Si soporta IOCLT.
13 1 No es formato IBM (bloque).
O No salida hasta lleno (carct)
12
11 1 si soporta abierto/cerrado/m
10 *
9
8 *
7 *
6 *
5 *
4 (especial: bit manejador CON)
3 1 si manejador es el reloj.
2 1 Dispoeitivo actual es nulo.
1 1 Dispositivo estándar actual es
de salida.
O 1 Dispositivo estándar actual es
de entrada.
~
* Actualmente indefinido.
25
Apuntador a la rutina de estrategia (2bytes): Este es un offset dentro
del segmento del manejador del dispositivo hacia la rutina de
estrategia.
Rutina de estrategia
Rutina de interrupci6n
26
CapItulo 2 Device Drivers
27
caplnilo 2 Device Drivers
Soporte de DOS
F i 2.23. Diagrama de flujo que muestra las tareas realidas por DOS antes de emitir el
prompt yla espera para la entrada del usuario.
Después cuando DOS recibe una petición para una función de E/S, la
búsqueda comienza en el frente de la lista, cuando encuentra el
primer nombre de un dispositivo que es igual al solicitado entonces
invoca a éste para realizar la petición. Esta técnica permite remplazar
un manejador de caracteres por un manejador de dispositivo con el
mismo nombre que el dispositivo remplazado.
29
Device Drivers
capitulo 2
Programa ejemplo
30
128401
Device Drivers
capítulo 2
CODE SEGMENT
ASSUHE CSrCODE, DSrCODE
:Encabezado de dispositivo
WINTER DD - 1
ATTRIBUTE DW 800H ;manejador de caracteres
STRATEGY-PTR DW STRATEGY
INTERRUPT-PTR DW INTERRUPT
-
DRIVE NAME DB 'DRIVETST' ;8 Caracteres
;definición de datos
OFFSET-- DW ?
SEGMENT-RE DW ?
-
M I T MESS DB 'INICIALIZANDO DRIVETST'
DB CR,LF,EOM
- -
OUT VER MESS DB 'SACANDO CON VEEUFICACION'
DB CR, LF,EOM
- -
STATUS OUT MESS DB 'STATUS DE SALIDA'
DB CR,LF,EOM
;rutina de estrategia
MOV S E G m T - R H ES
RET
STRATEGY ENDP
;rutina de interrupción
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
. PUSH
PUSii
DS
ES
;inicializa DS para mensajes
PUSH CC
POP DS ; DS * CS
MOV BX ,OFFSET-RH
MOV ES,SEGHENT-RH
JE OUTPUT ;si
CMP AL,9 tealida con
32
capíhih, 2 Device Driven
;verif icaci6n 3
JE OUTPUT-VERIFY ;ai
cm =,lo festatus de
;salida
JE -
STATUS OWTPUT ;ai
JMP NORWS-EXIT ;otro regresa
; comando no
;válido
MOV ES:[BX+16],CS
JMP NORMAL-EXIT
;al próximo
LOOP OUTPUT1
SUB $S:[BX+18],CX ;número
;traneferido
JHP NORMAL-EXIT
-
OUTPUT VERIFY: LEA DX,OUT-VER-MECS
MOV AHf9
INT 218 itransmite
;meneaje
JHP OUTPUT2 ;uaa otra rutina
INT 21H
JMP NORMAL_EXIT
;status = DONE
-
NORMAL EXIT: MOV WORD PTR ES:[BX+3If0100H
;reetablece ambiente
-
INTER EXIT: POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP cx
POP BX
POP Ax
RET
INTERRUPT ENDP
BOTTOM LABEL WORD
CODE ENDS
END
capítub 2 Device Drivers
2.3 MRDWAREDEIAPC
El bus de WS
Las líneas de E/S pueden ser clasificadas por la función que realizan:
38
capitub 2 Hardwaredeia PC
39
capftulo 2 Hardwaredeía PC
+ 5 vdc ( 2 patillas).
- 5 Vdc
+12 vdc
-12 Vdc
GND Tierra (3 patillas).
40
128481
Capítulo 2 Hardware de la PC
BUS DE E/S
41
CAPíTULO 3
DESARROLLO
EXPERIMENTAL
3.1 HARDWARE
3.1.1 Decodificación
42
capítulo 3 Decodifcador
43
f
AP
e v
1
n
Li1
I
1 c
o
o
?
L
I-
C:
-I
o
capitulo 3 Implementaci6n
3.1.2 Implementación
Datos
L o s datos en el PPI son manejados a través del puerto A y los buffers
de tres estados (74LS240).
Handshake
DAV (DAta V'id). Esta línea es manejada como entrada en PC2 (linea
17 del PPI), cuando el controlador funciona como Zkkner, y proviene
de un buffer no inversor de colector abierto (DAVi); como salida
(DAV,) es controlada por PC7 (línea 10 del PPI) y enviada por un
buffer del mismo tipo que a la entrada, cuando el controlador trabaja
como UZker.
46
capitulo 3 Implementaa6n
Control
IFC (ZnterFace Clear). Esta línea es manejada por PB3 (línea 21 del
PPI).
SRQ (Ser& ReQwst). Es recibida por IRQ4 (línea B24 del bus de
E/S) que genera un servicio de interrupción hacia la PC, cuando
algún dispositivo periférico solicita servicio al controlador.
47
capftulo 3 Implcmentación
48
_-
=I
In
C
a
Q
w
n
f
1
m
Ar
7
o
N
i
m
m
VI
O
m
r
on
W
~-
128401
capítulo 3 Software
3.2 SOFIWARE
Por medio del lenguaje C fue posible desarrollar rutinas para las
diferentes funciones que realiza el sistema. Estas rutinas se
encuentran disponibles para ser utilizadas en aplicaciones especificas
de diferentes dispositivos conectados al bus.
Control
Esta rutina permite la programación de los dispositivos, enviando
como parámetro la palabra de control.
#include <dos.h>
{
unsigned char NRFD ;
outportb (Ox3lb,Oxal) ;
Capítulo 3 Software
} while (NRFD);
/* Mando comando */
Writejpib
Esta función realiza la transferencia de información entre la PC
configurada como Talker y uno o varios Zisteners.
52
Capítulo 3 Software
#include <doEi.h>
I
unsigned char ӟ ;
cadena++ ;
Read-ib
La función que realiza este rutina es leer información de algún
dispositivo configurado como tuZkm.
53
caplhdo 3 software
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#define uchar unsigned char
{
EO1 = 1;
54
capítulo 3 Software
void i r e 3 (void)
disable ( ) ;
outportb(0x2l,(inportb(Ox21) L Oxf7)): /* Habilita int 3 PIC */
enable ( ) ;
{
outportb (Ox31b,Oxbl); /* configuración: PA modo 1, salida:
PB salida, PC6 y 7 salida, PC1 a PC3
entradas */
55
capítulo 3 software
/* Realiza la lectura */
{
uchar DAV;
} while (IEOI);
*cadena = NULL;
EO1 = O;
Programa de aplicación
#include <etdio.h>
void main(argc,argv)
int argc ;
char *argv[];
FILE *fp;
char buffer[100],
temp[ 101 ;
int c,i,
renglon = 410:
/* Comprobación de pardmetros * /
if (argc 13: 2) {
for (i -
/*
0;i < 56;++i) { .
Selecciona la dirección de escritura y
tamaño de carácter */
-
write gpib("D1 0,l;SI . 1 5 , . 2 5 ; " ) ;
/* comando de escritura de carácteres * /
-
write qpib("LB");
c = lee-linea(fp,buffer);
write-qpib(buffer);
renglon += -
INC REN;
itoa(renglon,temp,lO);
/* Posición absoluta */
-
write gpib(";PA ");
write-gpib(temp);
write-gpib( ",279; " ) ;
1
if (( i == 56) 6& ( c I= EOF) {
{
char ct
*linea++ = '\3';
*linea = *\Om;
i f (c == EOF)
retUrn(EOF):
else
return (NULL) ;
1
3.2.2 El Driver
CODE SEGMENT
CR EQU ODH
LF EQU OAH
EOM EQU ,s*
Capítulo 3 Software
POINTER DD -1
ATTRIBUTE DW 8000H
STRATEGY-PTR DW STRATEGY
INTERRUPT PTR- DW INTERRUPT
DRIVER-NAME DB 'GPIB 1
-
OFFSET RH DW 1
SEGMENT-Rñ DW ?
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSH cs :DS = CS
POP DS
nov BX,OFFSET-RH
nov ES,SEGMENT-RH
OUTPUT :
;CONTROL
OUT DX,AL
MOV AL, 88 ;outportb (Ox3lb,0x8)
MOV DX ,31BB
OUT DX,AL
MOV AL, OAH toutportb (Ox31b,OxOa)
MOV DX,31BH
OUT DX,AL
MOV AL, ODH ;outportb (Ox31b,OxOd)
MOV DX, 3188
OUT DX,AL
MOV AL, 64H ;outportb ( 0 ~ 3 1 9 ~ 0 x 6 4 )
MOV DX, 319H
OUT DX,AL
Do1 : MOV DX, 31AH ;do {
IN U,DX ; NRFD = INPORTB(OX31A)
AND AL,lH ; NRDP = NWD f 01
CUP AL, ox
JNE DO1 ;}while (NRFD)
MOV AL, 31 toutportb (Ox318,37)
MOV DX, 318H
OUT DX,AL
MOV AL,60H
MOV DX, 319H
OUT DXfAL ;outportb (Ox319,Ox60)
NRDF -
NRFD
NRFD
= inportb(OX31A)
SI 01
INC SI
LOOP OUTPUT1
SUB ESt[BX+lS],CX ;caracteres transferidos
JMP NOW-EXIT
-
NORMAL EXIT: MOV WORD PTR ES:[BX+3],0100H ;status - DONE
RET
INTERRUPT ENDP
64
capitulo 4 Resultados
CODE SEGMENT
CR EQU ODH
LP EQU OAH
EOM EQU '$I
capitulo 4 Resultados
POINTER DD -1
ATTRIBUTE DW 80008
STRATEGY-PTR DW STRATEGY
INTERRUPT-PTR DW INTERRUPT
-
DRIVER NAME DB 'GPIB *
OFFSET-Rü DW ?
SEGMENT-RH DW ?
FtAG DB ?
DB LF,CR,EOM
PROC FAR
MOV -
OFFSET RX,BX
MOV -
SEGMENT RX,ES
RET
STRATEGY ENDP
66
capitulo 4 Resultados
PUSH ES
PUSX cs :DS = CS
POP DS
WOV BX ,OFFSET-RE
nov ES,SEGXENT_RB
uov AL, OH
uov
INPUT :
;CONTROL
nov &,FLAG
CMP AL,2H
JE El
nov AL,2H
nov FLAG,=
nov AL, OAlH :programando ppi
UOV DX, 31BX routportb (Ox31b,Oxal)
OUT DX8
MOV AL88H ;outportb (Ox31b,Ox8)
uov DX,31BH
OUT DX8AL
uov AL, O A H ;outportb (Ox31b,OxOa)
caplhllo 4 Resultados
MOV DX,31BH
OUT DX,AL
MOV AL,ODE ;outportb (OxJlb,OxOd)
MOV DX, 3188
OUT DX,AL
MOV AL, 64H toutportb (Ox319,Ox64)
MOV DX, 3198
OUT DX,AL
Do3 : MOV üX,31Añ ;do €
IN AL,DX ; NRFD = INPORTB(OX31A)
AND AL, 1H ; NRDF = N R F D & 0 1
cwp AL, OH i
;CONFI ENTRADA
uov AL, OBlH
MOV DX, 31BH
OUT DX,AL
MOV AL, OFB
MOV DX, 31BH
OUT DX,AL
MOV AL, OAH
MOV DX, 3lBH
OUT DX,AL
MOV AL, OCB
MOV DX,31BH
OUT DX,AL
uov AL, 09H
MOV DX, 31BH
OUT DX,AL
MOV AL, O78
MOV DX, 31BH
OUT DX,AL
MOV AL, OAlH
nov DX, 319H
OUT DX,AL
capítulo 4 Resultados
;READ_GP
INC SI ; BUFFER++
DEC cx
nov AL, 80H
nov DX, 319H
OUT DX,AL
nov AL, om
nov DXI31BH
OUT DXIAL
nov ALIOAlH
nov DXf319H
OUT DX,AL
LOOP Do4
JMP @6
capitulo 4 Resultados
@3: DEC cx
@ 6: MOV Ax,ex ; ECO DE CONTADOR
MOV DL, AL
MOV AX,LH
INT 2 1H
MOV ES:[BX+18],CX ; CUZACTERES TRMSPERIDOS
MOV ES:[BX+14],SI
OUTPUT:
;CONTROL
70
i
capitulo 4 RCSUltadOS
OU!rPuTl r nov
nov
nov
INT
nov
nov
OUT
INC SI
LOOP OUTPUT1
SUB ES:[BX+l8],CX ;caracteres transferidos
JXP -
NORMAL EXIT
AH = 3FH
BX = Manejador
CX = Bytes a leer
DS:DX = Apuntador a buffer
72
caplnilo 4 Resultados
Programa de Prueba
Program Pru-mib;
var
pltr,apun:text;
cadena:string[ll];
begin
asaign(pltr,'gpib');
assign(apun,'gpib');
rewrite(p1tr);
writa(pltr,'IN;SPl;PA 425,279;');
write(pltr,moA;*);
reset (apun);
read(apun,cadena);
writeln('0ENA = ',cadena);
close(p1tr);
close(apun);
end.
74
CAPfTULO 5
CONCLUSIONES
GPIB
F m 5.1 Diagirnir geaenl a bloques del sistema GPIB.
75
Otro bloque de importancia es la sección de decodificación en la que se
puede elegir, a través de interruptores, el espacio de direccionamiento en
el que trabajará la interfaz, lo que permite una mayor flexibilidad de
acoplamiento al sistema, adaptándolo para trabajar en cualquier espacio de
direccionamiento que se encuentre libre.
77
- I- - ’ ~”. -
".
~
Bibliografh
Advanced MS-DOS
Ray Duncan
Microsoft Press 1986
INTERFAZ PEIUFI~ICA
PROGRAMABLE (8255A)
DESCRIPCION FUNCIONAL
General
AI
Buffer del Bus de Datm
CS'
A2
AOy Ai
Selección de puerto O y selección de puerto 1. Estas señales de entrada en
conjunción con las entradas RD y WR,controlan la selección de uno de los
tres puertos o de los registros de palabra de control. Estos son,
normalmente los últimos bits significativos del bus de direcciones (A0 y
Al).
Control Grupo A
Puerto A y Puerto C superior (C4 - C7)
Control Grupo B
hierto B y Puerto C inferior (CO - C3)
El 8255A contiene tres puertos de 8 bits (A,B y C). Todos pueden ser
configurados en una gran variedad de caracterfsticas funcionales por el
software del sistema pero cada uno tiene sus propias características
funcionales o "personalidad" para engrandecer el poder y flexibilidad del
8255A.
OPBRACIÓN B h I c A 8255
A1 A0 RD' WR' CS' OPBRACIbN DE ENTRADA
(u-)
O O O 1 O Puerto A = Bus de datos
O 1 O 1 O Puerto B = Bus de datos
1 O O 1 O Puerto C = Bus de datos
OPBRACI~NDE SALIDA
(ESCRITUIU)
O O 1 O O Bus de datos => Puerto A
O 1 1 O O Bus de datos => Puerto B
1 O 1 O O Bus de datos => Puerto C
1 1 1 O O Bue de datos => Puerto I)
FUNCIÓN DE DESHABIUTACIÓN
X X X X 1 BUS DE DATOS => 3 ESTADOS
1 1 O 1 O CONDICI~N ILEGAL
I x X 1 1 O BUS DE DATOS => 3 ESTADOS
A4
Apédce A
DEsCRIPCIdN OPERACIONAL
S e l d 6 n de Modo
Son tres modos básicos de operación que pueden ser seleccionados por el
software del sistema :
Cuando la entrada de reset lleva a "írias" a todos los puertos puede ser
puesto en el modo de entrada (es decir, todas las 24 lfneas pueden estar en
el estado de alta impedancia). Antes de que el reset sea removido el 8255A
puede quedarse en el modo de entrada con ninguna inicialización adicional
requerida. Durante la ejecución del programa del sistema uno de los otros
modos puede ser requerido usando una simple instrucción de salida. Esto
permite al 8255A servir a una gran cantidad de dispositivos periféricos con
una simple rutina de mantenimiento de software.
I
Los modos para puerto A y B pueden ser definidos separadamente,
m i e m s el puerto C es dividido dentro de dos porciones como se
requieran para las definiciones del puerto A y puerto B. Todos los
registros de salida, incluyendo los flip-flops de estado pueden ser
iniciabados siempre que el modo sea cambiado. Los modos pueden ser
combinados para que su definición funcional pueda ser adecuada hacia casi
una estructura de E/S. Por ejemplo: El grupo B puede ser programado en
MODO O hacia un simple monitor cerrando interruptores o desplegando
resubdos computacionales. El grupo A puede ser programado en MODO
1 hacia un monitor o teclado, o cinta lectora en una base manejadora de
interrupciones.
Uno de los 8 bits del puerto C puede ser puesto o quitado usando una
simple instrucción de salida. Esta característica reduce requerimientos de
software en aplicaciones basadas en control. Cuando el puerto C es usado
como estadokontrol para los puertos A y B, estos bits pueden ser puestos
o borrados para usar las operaciones bit setheset justamente como si estas
fueran puertos de entrada de datos.
I 1'- O
M0M)S DE OPERACION
- 2 gNpoS (A y B).
- Cada grupo contiene un puerto de datos de 8 bits y
un puerto de control/datos de 4 bits.
- El puerto de datos de 8 bits puede ser entrada o
salida, ambas entradas o salidas son htched.
- El puerto de 4 bits es usado para control y estado
del puerto de 8 bits.
STB (Strobe Inpul.). Un "bajo" en esta entrada carga datos dentro del latch
de entrada.
iBF (Input Bufler Full F/F). Un "alto" en esta salida indica que los datos
han sido cargados dentro del latch de entrada, en esencia, una
contestación. IBF es puesto por la entrada STB comenzando con un bajo y
inicializado por el flanco de subida de la entrada RD.
INTR. (Interrupt Request.) Un "alto" en esta salida puede ser usado para
interrumpir al CPU cuando un dispositivo de entrada requiere servicio.
INTR es puesto cuando STB' es "uno", IBF es "uno" e INTE es "uno". Es
inicializado por el flanco de bajada de RD'.Este procedimiento permite a
un dispositivo de entrada solicitar servicio desde el CPU simplemente
haciendo strobing de los datos dentro del puerto.
INTE A
Controlada por el bit setheset de PC4.
INTE B
Controlada por el bit setheset de PC2.
Apeadice A
OBF' (outputBufler Full F/F). La salida OBF "baja" para indicar que el
CPU ha escrito datos en un puerto especffico. El OBF F/F es "puesto" por
el flanco de subida de la entrada WR y "reseteado" por la entrada ACK
(bajo).
INTR (Interrupt Request). Un "alto" en esta salida puede ser usado para
interrumpir al CPU cuando un dispositivo de salida ha aceptado datos
transmitidos por el CPU. INTR es puesta cuando ACK es "uno", OBF es
"uno". Esta es "reseteada" por la cafda del flanco de WR.
INTE A
Controlada por el bit setheset de FC6.
A9 I
Apéndice A
#+
INTE B
Controlada por el bit setheset de PC2.
VI'
INTR (Interrupt Request). Un "alto" en esta salida puede ser usado para
interrumpir al CPU para operaciones de entrada y salida.
Operaciones de salida.
OBF'. (Output W e r Full.) La salida OBF "baja" para indicar que el CPU
ha escrito un dato en el puerto A.
Operaciones de entrada
CONTROLADOR DE
INTERRUPCIONES (8259A)
B4
A P ~ D I C Ec
lMANuAL DE USO
Conectando el sistema a la PC
c1
C.1 ConfiguraCiónpara direccionamiento (31FH-318H).
fp