Академический Документы
Профессиональный Документы
Культура Документы
rogramacin bsica
www.softdata.com.mx
www.softdata.com.mx
Diagramas de Flujo
Un diagrama de flujo es una interpretacin grafica de la secuencia de un programa. Debido a la complejidad del lenguaje ensamblador, a veces es conveniente realizar el programa de una forma grfica y fcil de interpretar y posteriormente hacer la conversin a partir de ah a ensamblador. Los bloques o figuras grficas que usaremos para realizar los diagramas de flujo durante este manual nos sirven para interpretar un programa para los microcontroladores PICs y hacer la traduccin a partir de ah a ensamblador, no obstante, en algunos casos esta traduccin no es la forma ms optima de minimizacin de cdigo, una vez traducido a ensamblador con las tablas de equivalencia a veces es necesario aplicarle algunas modificaciones con el fin de obtener un mayor rendimiento. Para darnos una idea aqu se muestra un programa sencillo hecho en diagramas de flujo con su correspondiente lenguaje ensamblador: Sistema que hace la funcin de una compuerta NOT, donde un Bit del Puerto A se configura como entrada y otro Bit como salida mostrando lo inverso de la entrada.
www.softdata.com.mx
Como se darn cuenta esta ltima forma est ms reducida tanto en diagrama de flujo como en cdigo ensamblador donde en los dos casos optimizamos los brincos (GOTO) y etiquetas de algunas lneas de cdigo. Tabla de bloques para los diagramas de flujo y su equivalente a las instrucciones de ensamblador
Diagrama a bloques Cdigo Ensamblador ORG 00H En el caso del MPLAB es PROG CODE END Configuracin por bits BSF 03H,5 ; ir al banco 1 de memoria (TRIS) BCF #registro , #bit ;configura un bit como salida BSF #registro , #bit ;configura un bit como entrada BCF 03H,5 ;regresar al banco 0 de memoria Configuracin por puerto BSF 03H,5 ; ir al banco 1 de memoria (TRIS) CLRF #registro ;configura un PUERTO como salida MOVLW 0FFH ; configura un PUERTO como entrada MOVWF #registro BCF 03H,5 ;regresar al banco 0 de memoria Otra forma usando el comando o nemnico TRIS CLRW ;configura un PUERTO como salida TRIS #registro MOVLW 0FFH ; configura un PUERTO como entrada TRIS #registro Ejemplos de cdigo BSF #registro , #bit BCF #registro , #bit MOVLW #numero MOVWF #registro etc ;pone a uno un bit de un registro ;pone a cero un bit de un registro ;cargar un numero a un registro Descripcin Ubicar el programa en la direccin 00H de memoria Indica la terminacin del programa Configurar que bits trabajan como entradas y/o salidas.
Pude ser cualquier cdigo en ensamblador con excepcin de instrucciones de comparacin y brincos incondicionales. Pueden ser uno o varias instrucciones dentro del mismo bloque.
www.softdata.com.mx
Comparar un Bit de un registro #registro#bit == 1 BTFSC #registro , #bit #registro#bit == 0 BTFSS #registro , #bit Comparar el valor de un Registro #registro == #num (igual) MOVLW #num ;carga num a W SUBWF #registro,0 ;resta W con REG BTFSC 03H,2 ;brinca si no es uno el flag Z #registro != #num (diferente) MOVLW #num ;carga num a W SUBWF #registro,0 ;resta W con REG BTFSS 03H,2 ;brinca si no es cero el flag Z #registro > #num (mayor) MOVLW #num ;carga num a W SUBWF #registro,0 ;resta W con REG BTFSC 03H,0 ;brinca si no es uno el flag C #registro < #num (menor) MOVLW #num ;carga num a W SUBWF #registro,0 ;resta W con REG BCTSS 03H,0 ;brinca si no es cero el flag C etiqueta Los nombres o etiquetas deben de ser de 8 caracteres mximo y pueden llevar nmeros y letras siempre y cuando el primer carcter no sea un nmero. Tampoco se deben de poner carcter especiales como #$&+, etc. Las instrucciones de condicin estn diseadas como para que si se cumplen hace la instruccin que tienen a continuacin si no se brinca a la segunda instruccin que le sigue.
;brinca si no es uno
;brinca si no es cero
etiqueta
Instruccin
etiqueta
Instruccin de condicin
(Si)
www.softdata.com.mx
Instruccin de condicin (Si) GOTO END1 (No) Una sola instruccin END1 Si desea minimizar puede sustituirla con el siguiente cdigo. Se Invierte la Instruccin de condicin Una sola instruccin
(No)
(Si)
Ejecuta un brinco incondicional a una etiqueta siempre y cuando se cumpla la condicin definida.
Instruccin de condicin (Si) GOTO END1 (No) GOTO etiqueta END1 Si desea minimizar puede sustituirla con el siguiente cdigo. Se Invierte la Instruccin de condicin GOTO etiqueta
Ejecuta un brinco incondicional a una etiqueta siempre y cuando no se cumpla la condicin definida.
(No)
Instruccin de condicin (ver tabla de condiciones) (Si) GOTO OK1 (No) GOTO END1 OK1 instruccin del Si instruccin del Si : END1 Si desea minimizar puede sustituirla con el siguiente cdigo. Se Invierte la Instruccin de condicin GOTO END1 instruccin del Si instruccin del Si :
(No) (Si)
END1
www.softdata.com.mx
(Si) (No)
END1
(Si) (No)
OK1 END1
Instruccin de condicin (ver tabla de condiciones) GOTO OK1 instruccin del No instruccin del No GOTO instruccin del Si instruccin del Si
Ejecuta una o varias instrucciones contempladas para el Si siempre y cuando se cumpla la condicin definida si en dado caso no se cumple ejecuta una o varias instrucciones contempladas para el No.
GOTO
etiqueta
Brinca a una lnea etiquetada en el programa. ; para llamar una subrutina Al terminar una subrutina regresa el control despus de la instruccin CALL de donde fue llamada. Ya en cdigo ensamblador las subrutinas deben de instansiarse antes de la instruccin END del programa Una subrutina puede llevar instrucciones, condiciones e incluso otras llamadas a subrutinas con excepcin de los brincos incondicionales (GOTO) fuera de la subrutina Hace una pausa en el programa de un tiempo definido por el programador.
CALL SUBRUTIN1
;********** etiqueta
Delay = 0.25 seg (clock = 4MHz) MOVLW 03H ; carga en W el tiempo de retardo de 0.25seg CALL DELAY ; llamada a subrutina ;************ subrutina DELAY ************* DELAY MOVWF 1AH ;contador 1 CLRF 1BH ;contador 2 CLRF 1CH ;contador 3 DELAY1 DECFSZ 1BH,1 GOTO DELAY1 DECFSZ 1CH,1 GOTO DELAY1 DECFSZ 1AH,1 GOTO DELAY1 RETURN
www.softdata.com.mx
Crea una tabla de datos. La posicin de La tabla a leer se da con el valor de W que se le suma al registro PCL y el resultado se carga en la misma W despus del llamado de la tabla
;************ subrutina TABLA1 ************* TABLA1 ADDWF 02H,1 ;carga a PCL la posicin de la tabla RETLW 10H ;posicin 0-carga a W el valor de 10H Posicin - > RETLW 20H ;posicin 1-carga a W el valor de 20H elegida RETLW 30H ;posicin 2-carga a W el valor de 30H RETLW 40H ;posicin 3-carga a W el valor de 40H RETURN
Ahora veremos un ejemplo de un programa que imprime en un display de 7 segmentos los nmeros 1-9.
www.softdata.com.mx
El siguiente ejemplo se comporta como una AND donde RA0,y RA1 son entradas y RA2 salida.
www.softdata.com.mx
Ciclos
Flags
C DC Z
Multiplicacin lgica (AND) de bit a bit con el contenido del acumulador W con el registro f 2
ANDWF
f,d
3 4
Borra o pone a cero todo el registro f Borra o pone a cero el acumulador W Complementa el registro f
1 1
Z Z
DECF
f,d
DECFSZ
f,d
1(2)
INCF
f,d
www.softdata.com.mx
INCFSZ
f,d
Incrementa el registro f, si es cero salta la siguiente instruccin Si d = 0 el resultado se carga en W Si d = 1 se almacena en si mismo f Suma lgica (OR) de bit a bit con el contenido del acumulador W con el registro f (sin acarreos de bits) Si d = 0 el resultado se carga en W Si d = 1 se almacena en si mismo f
10
IORWF
f,d
MOVF
f,d
12 13 14
Mueve el contenido del acumulador W al registro f No espera Rota el registro f a la izquierda una posicin a travs del carry Si d = 0 el resultado se carga en W Si d = 1 se almacena en si mismo f Rota el registro f a la derecha una posicin a travs del carry Si d = 0 el resultado se carga en W Si d = 1 se almacena en si mismo f
Antes: W = 10 , Puerto A(f => 0x5) = 7 Cuando d=0 o d = diferente de 1 IORWF 0x5 , 0 Despus: W = 15 , Puerto A(f => 0x5) = 10 , Z=1 Cuando d=1 IORWF 0x5 , 1 Despus: W = 5 , Puerto A(f => 0x5) = 15 , Z=1 Antes: W = 7 , Puerto A(f => 0x5) = 12 Cuando d=0 o d = diferente de 1 MOVF 0x5 , 0 Despus: W = 12 , Puerto A(f => 0x5) = 12 , Z=1 Cuando d=1 MOVF 0x5 , 0 Despus: W = 7 , Puerto A(f => 0x5) = 12 , Z=1 Antes: W = 5 , Puerto A(f => 0x5) = 125 MOVWF 0x5 Despus: W = 5 , Puerto A(f => 0x5) = 5 NOP
1 1 1 C
15
RRF
f,d
1
Antes: W = 7 , Puerto A(f => 0x5) = 13 Cuando d=0 o d = diferente de 1 Si el resultado es cero SUBWF 0x5 , 0 Z=1, si el resultado es Despus: W = 20 , Puerto A(f => 0x5) = 13 negativo C y DC van Cuando d=1 a ser igual a uno SUBWF 0x5 , 1 Despus: W = 7 , Puerto A(f => 0x5) = 20 Antes: Puerto A(f => 0x5) = A5H Cuando d=0 o d = diferente de 1 SWAPF 0x5 , 0 Despus: W = 5AH , Puerto A(f => 0x5) = A5H Cuando d=1 SWAPF 0x5 , 1 Despus: Puerto A(f => 0x5) = 5AH Antes: W = 10 , Puerto A(f => 0x5) = 7 Cuando d=0 o d = diferente de 1 XORWF 0x5 , 0 Despus: W = 13 , Puerto A(f => 0x5) = 7 , Z=1 Cuando d=1 XORWF 0x5 , 1 Despus: W = 10 , Puerto A(f => 0x5) = 13 , Z=1
SUBWF
f,d
C DC Z
17
SWAPF
f,d
Intercambia los cuatro bits menos significativos hacia los cuatro bits mas significativos y los bits mas significativos hacia los menos significativos. Si d = 0 el resultado se carga en W Si d = 1 se almacena en si mismo f
OR Exclusiva (XOR) de bit a bit con el contenido del acumulador W con el registro f
18
XORWF
f,d
www.softdata.com.mx
10
No
19 20 21 22
Ciclos
Flags
1 1
1(2) 1(2)
No
23 24 25 26 27 28 29
Ciclos
Flags
1 2 1 2 1 1 1
TO PD
30
W carga el valor k y el PC toma el valor de TOS (contenido de la cima stack) Pasa a estado de reposo. Al salir, activa el bit de estado TO y borra el PD, WTD y el prescaler. Al entrar en modo SLEEP se detiene el oscilador Carga el valor de W al TRIS f para configurar entradas y salidas OR Exclusiva (XOR) exclusiva inmediato con W
2 TO PD
31 32 33
1 1
configurado como entrada de datos
www.softdata.com.mx
11
www.softdata.com.mx
12