Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Campus Querétaro
Practica
Hardware del microc
Materia
Microcontroladores
Práctica
Programación en bajo nivel
Que presentan:
Corona García Aldo Alejandro (20140041)
García García Luis Martín (20140684)
Gonzáles Romero Julio Daniel (20140037)
Medellin Gonzalez Adrian (20140688)
Solís Cortez Alexandra (20140705)
Estudiantes de la carrera:
Ingeniería Electrónica
Asesor:
Armando Mora Campos
Fecha
Miércoles 22 de Marzo de 2023
Índice
Antecedentes…...………………………………………………………………………………….4
Objetivo……………………………………………………………………………………….5
Competencias a desarrollar…...………………………………………………………….5
Introducción…………………………………………………………………………………6
Marco Teórico……………………………………………………………………………….7
PIC16f887……………………………………………………………………………….……….7
Características.………………………………………………………………………………….7
Lenguaje Ensamblador.………………………………………………………………………13
Características.………………………………………………………………………………...14
Instrucción ADDWF……………………………………………………………………………16
AND y OR……………………………………………………………………………………….19
AND……………………………………………………………………………………………...19
OR………………………………………………………………………………………………..19
Desarrollo……………………………………………………………………………………20
Conclusiones.………………………………………………………………………………70
Bibliografía……………………………………………………………………………………….70
2
Índice de Figuras
Figura 1 Diagrama a bloques del PIC16F887 .................................................................. 9
Figura 2 Registros de funciones especiales .................................................................. 13
Figura 3 Conjunto de instrucciones del PIC16F887....................................................... 13
Figura 4 Diagrama de los pines del PIC16F887 ............................................................ 14
Figura 5 Diagrama a bloques de las acciones a realizar por el programa y el
microcontrolador. .......................................................................................................... 21
Figura 6 Diagrama esquemático del microcontrolador 16F887 ..................................... 21
Figura 7 Diagrama de flujo de la función principal ......................................................... 22
Figura 8. Diagrama de flujo de la función inicialización ................................................. 23
Figura 9. F8 ................................................................................................................... 32
Figura 10. 57 ................................................................................................................. 32
Figura 11. Resultado de la suma en binario .................................................................. 32
Figura 12. Resultado de la suma en protoboard ............................................................ 33
Figura 13. Resultado de la resta positiva, F8-57. .......................................................... 33
Figura 14. Entradas de la resta positiva ........................................................................ 34
Figura 15. Resultado de la resta positiva en protoboard................................................ 34
Figura 16. Resultado de la resta negativa, 57-F8 .......................................................... 34
Figura 17. Entradas de la resta negativa ....................................................................... 35
Figura 18. Resultado de la resta negativa en protoboard .............................................. 35
Figura 19. Entradas de la operación OR, AA y 55 ......................................................... 36
Figura 20. OR entre AA y 55 en protoboard .................................................................. 36
Figura 21. Entradas de la operación AND ..................................................................... 37
Figura 22. Resultado del AND entre AA y 55 en protoboard ......................................... 37
3
Antecedentes.
El presente reporte de práctica consiste sobre la programación en bajo
nivel aplicado en microcontroladores, con el propósito de aprender este
tipo de programación y poder ejecutar cada uno de los programas que
nos solicite nuestro docente.
4
Objetivo.
Consolidar el conocimiento de la arquitectura interna de un
microcontrolador, por medio de la programación de aplicaciones básicas
en lenguaje ensamblador, para tener una mejor comprensión de su lógica
de operación.
Competencias a desarrollar.
Especificas.
Realiza programas con las instrucciones y subrutinas en lenguaje
ensamblador, para lograr una comprensión solida de la arquitectura
interna del dispositivo.
Genéricas.
1. Destrezas tecnológicas relacionadas con el uso de maquinaria, destrezasde
computación; así como, de búsqueda y manejo de información.
2. Capacidad de trabajar en equipo Interdisciplinario y multidisciplinario.
3. Capacidad de aplicar los conocimientos en la práctica.
5
Introducción.
En la siguiente practica se hizo uso del microcontrolador 16F887 para la
programación de dicho programa, el cual como herramienta para programar se
utiliza el programa CCS C COMPILER en el cual se nos pide que lo programemos
en base a instrucciones en ensamblador, tanto la función principal como la
función de inicialización, y para el caso de la simulación tenemos el apoyo de
PROTEUS donde se desarrolla nuestro diagrama esquemático y una vez
terminado nuestra programación probarlo en PROTEUS y verificar que nuestro
programa cumpla con varias instrucciones solicitadas por el docente, una de las
primeras sentencias que desarrollara nuestro programa será encender y apagar
un leed a una frecuencia determinada por nuestro docente la segunda consiste
encender y apagar un leed conectado a un pin de salida, en el tercero consiste
en el control del encendido/apagado de un LED conectado a un pin de salida
digital, de acuerdo al valor lógico, en la cuarta consiste en la operación AND
entre una constante (de 00 a FF) y el valor de lectura de un puerto de entrada
digital de 8 bits, con la exhibición del resultado en un puerto de salida digital de 8
bits, en la quinta sentencia consiste en la operación OR entre una constante (de
00 a FF) y el valor de lectura de un puerto de entrada digital de 8 bits, con la
exhibición del resultado en un puerto de salida digital de 8 bits. Las siguientes
dos consiste en Operación AND y OR entre el valor de lectura de dos puertos de
entrada digital de 8 bits cada uno, con la exhibición del resultado en un puerto de
salida digital de 8 bits. Como hemos estado viendo en clases anteriores y como
puntos a resaltar para la correcta enseñanza de esta materia y como futuros
desarrolladores de hardware tenemos que desarrollar una caja negra con todas
las entradas y salidas y entender como funcionara nuestro programa, el
desarrollo de nuestro diagrama esquemático y diagrama de flujo para cumplir
todos los requisitos como futuros ingenieros en electrónica.
6
Marco Teórico.
PIC16f887.
Características.
Voltaje de suministro: 2V - 5V.
Consumo de corriente: 480uA a 5V / 4MHz.
Convertidor A/D de 10 bits
Arquitectura RISC .
Memoria de datos: 256 bytes SRAM, 256 bytes EEPROM.
Número de líneas de E / S: 24.
Un oscilador externo (hasta 20 MHz) o uno interno de 8 MHz
3 contadores / temporizadores.
2 comparadores analógicos.
Un puerto serie y un puerto paralelo controlado por hardware.
Watchdog Timer.
Diagrama a bloques.
En la figura 1, observaremos el diagrama bloques que nos ofrece elPIC16F887.
7
Figura 1 Diagrama a bloques del PIC16F887.
8
Tipos de memoria.
En estos microcontroladores utilizan la arquitectura Harvard, como se
puede ver en la Figura 1. La memoria del programa es de tipo FLASH. En
los rangos de tipo 10Fxx, 12Fxx y 16Fxx donde no es directamente
accesible para el usuario; en rangos de tipos más altos, se habilita la
escritura incluso en la memoria del programa. La memoria de datos es
del tipo RAM, es posible el direccionamiento directo e indirecto. En rangos
de microcontroladores de tipo inferior (10Fxx, 12Fxx, 16Fxx),la memoria de
datos se divide, por razones tecnológicas, en bloques que tienen por
nombre bancos. Los bancos se pueden seleccionar mediante software y,
de tal manera que, se puede acceder a ellos de forma arbitraria incluso
durante la ejecucióndel programa. De igual forma tienen una memoria del
tipo EEPROM. Este microcontroladorpertenece al grupo de
microcontroladores de 8 bits. Todas las celdas de memoria, así como los
registros internos del microcontrolador, tienen un ancho de 8 bits. En la
terminología de los microcontroladores, se denominan colectivamente
registros a continuación se muestra en la figura 2 los registros de
funciones especiales.
9
Registros de funciones especiales.
10
A continuación tenemos una serie de conjunto de instrucciones que se muestran en
la figura 3.
11
En la siguiente figura 4 podemos observar el diagrama de pines del PIC16F887.
Lenguaje Ensamblador.
12
Esto es útil para programar microprocesadores, microcontroladores y otros circuitos
integrados programables. Cabe destacar que este tipo de CI están presentes en
toda computadora con sus procesadores, los televisores, dispositivos de audio,
Smartphone y muchos otros hardwares. En este sentido, cabe destacar que para
cada arquitectura de procesador es necesario un lenguaje ensambladorespecífico.
Generalmente esto siempre es definido por el fabricante del hardware.Esto es así
debido a que los desarrollos de dispositivos se basan en un conjuntode
instrucciones, tipos de datos, registros, posiciones de memoria y otrascaracterísticas
propias de un determinado lenguaje de ensamblador. Esto significa que un lenguaje
ensamblador es específico de una arquitectura de computadora en particular, al
contrario de los modernos lenguajes de programación de alto nivelde la actualidad.
Características.
13
Tipos de lenguaje ensamblador.
14
operandos son todos los registros, las variables o las constantes.
Instrucción ADDWF.
ADDWF significa suma aritmética de W y un archivo (f). Esta suma el valor
almacenado en “w” con la constante llamada “k”. El resultado se sobre escribe en
“w” y lo guarda. Se bebe tener presente, que las operaciones aritméticas
modifican las banderas del registro STATUS (Z, C, DC).
Z (Zero): Es un identificador que detecta cuando el resultado de las
operaciones haya salido “0”. En caso sea verdadero este identificador tomará
el valor de z=1. En caso sea falso (distinto de 0), tomara el valor de z=0.
DC (Acarreo de mitad): Es un identificador que detecta cuando el resultado
de la operación haya pasado el valor de (0000 1111 =d15). En caso sea
verdadero, este identificador tomara el valor de DC=1. En caso de que sea
falso (el resultado es menor que d15) tomara el valor de DC=0.
C (acarreo): Es un identificador que detecta cuando el resultado se ha
desbordado del resultado máximo (b bits=d255). En caso de que sea
verdadero, este identificador tomara el valor de C=1. En caso de que sea falso
(no hubo desbordamiento), tomara el valor de C=0.
CALL Etiqueta Los programas deberían ser escritos de forma que las pocas
primeras instrucciones pongan al micro en el Inicio de Programa Principal.
El «Programa Principal» se localizará físicamente al final del listado y éste puede estar
en el final de la memoria o a mitad del camino, si el programa es aproximadamente250
bytes de largo.
15
AND y OR.
Las Compuertas Lógicas son circuitos electrónicos conformados
internamente por transistores que se encuentran con arreglos especiales
con los que otorgan señales de voltaje como resultado o una salida de
forma booleana, están obtenidos por operaciones lógicas binarias (suma,
multiplicación). También niegan, afirman, incluyen o excluyen según sus
propiedades lógicas. Estas compuertas se pueden aplicar en
otras áreas de la ciencia como mecánica, hidráulica o neumática.
AND
OR
En el Algebra de Boole esta es una suma. Esta compuerta permite que con
cualquiera de sus entradas que este en estado binario 1, su salida pasara a
un estado 1 también. No es necesario que todas sus entradas estén
accionadas para conseguir un estado 1 a la salida pero tampoco causa
algún inconveniente. Para lograr un estado 0 a la salida, todas sus entradas
deben estar en el mismo valor de
0. Se puede interpretar como dos interruptores en paralelo, que sin importar
cualse accione, será posible el paso de la corriente.
0 𝐴𝐴𝐴 0 = 0 0 𝐴𝐴 0 = 0
0 𝐴𝐴𝐴 1 = 0 0 𝐴𝐴 1 = 1
1 𝐴𝐴𝐴 0 = 0 1 𝐴𝐴 0 = 1
1 𝐴𝐴𝐴 1 = 1 1 𝐴𝐴 1 = 1
16
DESARROLLO
17
Figura 6 Diagrama esquemático del microcontrolador 16F887
18
Figura 7. Diagrama de flujo de la función principal y de inicialización
19
//Fusibles de configuración
hardware. #fuses XT
//OSCIL
ADOR.
//XT = Cristal oscilador <= 4MHz.
//Opciones fusible oscilador: LP, XT, HS,
//EC_IO, INTRC_IO, INTRC, RC_IO, RC.
20
//NOFCMEN = No protección ante falla de reloj.
//Opciones del monitor de reloj: NOFCMEN,
//FCMEN.
#fuses MCLR //USO PIN MCLR (como reset externo o como pin
E/S).
//MCLR = Pin utilizado como Master Clear.
//Opciones pin MCLR: NOMCLR, MCLR.
21
#fuses NOLVP //PROGRAMACIÓN EN BAJO
VOLTAJE.
//NOLVP = programación en bajo voltaje desactivada.
//Opciones: NOLVP, LVP.
22
#byte PORTD
= 0x08#byte
TRISE = 0x89
#byte PORTE
= 0x09
//.............
// NOTA: Es más adecuado hacer e incluir un archivo con todos los registros del
// MCU utilizado (por ejemplo registros_PIC16F887.c), que listar en esta
// sección los registros del microcontrolador.
//Manejo de un bit de un registro como varible de un bit, con la directiva #bit.
////////////////////////////////VARIABLES GLOBALES/////////////////////////////
/////////////////////////PROTOTIPOS DE FUNCIONES Y
TAREAS//////////////////////void inicializar(void); //Ejemplos.
void permisivos(void);
void imprimir_constante(void);
////////////////////////////////FUNCIÓN
PRINCIPAL//////////////////////////////void main(void) {
iniciali
zar();
permi
sivos()
;
while(true) { //Ciclo contínuo con
while.imprimir_constante();
}
} //Fin main.
23
////////////////////////////////////FUNCIONES//////////////////////////////////
/*Función de MOVLWinicialización de variables y configuración de
periféricos. Descripción: .
Entradas:
Ninguna.
Salidas:
Ninguna.
*/
void
inicializar(void
) {#asm
MOVLW
0X00
MOVWF
TRISD
#endasm
}
//Función para detectar que esten presentes todas las condiciones de operación,
//antes de iniciar el ciclo contínuo.
//Descripción: .
//Entradas: .
//Salidas: .
void permisivos(void) { }
//Función de operación del LED 1.
//Descripción: .
//Entradas: .
//Salidas: .
void
24
imprimir_constante(void
) {#asm
MOVLW
0X03
MOVWF
PORTD
#endasm
Los resultados de este inciso se presentan en las figuras 8:
25
Inciso b) Apagado/encendido de un LED conectado a un pin de salida digital.
26
Figura 10 Diagrama esquemático para el inciso b)
//Fusibles de configuración
hardware. #fuses XT
//OSCIL
ADOR.
//XT = Cristal oscilador <= 4MHz.
//Opciones fusible oscilador: LP, XT, HS,
//EC_IO, INTRC_IO, INTRC, RC_IO, RC.
#fuses PUT //TEMPORIZADOR AL ENERGIZAR (Power Up
Timer).
//PUT = Temporizador habilitado.
//Opciones temporizador al energizar: NOPUT, PUT.
27
//Opciones Watch Dog Timer: NOWDT, WDT.
//Manejo de puertos.
#use fast_IO(A) //Manejo básico de puertos en este
compilador. #use fast_IO(B) //Otras opciones de manejo de
puertos:
#use fast_IO(C) //#use fixed_IO, #use
standard_IO. #use fast_IO(D)
#use fast_IO(E)
29
////////////////////////////////VARIABLES GLOBALES/////////////////////////////
/////////////////////////PROTOTIPOS DE FUNCIONES Y
TAREAS//////////////////////void inicializar(void); //Ejemplos.
void permisivos(void);
void operacion_LED_1(void);
iniciali
zar();
permi
sivos()
} //Fin main.
////////////////////////////////////FUNCIONES//////////////////////////////////
31
Figura 11. Resultado en protoboard.
32
Figura 12 Diagrama de flujo de la función principal y de inicialización
33
Sabiendo lo que se quiere hacer, se procede a la elaboración del código,resultando
en lo siguiente:
34
//NOPROTECT = No protegido.
//Opciones protección de código: NOPROTECT, PROTECT.
#fuses MCLR //USO PIN MCLR (como reset externo o como pin E/S).
//MCLR = Pin utilizado como Master Clear.
//Opciones pin MCLR: NOMCLR, MCLR.
//Manejo de puertos.
#use fast_IO(A) //Manejo básico de puertos en este compilador.
#use fast_IO(B) //Otras opciones de manejo de puertos:
#use fast_IO(C) //#use fixed_IO, #use standard_IO.
#use fast_IO(D)
#use fast_IO(E)
35
#byte TRISA = 0x85
#byte PORTA = 0x05
#byte TRISB = 0x86
#byte PORTB = 0x06
#byte TRISC = 0x87
#byte PORTC = 0x07
#byte TRISD = 0x88
#byte PORTD = 0x08
#byte TRISE = 0x89
#byte PORTE = 0x09
//.............
// NOTA: Es más adecuado hacer e incluir un archivo con todos los registros del
// MCU utilizado (por ejemplo registros_PIC16F887.c), que listar en esta
// sección los registros del microcontrolador.
////////////////////////////////VARIABLES GLOBALES/////////////////////////////
inicializar();
permisivos();
36
do { //Ciclo contínuo con do...while.
} while(true);
operacion_LED_1();
}
} //Fin main.
////////////////////////////////////FUNCIONES//////////////////////////////////
//Función para detectar que esten presentes todas las condiciones de operación,
//antes de iniciar el ciclo contínuo.
//Descripción: .
//Entradas: .
//Salidas: .
void permisivos(void) {
37
}
39
Figura 16 Diagrama esquemático para el inciso d).
inicializar();
permisivos();
while(true) { //Ciclo contínuo con while.
operacion();
}
} //Fin main.
////////////////////////////////////FUNCIONES//////////////////////////////////
/*Función de inicialización de variables y configuración de periféricos.
Descripción: .
Entradas: Ninguna.
Salidas: Ninguna.
*/
void inicializar(void) {
#asm
MOVLW 0X00
MOVWF TRISD
#endasm
#asm
MOVLW 0XFF
MOVWF TRISB
#endasm
}
//Función para detectar que esten presentes todas las condiciones de operación,
//antes de iniciar el ciclo contínuo.
//Descripción: .
//Entradas: .
//Salidas: .
void permisivos(void) {
}
//Función de operación del LED 1.
//Descripción: .
//Entradas: .
//Salidas: .
void operacion(void) {
#asm
MOVF PORTB,0
MOVWF PORTD
#endasm
}
42
Los resultados de este inciso d) se presentan en las figuras 17
43
Inciso e) Operación AND entre una constante (de 00 a FF) y el valor de lectura de un
puerto de entrada digital de 8 bits, con la exhibición del resultado en un puerto de salida
digital de8 bits.
44
Figura 20 Diagrama esquemático para el inciso E).
inicializar();
permisivos();
while(true) { //Ciclo contínuo con while.
operacion();
}
46
} //Fin main.
////////////////////////////////////FUNCIONES//////////////////////////////////
TRISD=0B00000000;
TRISB=0B11111111;
}
//Función para detectar que esten presentes todas las condiciones de operación,
//antes de iniciar el ciclo contínuo.
//Descripción: .
//Entradas: .
//Salidas: .
void permisivos(void) {
47
Figura 21 Operación AND entre una constante (de 00 a FF).
Figura 22. Operación AND entre una constante (de 00 a FF) en protoboard.
48
Inciso f) Operación OR entre una constante (de 00 a FF) y el valor de lectura de un
puerto de entrada digital de 8 bits, con la exhibición del resultado en un puerto de salida
digital de8 bits.
Para comenzar este inciso F) de igual forma debemos realizar el diseño a bloques
de lo que se requiere hacer, la cual lo podremos ver en la figura 23.
49
Figura 24 Diagrama esquemático para el inciso F).
50
//Opciones del monitor de reloj: NOFCMEN,
//FCMEN.
#fuses MCLR //USO PIN MCLR (como reset externo o como pin E/S).
//MCLR = Pin utilizado como Master Clear.
//Opciones pin MCLR: NOMCLR, MCLR.
52
Figura 25 Operación 0R entre una constante (de 00 a FF).
Inciso g) Operación AND entre el valor de lectura de dos puertos de entrada digital de
53
8 Bitscada uno, con la exhibición del resultado en un puerto de salida digital de 8 bits.
A continuar se realiza el diagrama esquemático del circuito antes de comenzar a programar para
establecer los pines de entradas que se utilizaran, el diagramasepresenta en la figura 28
54
Sabiendo lo que se requiere hacer, se procede a la elaboración del código,
resultando en lo siguiente:
#fuses MCLR //USO PIN MCLR (como reset externo o como pin E/S).
//MCLR = Pin utilizado como Master Clear.
//Opciones pin MCLR: NOMCLR, MCLR.
//Manejo de puertos.
#use fast_IO(A) //Manejo básico de puertos en este compilador.
#use fast_IO(B) //Otras opciones de manejo de puertos:
#use fast_IO(C) //#use fixed_IO, #use standard_IO.
#use fast_IO(D)
#use fast_IO(E)
56
#byte TRISC = 0x87
#byte PORTC = 0x07
#byte TRISD = 0x88
#byte PORTD = 0x08
#byte TRISE = 0x89
#byte PORTE = 0x09
//.............
inicializar();
permisivos();
while(true) { //Ciclo contínuo con while.
operacion();
}
} //Fin main.
////////////////////////////////////FUNCIONES//////////////////////////////////
58
Inciso h) Operación OR entre el valor de lectura de dos puertos de entrada digital de 8
Bits cadauno, con la exhibición del resultado en un puerto de salida digital de 8 Bits.
Para este último inciso H) de igual forma debemos realizar el diseño a bloques de
lo que se requiere hacer, la cual lo podremos ver en la figura 30.
59
Sabiendo lo que se requiere hacer, se procede a la elaboración del código,
resultando en lo siguiente:
#include <16F887.h> //Microcontrolador a utilizar.
//Manejo de puertos.
#use fast_IO(A) //Manejo básico de puertos en este compilador.
#use fast_IO(B) //Otras opciones de manejo de puertos:
#use fast_IO(C) //#use fixed_IO, #use standard_IO.
#use fast_IO(D)
#use fast_IO(E)
////////////////////////////////VARIABLES GLOBALES/////////////////////////////
inicializar();
permisivos();
while(true) { //Ciclo contínuo con while.
operacion();
}
} //Fin main.
////////////////////////////////////FUNCIONES//////////////////////////////////
/*Función de inicialización de variables y configuración de periféricos.
Descripción: .
Entradas: Ninguna.
Salidas: Ninguna.
*/
void inicializar(void) {
TRISB=0XFF;
TRISC=0XFF;
TRISD=0X00;
}
//Función para detectar que esten presentes todas las condiciones de operación,
62
//antes de iniciar el ciclo contínuo.
//Descripción: .
//Entradas: .
//Salidas: .
void permisivos(void) {
}
//Función de operación del LED 1.
//Descripción: .
//Entradas: .
//Salidas: .
void operacion(void) {
#asm
MOVF PORTB,0
IORWF PORTC,0
MOVWF PORTD
#endasm
}
63
Conclusiones.
Se concluye con éxito la entrega de la practica 2, y la correcta programación en
CCS COMPILER para la correcta ejecución de cada uno de las ejecuciones
solicitadas por el docente, de tal forma que se adquieren conocimientos para el
diseño de estrategias para entender en este caso el lenguaje en ensamblador y
ser un poco más dinámicos a la hora de programar.
64
Bibliografía.
Boyd, L. (2016). Programa de formación: Mecánico - electrotécnico Nombre del
programa: Procesamiento digital - microprocesadores III.
https://slideplayer.com/slide/8596661/
65
Custom Computer Services, Inc. (s. f.). CCS, Inc. - Compiler Features. CCS Info.
http://www.ccsinfo.com/content.php?page=compiler-details
66