MICROCOMPUTADORAS
MICROCOMPUTADORAS
MICROCOMPUTADORAS
OBJETIVO:
Aprender y aplicar los conocimientos de la teoría y el funcionamiento de los microcontroladores para realizar
aplicaciones industriales y científicas en tiempo real
Bibliografía:
Manual de prácticas del laboratorio de microcomputadoras (no es necesario imprimirlo, solo estudiarlo!)
Set de instrucciones impreso
Tarjeta de desarrollo basada en el microcontrolador PIC16F877a (se les prestará en el laboratorio)
Software:
*Realización de los ejercicios de la práctica, preguntas y orientación por parte del profesor
Las prácticas se constituyen de varios ejercicios que los alumnos, organizados en equipos de 2 o 3 estudiantes realizarán
en el horario de clase, si no terminan los ejercicios el día establecido en el cronograma de actividades los podrán realizar
la siguiente clase bajo el criterio de un punto menos por cada clase atrasada, se considerará como práctica entregada
cuando se demuestre el correcto funcionamiento de todos los ejercicios de la práctica, la calificación otorgada será a
criterio del profesor tomando en cuenta que tan bien se han comprendido y aplicado y explicados los conceptos de la
teoría de los microcontroladores.
Los ejercicios estarán basados en el manual de prácticas del laboratorio de microcomputadoras.
Criterios de evaluación:
Microcontrolador
Arquitectura Harvard
Ejecución secuencial:
Ejecución pipeline:
Para nuestro curso usaremos el PIC16F877A, algunas de las características más importantes que tiene el
microcontrolador son:
• 8K de memoria FLASH
• 368 bytes de memoria RAM
• 255 bytes de memoria EEPROM
• 35 instrucciones
• 5 puertos paralelos (A, B, C, D, E)
• Convertidor Analógico Digital
• Comunicación Serie Asíncrona
• Comunicación Serie Síncrona (paralela, I2C)
• Tres módulos temporizadores
• Dos módulos CCP que pueden operar como Comparación, Captura o PWM
• 14 posibles fuentes de interrupción
Modos de direccionamiento
Direccionamiento inmediato:
El dato utilizado por la instrucción se codifica al mismo tiempo que la propia instrucción. En este caso, al dato se le
denomina literal o constante numérica.
La memoria interna se direcciona en forma directa por medio de los bits “ff” contenidos en las instrucciones que operan
sobre registros. De esta manera se puede direccionar cualquier posición desde la 00h a la FFh.
AADWF 0x25,0 ; W W + (0x25) Suma W mas el contenido de la localidad 0x25, deja el resultado en W
SUBWF 0x2A,1 ; (0x2A) (0x2A) – W Resta de la localidad 0x2a el contenido de W, deja el resultado en 0x2A
El registro FSR sirve como puntero para direccionamiento indirecto además de servir para seleccionar el banco activo. La
posición 00 del mapa de RAM es la llamada dirección indirecta.
Si en cualquier instrucción se opera con la dirección 00, en realidad se estará operando con la dirección a donde apunte
el contenido del FSR.
Por ejemplo si el FSR contiene el valor 1Ah, una instrucción que opere sobre la dirección 0, en realidad lo hará sobre la
dirección 1Ah. Puede decirse que la posición 1Ah de memoria fue direccionada en forma indirecta a través del puntero
FSR.
Ejemplo :
Programa simple que borra de las localidades 20h a 2Fh usando direccionamiento indirecto
…
MOVLW 0x20 ;initialize pointer
MOVWF FSR ;to RAM
NEXT CLRF INDF ;clear INDF register
INCF FSR,F ;inc pointer
BTFSS FSR,4 ;all done?
GOTO NEXT ;no clear next
CONTINUE
: ;yes continue pp 31 del datasheet
Salto indexado.
Programa que implementa una tabla de verdad utilizando direccionamiento indexado (salto indexado).
El direccionamiento indexado permite resolver problemas que se puedan representar mediante tablas. Se basa en la
utilización de de la instrucción ADDWF PCL,F , de este modo la dirección de salto se consigue sumando al PCL
(contador de programa parte baja) el valor de desplazamiento contenido de W.
El PC es el contador de programa que contiene la dirección de la próxima instrucción a ser ejecutada, se incrementa
secuencialmente un una unidad o se carga con la dirección de una etiqueta (mediante GOTO por ejemplo), tiene un
tamaño de 13 bits por lo que ocupa dos localidades de memoria RAM (donde podemos leer su valor o modificarlo si
nuestro programa lo requiere)
PC :
PCL(02h) : parte baja de PC, se puede modificar como cualquier otro registro
...
LOOP
MOVF PORTA,W ; W = (PORTA)
ANDLW 0X03 ; W = W & B'00000011' , solo necesito los 2 LSB del puerto A
ADDWF PCL,F ; PCL = W
GOTO CONFIGURACION0 ; PCL + 0 ; normalmente el PC apunta a esta siguiente instrucción
GOTO CONFIGURACION1 ; PCL + 1 ; pero puedo alterar el contenido para hacerlo saltar
GOTO CONFIGURACION2 ; PCL + 2 ; a otras instrucciones, como estas.
GOTO CONFIGURACION3 ; PCL + 3 con 2 bits tengo 4 posibles combinaciones
CONFIGURACION0
MOVLW B'10011011' ; caso 0 si en la entrada tengo un 00, la salida será b'10011011'
GOTO ENVIA ; en el puerto paralelo B
CONFIGURACION1
MOVLW B'10111000'
GOTO ENVIA
CONFIGURACION2
MOVLW B'01010101'
GOTO ENVIA
CONFIGURACION3
MOVLW B'10101011'
ENVIA
MOVWF PORTB ; todas las configuraciones llegan a este punto de mi programa
GOTO LOOP
...
Operaciones útiles:
Comparación de registros
Comprobar que el contenido de un registro vale 0
( A - B) Resultado C Z
A > B Positivo 1 0
A = B Cero 1 1
A < B Negativo 0 0
Ejemplo:
MOVF REGISTRO_B,W ;
SUBWF REGISTRO_A,W ; (REGISTRO_A) - (REGISTRO_B) --> W
BTFSS STATUS,C ; ¿ A >= B ? , ¿ C = 1 ?
GOTO MENOR ; NO, VE A ETIQUETA MENOR
MAYOR_O_IGUAL ; SI
.
.
.
MENOR
.
.
.