Diapositivas 3 indexado y subrutinas.pdf · A < B NEGATIVO C=0 y Z=0 A = B CERO C=1 y Z=1. PROGRAMA...
Transcript of Diapositivas 3 indexado y subrutinas.pdf · A < B NEGATIVO C=0 y Z=0 A = B CERO C=1 y Z=1. PROGRAMA...
Diapositivas 3 Comprobación de registros Concepto de “Salto indexado” Concepto de subrutinas
Comparación de registros1. Comprobación que un registro es igual a cero.
MOVF REGISTRO, FBTFSS STATUS, ZGOTO NoEsCero
EsCero……
NoEsCero…
2. Comprobación que dos registros son iguales.
MOVF REG1, WSUBWF REG2, WBTFSC STATUS, ZGOTO Iguales
NoIguales……
Iguales…
3. Comprobación que un registro es mayor o menor que otro.
MOVF REG2, WSUBWF REG1, WBTFSS STATUS, CGOTO Menor
MayorIgual……
Menor…
Operación( A – B) Resultado Bits de C y Z
A > B POSITIVO C=1 y Z=0A < B NEGATIVO C=0 y Z=0A = B CERO C=1 y Z=1
PROGRAMA 2. Comparar el dato de entrada por el puerto A con un valoralmacenado en memoria, de tal forma que:
a) Si PORTA = Número, entonces se encienden todos los leds del puerto B.b) Si PORTA > Número, entonces se activan los leds pares del puerto B.c) Si PORTA < Número, entonces se sólo enciende el nibble alto del puerto B.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>
NUMERO EQU D’13’
ORG 0x00BSF STATUS, RP0CLRF TRISBMOVLW B’11111111’MOVWF TRISABCF STATUS, RP0
INICIO MOVLW NUMEROSUBWF PORTA, WMOVLW B’11110000’BTFSS STATUS, CGOTO SALIDAMOVLW B’11111111’BTFSC STATUS, ZGOTO SALIDAMOVLW B’01010101’
SALIDA MOVWF PORTBGOTO INICIO
END
Continuación:
A1 A0 B1 B0 F1A>B
F2A<B
F3A=B
0 0 0 0 0 0 0 1
1 0 0 0 1 0 1 0
2 0 0 1 0 0 1 0
3 0 0 1 1 0 1 0
4 0 1 0 0 1 0 0
5 0 1 0 1 0 0 1
6 0 1 1 0 0 1 0
7 0 1 1 1 0 1 0
8 1 0 0 0 1 0 0
9 1 0 0 1 1 0 0
10 1 0 1 0 0 0 1
11 1 0 1 1 0 1 0
12 1 1 0 0 1 0 0
13 1 1 0 1 1 0 0
14 1 1 1 0 1 0 0
15 1 1 1 1 0 0 1
EJEMPLO.
Diseñe un circuito digitalcomparador de magnitudde 2 bits
A1A0
B1B0
F1: A>B
F2: A<B
F3: A=B?
F1 = 4,8,9,12,13,14( )må F2 = 1,2,3,6,7,11( )
må F3 = 0,5,10,15( )må
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
A1
B1
B0
A1
A0A0B1
B0 00 01 11 10
00
01
11
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
A1
B1
B0
A1
A0A0B1
B0 00 01 11 10
00
01
11
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
A1
B1
B0
A1
A0A0B1
B0 00 01 11 10
00
01
11
10
1 1
1
1
1
1
1
1
1
1
1 1
1
1
1
1
F1 = A1 B1 + A0 B1 B0 + A1 A0 B0 F2 = A1 B1 + A0 B1 B0 + A1 A0 B0
Las funciones resultantes son:
F3 = A1 A0 B1 B0 + A1 A0 B1 B0 + A1 A0 B1 B0 + A1 A0 B1 B0 = A0 Å B0( ) A1 Å B1( )
B1A1
B0A0
A1B1
A0B0
F1
F2
A0B0
A1B1
F3
SALTO INDEXADOEs una técnica que permite resolver problemas que se basan en elcomportamiento de una tabla de verdad.
La dirección de salto se consigue sumando a un registro base(registro PCL) un valor de desplazamiento almacenado en unregistro índice (registro W). A este valor de desplazamiento se ledenomina offset.
A1 A0 B1 B0 F1A>B
F2A<B
F3A=B
0 0 0 0 0 0 0 1
1 0 0 0 1 0 1 0
2 0 0 1 0 0 1 0
3 0 0 1 1 0 1 0
4 0 1 0 0 1 0 0
5 0 1 0 1 0 0 1
6 0 1 1 0 0 1 0
7 0 1 1 1 0 1 0
8 1 0 0 0 1 0 0
9 1 0 0 1 1 0 0
10 1 0 1 0 0 0 1
11 1 0 1 1 0 1 0
12 1 1 0 0 1 0 0
13 1 1 0 1 1 0 0
14 1 1 1 0 1 0 0
15 1 1 1 1 0 0 1
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>
ORG 0BSF STATUS, RP0CLRF TRISBMOVLW B’11111111’MOVWF TRISABCF STATUS, RP0
INICIO MOVF PORTA, WANDLW B’00001111’
ADDWF PCL, FGOTO CONFIG0GOTO CONFIG1GOTO CONFIG2GOTO CONFIG3GOTO CONFIG4...GOTO CONFIG15
PROGRAMA 3: Diseñar un comparador de magnitud
CONFIG0 MOVLW B’00000001’GOTO SALIDA
CONFIG1 MOVLW B’00000010’GOTO SALIDA
CONFIG2 MOVLW B’00000010’GOTO SALIDA
CONFIG3 MOVLW B’00000010’GOTO SALIDA
CONFIG4 MOVLW B’00000100’GOTO SALIDA
.
.
.CONFIG15 MOVLW B’00000001’
SALIDA MOVWF PORTBGOTO INICIO
END
A1 A0 B1 B0 F1A>B
F2A<B
F3A=B
0 0 0 0 0 0 0 1
1 0 0 0 1 0 1 0
2 0 0 1 0 0 1 0
3 0 0 1 1 0 1 0
4 0 1 0 0 1 0 0
5 0 1 0 1 0 0 1
6 0 1 1 0 0 1 0
7 0 1 1 1 0 1 0
8 1 0 0 0 1 0 0
9 1 0 0 1 1 0 0
10 1 0 1 0 0 0 1
11 1 0 1 1 0 1 0
12 1 1 0 0 1 0 0
13 1 1 0 1 1 0 0
14 1 1 1 0 1 0 0
15 1 1 1 1 0 0 1
CONTINUACIÓN:
SUBRUTINASUna subrutina es un conjunto de instrucciones al que se tieneacceso desde cualquier punto del programa principal.
Es un subprograma que se ejecuta cada vez que el programaprincipal lo necesita.
LLAMADA DE SUBRUTINA: Acción de pasar del programaprincipal a la subrutina. Se realiza con la instrucción CALL, desdeel programa principal.
RETORNO DE SUBRUTINA: Acción de volver al programa principaldespués de llevar a cado las tareas implementadas en lasubrutina. Se realiza con la instrucción RETURN, al final de lasubrutina.
Proceso_X
Proceso_X
Proceso_X
Programa principalsin subrutinas
Proceso_X
RETURNCALL Proceso_X
CALL Proceso_X
CALL Proceso_X
Programa principalcon subrutinas
La PILA (STACK) es una zona de memoria que se encuentra separadade las memorias de programa y la de datos, dentro delmicrocontrolador.
Tiene una estructura tipo LIFO (Last In First Out).
El PIC 16F84A tiene una pila de 8 niveles o registros de 13 bits delongitud cada uno.
Cuando se realiza la llamada de subrutina, en automático su guardael contenido del registro PC en la posición superior de la PILA.
La recuperación el contenido de la pila y escribirlo de nuevo en elregistro PC se ejecuta retorno de subrutina.
…0A6 CALL PROCESO0A7 .............1B5 PROCESO .............1C3 RETURN... .......
PILA0A7
0A6 1B5 xxx 1C3 0A7PC PC PC PC PC
PILA PILA0A7
PILA0A7
PILA0A7
Antes delCALL PROCESO
Al ejecutarCALL PROCESO
Durante lasubrutina PROCESO
Antes delRETURN
Al ejecutarRETURN
PROGRAMA CON USO DE SUBRUTINA:
ENTRADAS SALIDAS
A B C S5 S4 S3 S2 S1 S0
0 0 0 0 0 0 1 0 1 0
1 0 0 1 0 0 1 0 0 1
2 0 1 0 1 0 0 0 1 1
3 0 1 1 0 0 1 1 1 1
4 1 0 0 1 0 0 0 0 0
5 1 0 1 0 0 0 1 1 1
6 1 1 0 0 1 0 1 1 1
7 1 1 1 1 1 1 1 1 1
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>
ORG 0BSF STATUS, RP0CLRF TRISBMOVLW B’11111111’MOVWF TRISABCF STATUS, RP0
INICIO MOVF PORTA, WANDLW B’00000111’CALL TABLAMOVWF PORTBGOTO INICIO
TABLA ADDWF PCL, FRETLW B’00001010’RETLW B’00001001’RETLW B’00100011’RETLW B’00001111’RETLW B’00100000’RETLW B’00000111’RETLW B’00010111’RETLW B’00111111’
END
EJEMPLO. Realice el programa para el control tinaco-cisterna mostrado en la figura.Para ello debe utilizar lo siguiente:
Tres sensores de humedad en el tinaco:a) SV: Sonda de vacíob) SLL: Sonda de llenadoc) SR : Sonda de rebose o derrame
Dos bombas de agua:a) Bomba B1b) Bomba B2
Cinco indicadores:a) Luz de vacíob) Luz de llenándosec) Luz de llenod) Luz de rebosee) Alarma audible
Condiciones de funcionamiento:
Cuando ninguna sonda está mojada se entiende que el tinaco está vacío deberánencenderse ambas bombas. La luz de “VACÍO” se activa únicamente.
Cuando el agua toca la sonda SV seguirá llenándose el tinaco con ambas bombas. Laluz de “LLENÁNDOSE” se activa únicamente.
Cuando el agua toca la sonda SLL se detiene la bomba B2 y sigue funcionando labomba B1. La luz de “LLENO” se activa únicamente.
Si el agua toca la sonda SR se detiene la bomba B1, lo que detiene el llenado del tinacoy la luz de “REBOSE” se activa únicamente.
Al producirse un fallo en las sondas de entrada, se detendrán ambas bombas y se activala alarma audible.
Solución.Realizar la tabla de verdad para definir el comportamientodel sistema:
ENTRADAS SALIDAS
SR SLL SV B2 B1 AL REB LLENO LLENAND VACIO
0 0 0 1 1 0 0 0 0 10 0 1 1 1 0 0 0 1 00 1 0 0 0 1 0 0 0 00 1 1 0 1 0 0 1 0 01 0 0 0 0 1 0 0 0 01 0 1 0 0 1 0 0 0 01 1 0 0 0 1 0 0 0 01 1 1 0 0 0 1 0 0 0
NOTA: Entradas en color rojo indican condiciones de fallo del sistema.
Código: __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>
ORG 0BSF STATUS, RP0CLRF TRISBMOVLW B’11111111’MOVWF TRISABCF STATUS, RP0
INICIO MOVF PORTA, WANDLW B’00000111’CALL TABLAMOVWF PORTBGOTO INICIO
TABLA ADDWF PCL, FRETLW B’01100001’RETLW B’01100010’RETLW B’00010000’RETLW B’00100100’RETLW B’00010000’RETLW B’00010000’RETLW B’00010000’RETLW B’00001000’
END
PROGRAMA 4. Lectura de los primeros 3 bits del puerto A que fijanel número de LEDS que se iluminarán, conectados en el puerto B.
Si por ejemplo se lee PortA=“-----011” entonces se encenderán losdiodos D2, D1 y D0, el resto permanecerán apagados.
PIC16F84A
PortA PortB
- - - - - 0 1 1
PROGRAMA 5. Lectura de los primeros 4 bitsdel puerto A y su escritura en el puerto B,visualizando en un display de 7 segmentosde cátodo común.
PIC16F84A
PortA PortB
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0abcdefg
Conexión del display de 7segmentos al puerto B:
0 B’00111111’ = H’3F’1 B’00000110’ =H’06’2 B’01011011’ =H’5B’3 B’01001111’ =H’4F’4 B’01100110’ =H’66’5 B’01101101’ =H’6D’6 B’01111101’ =H’7D’7 B’00000111’ =H’07’8 B’01111111’ =H’7F’9 B’01100111’ =H’67’A B’01110111’ =H’77’B B’01111100’ =H’7C’C B’00111001’ =H’39’D B’01011110’ =H’5E’E B’01111001’ =H’79’F B’01110001’ =H’71’
CÓDIGO: __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSCLIST P=16F84AINCLUDE <P16F84A.INC>
ORG 0BSF STATUS, RP0CLRF TRISBMOVLW B’11111111’MOVWF TRISABCF STATUS, RP0
INICIO MOVF PORTA, WANDLW B’00001111’CALL TABLAMOVWF PORTBGOTO INICIO
TABLA ADDWF PCL, FRETLW H’3F’RETLW H’06’RETLW H’5B’RETLW H’4F’RETLW H’66’RETLW H’6D’...
END