Está en la página 1de 58

Instituto Tecnologico de Chetumal

Ingeniería Eléctrica
Microcontroladores
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores

Unidad 2.- El Modelo de


Ingeniería Eléctrica

programación del microcontrolador


en lenguaje ensamblador.

Ing. Germán A. Rodríguez May


Departamento de Ingeniería Eléctrica y Electrónica

Marzo - Julio 2021

Prof. Germán Alberto Rodríguez May


2.1. Programación en lenguaje ensamblador
2.1.1. Modos de direccionamiento.
Especialidad: Sistemas Eléctricos de Potencia

2.1.2. Conjunto de instrucciones.


Materia: Microcontroladores
Ingeniería Eléctrica

2.1.2.1. Instrucciones aritméticas.

2.1.2.2. Instrucciones lógicas.

2.1.2.3. Instrucciones de control de


programa.
2.2. Estructura del programa.
2.3. Programación de puertos digitales.
Prof. Germán A. Rodríguez May
2.1. Programación en lenguaje ensamblador
 El único lenguaje que entienden los microcontroladores es
Especialidad: Sistemas Eléctricos de Potencia

el código máquina formado por ceros y unos del sistema


binario.
 El lenguaje ensamblador expresa las instrucciones de una
Materia: Microcontroladores

forma más natural al hombre a la vez que muy cercana al


Ingeniería Eléctrica

microcontrolador, ya que cada una de esas instrucciones


se corresponde con otra en código máquina.
 El lenguaje ensamblador trabaja con nemónicos, que son
grupos de caracteres alfanuméricos que simbolizan las
órdenes o tareas a realizar.
 La traducción de los nemónicos a código máquina
entendible por el microcontrolador la lleva a cabo un
programa ensamblador.
 El programa escrito en lenguaje ensamblador se denomina
código fuente (*.asm). El programa ensamblador
proporciona a partir de este fichero el correspondiente
código máquina,Prof.que suele
Germán tener
A. Rodríguez May la extensión *.hex.
Especialidad: Sistemas Eléctricos de Potencia
2.1. Programación en lenguaje ensamblador

• El conjunto de instrucciones que tiene un


Materia: Microcontroladores

microprocesador da origen al denominado lenguaje


Ingeniería Eléctrica

assembler o lenguaje ensamblador.


• Es un lenguaje de programación de bajo nivel para
los computadores, uP, uC y otros circuitos integrados
programables.

Prof. Germán A. Rodríguez May


Especialidad: Sistemas Eléctricos de Potencia
2.1. Programación en lenguaje ensamblador

• El lenguaje ensamblador fue usado principalmente


en los inicios del desarrollo de software, cuando
Materia: Microcontroladores

aún no se contaba con potentes lenguajes de alto


Ingeniería Eléctrica

nivel y los recursos eran limitados.


• Actualmente se utiliza con frecuencia en ambientes
académicos y de investigación, especialmente
cuando se requiere la manipulación directa de
hardware, altos rendimientos, o un uso de recursos
controlado y reducido.

Prof. Germán A. Rodríguez May


2.1.1 Modos de direccionamiento
Uno de los problemas al que se enfrenta un programador es
Especialidad: Sistemas Eléctricos de Potencia

el de acceder a los datos disponibles en la memoria de una


manera rápida y eficaz. Existen diversos mecanismos para
lograr esto, a los que se denomina modos de
Materia: Microcontroladores

direccionamiento.
Ingeniería Eléctrica

Los modos de direccionamiento para los Microcontroladores


PIC son los siguientes:
• Direccionamiento implícito
• Direccionamiento inmediato
• Direccionamiento directo
• Direccionamiento indirecto

Prof. Germán A. Rodríguez May


2.1.1 Modos de direccionamiento
Direccionamiento implícito Las instrucciones que usan este
Especialidad: Sistemas Eléctricos de Potencia

modo de direccionamiento se caracterizan por no requerir el


uso de operandos, debido a que no necesitan acceder a la
memoria de datos. Por ejemplo, la instrucción NOP pertenece
Materia: Microcontroladores

a esta categoría. La instrucción NOP no produce ningún


Ingeniería Eléctrica

efecto visible en la ejecución del programa, a pesar de lo cual


es útil porque consume cierta cantidad de ciclos de máquina y
por ello permite la creación de retardos de tiempo.
Direccionamiento inmediato Se presenta cuando el dato no
proviene de la memoria, sino que está incluido en la misma
instrucción. Por ejemplo: MOVLW 5A . Esta instrucción almacena
el literal 5A en el registro W Se puede apreciar que el dato no pro‐
cede del exterior ni tampoco de la memoria de datos. El
direccionamiento inmediato se utiliza cuando los datos que toman
las instrucciones son literales (constantes) conocidos de antemano.

Prof. Germán A. Rodríguez May


2.1.1 Modos de direccionamiento
Direccionamiento directo. El direccionamiento directo se
Especialidad: Sistemas Eléctricos de Potencia

utiliza cuando el dato se transfiere hacia, o desde, una


posición de memoria particular. Por ejemplo: MOVWF 0x20
Esta instrucción mueve el contenido del registro W hacia la posición
Materia: Microcontroladores

de memoria 0x20. El contenido de la posición 0x20 desaparece y en


Ingeniería Eléctrica

su lugar se coloca el valor del registro W.


NOTA:
Los números hexadecimales se escriben anteponiéndoles 0x. De lo
anterior se deduce que el valor 0x20 puede leerse: "número
hexadecimal 20". Este valor corresponde al número decimal 32.

Prof. Germán A. Rodríguez May


2.1.1 Modos de direccionamiento
Direccionamiento indirecto: el registro FSR.
Especialidad: Sistemas Eléctricos de Potencia

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.
Materia: Microcontroladores
Ingeniería Eléctrica

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.

Prof. Germán A. Rodríguez May


Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores

Prof. Germán A. Rodríguez May


2.1.2 Conjunto de Instrucciones.
Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores

Prof. Germán A. Rodríguez May


2.1.2 Conjunto de Instrucciones.
2.1.2.1 Instrucciones Aritméticas.
Instrucciones ARITMÉTICAS
Especialidad: Sistemas Eléctricos de Potencia

NEMÓNICO DESCRIPCIÓN FLAGS


AFECTADOS
addlw k (W) + k  (W) C – DC - Z
Materia: Microcontroladores

addwf f,d (W) + (f)  (destino) C – DC - Z


Ingeniería Eléctrica

decf f,d (f) - 1  (destino) Z


incf f,d (f) + 1  (destino) Z
sublw k K - (W)  (W) C – DC - Z
subwf f,d (f) - (W)  (destino) C – DC - Z

Prof. Germán A. Rodríguez May


2.1.2.2 Instrucciones Lógicas.
Instrucciones LÓGICAS
Especialidad: Sistemas Eléctricos de Potencia

NEMÓNICO DESCRIPCIÓN FLAGS


AFECTADOS
andlw k (W) AND k  (W) Z
andwf f,d (W) AND (f)  (destino) Z
Materia: Microcontroladores

comf f,d (/f)  (destino) Z


Ingeniería Eléctrica

iorlw k (W) OR k  (W) Z


iorwf f,d (W) OR (f)  (destino) Z
rlf f,d Rota (f) a izquierda  (destino) C
rrf f,d Rota (f) a derecha  (destino) C
swap f,d Intercambia nibbles (f)  (destino) Ninguno
xorlw k (W) XOR k  (W) Z
xorwf f,d (W) XOR (f)  (destino) Z

Prof. Germán A. Rodríguez May


2.1.2.3 Instrucciones de Control de programa.
Instrucciones de CARGA
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
Especialidad: Sistemas Eléctricos de Potencia

clrf f 00  (f) Z
clrw 00  (W) Z
movf f,d (f)  (destino) Z
Materia: Microcontroladores

movlw k k  (W) Ninguno


Ingeniería Eléctrica

movwf f (W)  (f) Ninguno


Instrucciones de BIT
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS

bcf f,b Pone a 1el bit ‘b’ del registro ‘f’ Ninguno
bsf f,b Pone a 2el bit ‘b’ del registro ‘f’ Ninguno
Instrucciones de SALTO
NEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS

btfsc f,b Salta si el bit ‘b’ de ‘f’ es 0 Ninguno


btfss f,b Salta si el bit ‘b’ de ‘f’ es 1 Ninguno
decfsz f,d (f) - 1  (destino) y salta si es 0 Ninguno
incfsz f,d (f) + 1  (destino) y salta si es 0 Ninguno
goto k Salta a la dirección ‘k’ Ninguno
Prof. Germán A. Rodríguez May
2.1.2.3 Instrucciones de Control de programa.
Instrucciones de manejo de SUBRUTINAS
Especialidad: Sistemas Eléctricos de Potencia

NEMÓNICO DESCRIPCIÓN FLAGS


AFECTADOS
call k Llamada a subrutina Ninguno
Materia: Microcontroladores

retfie Retorno de una interrupción Ninguno


Ingeniería Eléctrica

retlw k Retorno con un literal en (W) Ninguno


return Retorno de una subrutina Ninguno
Instrucciones ESPECIALES
NEMÓNICO DESCRIPCIÓN FLAGS
AFECTADOS
clrwdt Borra Timer del Watchdog /TO - /PD
nop sleep No operación Ninguno
Entra en modo de bajo consumo /TO - /PD

Prof. Germán A. Rodríguez May


Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
2.2 Estructura del programa.

Prof. Germán A. Rodríguez May


2.2 Estructura del programa.
El código fuente está compuesto por una sucesión de líneas de
Especialidad: Sistemas Eléctricos de Potencia

texto.
Cada línea puede estructurarse en hasta cuatro campos o
columnas separados por uno o más espacios o tabulaciones
Materia: Microcontroladores

entre sí.
Ingeniería Eléctrica

Campo de etiquetas. Expresiones alfanuméricas escogidas por


el usuario para identificar una determinada línea. Todas las
etiquetas tienen asignado el valor de la posición de memoria en
la que se encuentra el código al que acompañan.
Campo de código. Corresponde al nemónico de una
instrucción, de una directiva o de una llamada a macro.
Campo de operandos y datos. Contiene los operandos que
precisa el nemónico utilizado. Según el código, puede haber
dos, uno o ningún operando.
Campo de comentarios. Dentro de una línea, todo lo que se
encuentre a continuación de un punto y coma (;) será ignorado
por el programa ensamblador y considerado como comentario.
Prof. Germán A. Rodríguez May
2.2 Estructura del programa.
Directivas del Ensamblador
Especialidad: Sistemas Eléctricos de Potencia

• Las directivas son indicaciones que se le dan al


programa ensamblador para controlar algunos
Materia: Microcontroladores

aspectos del ensamblado del código. Ejemplo:


Ingeniería Eléctrica

• Decirle al programa ensamblador donde inicia un  
programa.
• Definir constantes.
• Indicar que posiciones de memoria están reservadas  
para almacenar datos en forma temporal (variable).
• Llenar una porción de memoria con un dato
especificado.

Prof. Germán A. Rodríguez May


2.2 Estructura del programa.
Directivas del Ensamblador
•Controlan el proceso de ensamblado del programa, pero no son
Especialidad: Sistemas Eléctricos de Potencia

parte del mismo (también se conocen como


pseudoinstrucciones).
• A continuación se recogen algunas de las más habituales
Materia: Microcontroladores
Ingeniería Eléctrica

END
Es la única directiva obligatoria. Indica al ensamblador
dónde debe detener el proceso. Debe colocarse en la última
línea del programa.
<etiqueta> EQU <expresión>
El valor <expresión> es asignado a <etiqueta>. Estas
directivas se suelen colocar al principio del programa y
habitualmente se usan para definir constantes y
direcciones de memoria.
[<etiqueta>] ORG <expresión>
Las instrucciones del código fuente que siguen a esta
directiva se ensamblan a partir de la posición indicada por
<expresión>. Prof. Germán A. Rodríguez May
Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
2.2 Estructura del programa.

Prof. Germán A. Rodríguez May


Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
2.2 Estructura del programa.

Prof. Germán A. Rodríguez May


Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
2.2 Estructura del programa.

Prof. Germán A. Rodríguez May


Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
2.2 Estructura del programa.

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
ORGANIZACIÓN de la MEMORIA
Especialidad: Sistemas Eléctricos de Potencia

Dentro del PIC16F877 se distinguen tres bloques de


memoria.
Materia: Microcontroladores

Memoria de programa
Ingeniería Eléctrica

En sus 8192 posiciones (8K) contiene el programa con las


instrucciones que gobiernan la aplicación. Es del tipo no
volátil.
Memoria de datos RAM
Guarda las variables y datos. Consta de varios registros de
8 bits. Es volátil.
Memoria EEPROM de datos
Es una pequeña área de memoria de datos de lectura y
escritura no volátil que permite garantizar que determinada
información estará siempre disponible al reinicializarse el
programa. Se gestiona de manera distinta a la memoria de
datos RAM.
Prof. Germán A. Rodríguez May
Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
2.3 Programación de Puertos Digitales.
La memoria de programa
Especialidad: Sistemas Eléctricos de Potencia

•Almacena todas las instrucciones del


programa de control, que debe estar
grabado de forma permanente.
•La información contenida en esta
Materia: Microcontroladores

0000h RESET

memoria se graba previamente mediante


Ingeniería Eléctrica

0001h

un equipo físico denominado


0002h
0003h

0004h INT programador o grabador.


0005h

0006h
0007h
•El PIC16F877 tiene una memoria de
0008h programa no volátil denominada ROM
Flash que admite unas 1000 grabaciones.
0009h

000Ah
000Bh

1FFCh •La memoria de programa está organizada


1FFDh

1FFEh
en palabras de 14 bits cada una.
1FFFh
•Todas las instrucciones ocupan una
posición de memoria de programa
•A la dirección 0 se accederá tras un
RESET y a la posición 4 tras una
interrupción cualquiera
Prof. Germán A. Rodríguez May
2.3 Programación de Puertos Digitales.
Organización de la Memoria
MEMORIA RAM DE DATOS
Especialidad: Sistemas Eléctricos de Potencia

La memoria de datos está distribuida en 4 posibles bancos de 128 bytes


cada uno. Por tanto, la máxima cantidad de memoria disponible en los
Materia: Microcontroladores

microcontroladores PIC16 es de 512 bytes. No obstante, no están


Ingeniería Eléctrica

implementadas todas las posiciones de memoria en todos los bancos. Por


ejemplo, un PIC16F877 solo tiene implementadas 368 posiciones de
memoria de datos.
La memoria de datos se organiza en bancos de 128 bytes porque
cuando se indica una dirección de operando fuente, sólo se pueden
incluir 7 bits en la codificación.Nos movemos pues en 27=128 bytes.
A cada posición de memoria se le denomina registro.

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
•Almacena todas los datos que se manejan en un programa.
Especialidad: Sistemas Eléctricos de Potencia

•Se distinguen dos tipos de registro:


Registros de funciones especiales SFR. Son los primeros
registros. Cada uno de ellos cumple un propósito especial
Materia: Microcontroladores

en el control del PIC.


Ingeniería Eléctrica

Registros de propósito general GPR. Se pueden usar para


guardar datos temporales. El PIC16F877 dispone de 368.

•Cuenta con cuatro bancos de memoria: Bancos 0, 1, 2 y 3.


Los SFR aparecen de la dirección 00h a 1Fh del Banco 0,
de 80h a 9Fh del Banco 1, de 100h a 10F en el Banco 2 y
de 180h a 18Fh del Banco 3. Algunos son accesibles desde
dos o más bancos.
Los GPR ocupan 368 posiciones de memoria. Algunas
posiciones de los Bancos 1 a 3 se mapean sobre el Banco 0.
Existen zonas de memoria no empleadas que devuelven ‘0’
en caso de lectura.
Prof. Germán A. Rodríguez May
Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
2.3 Programación de Puertos Digitales.
INDF 00h INDF 80h INDF 100h INDF 180h
TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
Especialidad: Sistemas Eléctricos de Potencia

FSR 04h FSR TRISA 84h FSR 104h FSR 184h


PORTA 05h TRISA 85h 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h 107h 187h
PORTD 08h TRISD 88h 108h 188h
PORTE 09h TRISE 89h 109h 189h
0Ah PCLATH PCLATH PCLATH
Materia: Microcontroladores

PCLATH 8Ah 10Ah 18Ah


INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
Ingeniería Eléctrica

PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch


PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado 18Eh
TMR1H 0Fh 8Fh EEADRH 10Fh Reservado 18Fh
T1CON 10h 90h 110h 190h
TMR2 11h SSPCON2 91h
T2CON 12h PR2 92h
SSPBUF 13h SSPADD 93h
SSPCON 14h SSPSTAT 94h
CCPR1L 15h 95h
CCPR1H 16h 96h
CCP1CON 17h 97h
RCSTA 18h TXSTA 98h Registros
Registros de
TXREG 19h SPBRG 99h Propósito
de
RCREG 1Ah 9Ah Propósito General
CCPR2L 1Bh 9Bh General
CCPR2H 1Ch 9Ch 16 Bytes 16 Bytes
CCP2CON 1Dh 9Dh
ADRESH 1Eh ADRESL 9Eh
1Fh ADCON1 9Fh 11Fh 19Fh
ADCON0
20h A0h 120h 1A0h
Registros
Registros Registros Registros de
de de de Propósito
Propósito Propósito Propósito General
General General General
96 Bytes 80 Bytes 80 Bytes 80 Bytes
0EFh 16Fh 1EFh
0F0h 170h 1F0h
7Fh FFh 17Fh 1FFh
Banco 0 Banco 1 Banco 2 Banco 3
2.3 Programación de Puertos Digitales.
Especialidad: Sistemas Eléctricos de Potencia

RA0/AN0
RC0
RA1/AN1
RC1
RA2/AN2/Vref-
Puerto A
Materia: Microcontroladores

RC2
RA3/AN3/Vref+
RC3 Puerto C
RA4/TOCKI
Ingeniería Eléctrica

RC4
RA5/AN4 RC5
RC6/Tx
RC7/Rx
RD0
RD1
RD2
Puerto D
RD3
RB0/INT
RD4
RB1
RD5
RB2
RD6
RB3 Puerto B
RD7
RB4
RB5
RB6
RE0/RD/AN5
Puerto E RE1/WR/AN6
RB7

RE2/CS/AN7

Distribución de los puertos del PIC16F877

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.

03h o STATUS: Registro de estados. Contiene el


Especialidad: Sistemas Eléctricos de Potencia

estado aritmético de la ALU, la causa del reset y los bits


de preselección de página para la memoria de datos. La
figura siguiente, muestra los bits correspondientes a este
Materia: Microcontroladores
Ingeniería Eléctrica

registro. Los bits 5 y 6 (RP0 y RP1) son los bits de


selección de página para el direccionamiento directo de la
memoria de datos; solamente RP0 se usa en los
PIC16F84. RP1 se puede utilizar como un bit de propósito
general de lectura/escritura. Los bits TO y PD no se
pueden modificar por un proceso de escritura; ellos
muestran la condición por la cual se ocasionó el último
reset.

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
Ingeniería Eléctrica

Prof. Germán A. Rodríguez May


Bits del Registro de Estados.
Registro PORTx y TRISx
Cada PORT (A, B, C, D, E) tiene un tiene un
registro de dirección TRISx
PORTB Register
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

Dato
Configura Dirección del Dato
PORTB Tri-State Register (TRISB)
TRISB7TRISB6TRISB5TRISB4TRISB3TRISB2TRISB1TRISB0

1 = corresponding PORTB pin is an INPUT


0 = corresponding PORTB pin is an OUTPUT
Configurando entradas analógicas
como digitales
I/O’s con capacidades analógicas por
default son analógicas sobre el reset
Configurando entradas analógicas
como digitales
Para configurar las entradas analógicas como digitales
existen 2 vías:
1) Registro Selectros Analógico (ANSEL and ANSELH)
Fara dispositivos con > 8 pines analógicos
O
2)Registro ADC Control 1 (ADCON1)
Para dispositivos con < 8 pines analógicos
Analog Select Register (ANSEL)
ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0

Analog Select High Register (ANSELH)


ANS13 ANS12 ANS11 ANS10 ANS9 ANS8

1 = Pin assigned as Analog Input


0 = Digital I/O
Port Configuration Bits
ADC Control Register 1 (ADCON1)
ADFM ADCS2 PCFG3 PCFG2 PCFG1 PCFG0
Configurando entradas analógicas para
Digital
PCFG AN7 AN6 AN5 AN4 AN3 AN2 AN1 Vdd AN0
<3:0>

Port Configuration Bits


ADC Control Register 1 (ADCON1)
ADFM ADCS2 PCFG3 PCFG2 PCFG1 PCFG0
Ingeniería Eléctrica
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
;Ejercicio1.s Este programa suma el contenido de las posiciones 0x20 y 0x21
; de memoria y almacena el resultado en 0x22.
; Librerias Incluidas
PROCESSOR 16F877A ; Indica el modelo de PIC que se usa es una directiva del
;ensamblador
#include <xc.inc> ;directiva de ensamblador que incluye archivo de cabecera que
;contiene los registros de funciones
;especiales de los diferentes microcontroladores del fabricante
; Palabras de configuración
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial
;Programming Enable bit (RB3 is digital I/O,HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit
;(Data EEPROM code protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits
;(Write protection off all program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit ; (Code protection off)
PSECT udata ; Directiva de ensamblador que define la seccion de memoria a
;utilizar considerando variables en cualquier localidad de la memoria RAM
;con la excepción de los espacios compartidos (unbanked memory)
;Zona para edefinicion de variables o etiquetas
OPERANDO1 EQU 0x20 ; Define la posicion de OPERANDO1
OPERANDO2 EQU 0x21 ; Define la posicion de OPERANDO2
RESULTADO EQU 0x22 ; Define la posicion de RESULTADO
PSECT code, delta=2, abs ; Directiva de ensamblador que define la seccion de
;memoria para la escritura de Código en memoria de programa
ORG 0x0000 ;Directiva de ensamblador que indica la dirección donde se situe
;la primera linea del codigo en la memoria de programa.
movlw 05 ;5 --> W
movwf OPERANDO1 ;W --> Operando1
movlw 02 ;2 --> W
movwf OPERANDO2 ;W --> Operando2
movf OPERANDO1,0 ; OPERANDO1 --> W
addwf OPERANDO2,0 ;W + operando1 --> W
movwf RESULTADO ; W --> resultado
END ;directiva de fin del programa
;EJERCICIO2.S Programa que lee el numero binario introducido mediante 3
;interruptores conectados a la puerta PA (RA0,RA1,RA2), luego suma 2 unidades
;a ese valor y visualiza el resultado mediante 4 diodos led conectados a la
;puerta PB (RB0, RB1,RB2,RB3).
; Librerias Incluidas
PROCESSOR 16F877A ; Indica el modelo de PIC que se usa es una directiva del
;ensamblador
#include <xc.inc> ;directiva de ensamblador que incluye archivo de cabecera que
;contiene los registros de funciones especiales de los diferentes
;microcontroladores del fabricante
;Palabras de configuración
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable
;bit (RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
;protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
;program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
RADIX HEX ;Los valores se representaran en hexadecimal directiva de ensamblador
PSECT udata ; Directiva de ensamblador que define la sección de memoria a utilizar
;considerando variables en cualquier localidad de la memoria RAM con la
;excepción de los espacios compartidos (unbanked memory)
PSECT code, delta=2, abs ; Directiva de ensamblador que define la sección de memoria
;para la escritura de Código en memoria de programa
ORG 0x0000 ;Directiva de ensamblador que indica la dirección donde se situe la
;primera línea del código en la memoria de programa.
;Configuracion de puertos digitales
bsf STATUS,5 ;Pone a 1 el bit 5 del registro STATUS para direccionar la página 1 de
la memoria de datos.
bcf STATUS,6 ;Pone a 0 el bit 6 del registro STATUS para direccionar la página 1 de
la memoria de datos.
movlw 0x06 ;Configura todas las terminales del puerto A
movwf ADCON1 ;como digitales
movlw 0xff ;Configura todas las terminales del puerto A
movwf TRISA ;como entradas digitales
movlw 0x00 ;Configura todas las terminales del puerto B
movwf TRISB ;como salidas digitales
bcf STATUS,5 ;regresa al banco 0
clrf PORTA ; se inicializan los valores del puerto A
clrf PORTB ; se inicializan los valores del puerto B
; programa principal
inicio:
movf PORTA,0 ;Lee el dato en el puertoB y lo guarda en el registro de trabajo W
addlw 2 ;Suma el valor de 2 al registro de trabajo W y el resultado se almacena en W
movwf PORTB ; El valor almacenado en el registro de trabajo W se envía al puerto B
goto inicio ; se reinicia el ciclo
END ; Directiva de fin de programa
Diagrama de circuito para simulación en proteus

C1

1
27p
R1 R2 R3 X1 U1
600 600 600 CRYSTAL 13 33
OSC1/CLKIN RB0/INT
14 34
C2 OSC2/CLKOUT RB1

2
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
27p 4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8
RE0/AN5/RD RC1/T1OSI/CCP2
16 R4 R5 R6 R7
9 17 300 300 300 300
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
RC7/RX/DT
26 D4 D3 D2 D1
LED-GREEN LED-GREEN LED-GREEN LED-GR
19
RD0/PSP0
20
RD1/PSP1
R8 RD2/PSP2
21
600 22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
;EJERCICIO3.S Realizar un programa en lenguaje ensamblador para encender y apagar un
;led conectado al pin RA0 del Microcontrolador 16F877A.
; Librerias Incluidas
PROCESSOR 16F877A ; Indica el modelo de PIC que se usa es una directiva del
;ensamblador
#include <xc.inc> ;directiva de ensamblador que incluye archivo de cabecera que
;contiene los registros de funciones especiales de los diferentes microcontroladores
;del fabricante
; CONFIG
CONFIG FOSC = HS ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = OFF ; Brown-out Reset Enable bit (BOR disabled)
CONFIG LVP = ON ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable
;bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
;protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
;program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
PSECT udata ; Directiva de ensamblador que define la seccion de memoria a utilizar
;considerando variables en cualquier localidad de la memoria RAM
CONT1 EQU 0X20
CONT2 EQU 0X21
PSECT code, delta=2, abs ; Directiva de ensamblador que define la seccion de memoria
;para la escritura de Código en memoria de programa
ORG 0x0000 ;Directiva de ensamblador que indica la dirección donde se situe la
;primera linea del codigo en la memoria de programa.
;Configuracion de puertos digitales
bsf STATUS,5 ;Pone a 1 el bit 5 del registro STATUS para direccionar la página 1 de
;la memoria de datos.
bcf STATUS,6 ;Pone a 0 el bit 6 del registro STATUS para direccionar la página 1 de
;la memoria de datos.
movlw 0x06 ;Configura todas las terminales del puerto A
movwf ADCON1 ;como digitales
movlw 0x00 ;Configura todas las terminales del puerto A
movwf TRISA ;como salidas digitales
bcf STATUS,5 ;regresa al banco 0
; programa principal
ENCLED:
bsf PORTA,0 ; Pone a 1 el bit 0 del puerto A (RA0) (Led encendido)
call RETARDO ; llamado a rutina de retardo de tiempo
bcf PORTA,0 ; Pone a 0 el bit 0 del puerto A (RA0) (Led apagado)
call RETARDO ; llamado a rutina de retardo de tiempo
GOTO ENCLED ; Se reinicia el ciclo
;Subrutinas
RETARDO:
movlw 0xff ;Carga el registro de trabajo W con el Valor Exadecimal FF en decimal 255
movwf CONT1 ;Carga el registro de trabajo W en registro CONT1 (255)
REP1:
movlw 0xff ;Carga el registro de trabajo W con el Valor Exadecimal FF en decimal 255
movwf CONT2 ;Carga el registro de trabajo W en registro CONT1 (255)
REP2:
decfsz CONT2,1 ;Decrementa el valor almacenado en registro CONT2, y salta si el
;valor es cero
GOTO REP2 ;Salta a Etiqueta REP2
decfsz CONT1,1 ;Decrementa el valor almacenado en registro CONT1, y salta si el
;valor es cero
GOTO REP1 ;Salta a Etiqueta REP1
RETURN ; Retorno de subrutina
END ; Directiva de fin de programa
Diagrama de circuito para simulación en proteus
C1

1
27p
X1 U1
CRYSTAL 13 33
OSC1/CLKIN RB0/INT
14 34
C2 OSC2/CLKOUT RB1

2
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
27p 4 38
RA2/AN2/VREF-/CVREF RB5
5 39
D1 6
RA3/AN3/VREF+ RB6/PGC
40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
LED-GREEN 8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
R8 RD2/PSP2
21
600 22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
;Ejercicio4.S multiplicar el valor introducido mediante 3 interruptores conectados a
;las líneas RA1-RA3 del puerto A con el introducido por 3 interruptores conectados a
;las líneas RB0-RB2 del puerto B, el resultado de esa Multiplicación deberá
;visualizarse en las líneas RB3-RB7 del puerto B.
PROCESSOR 16F877A ; Indica el modelo de PIC que se usa es una directiva del
;ensamblador
#include <xc.inc> ;directiva de ensamblador que incluye archivo de cabecera que
;contiene los registros de funciones especiales de los diferentes microcontroladores
;del fabricante
;Bits de configuracion
; CONFIG
CONFIG FOSC = XT ; Oscillator Selection bits (XT oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR Enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable
;bit (RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
;protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
;program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
PSECT udata ; Directiva de ensamblador que define la seccion de memoria a utilizar
;considerando variables en cualquier localidad de la memoria RAM con la excepción
;de los espacios compartidos (unbanked memory)
; Declaración de variables
VAR1 EQU 0X20
VAR2 EQU 0X21
RESULTADO EQU 0x22
PSECT code, delta=2, abs ; Directiva de ensamblador que define la seccion de memoria
;para la escritura de Código en memoria de programa.
ORG 0x0000 ;Directiva de ensamblador que indica la dirección donde se situe la
;primera linea del codigo en la memoria de programa.
;Configuracion de puertos digitales
bsf STATUS,5 ;Pone a 1 el bit 5 de ESTADO para direccionar Banco 1
movlw 0x06 ;Configura todas las terminales del puerto A
movwf ADCON1 ;como digitales
movlw 0xff ;Configura todas las terminales del puerto A
movwf TRISA ;como entradas digitales
movlw 00000111B ;Configurar puertoB
movwf TRISB ;como entrada y salida de datos.
bcf STATUS,5 ;Pone a 0 el bit 5 de ESTADO pasando a Banco 0
clrf PORTA ;Limpiar PuertoA
clrf PORTB ;Limpiar PuertoB
clrf VAR1 ;Limpiar VAR1
clrf RESULTADO ;Limpiar RESULTADO
CICLO:
movf PORTA,0 ;Lee la información del puertoA y lo guarda en w
movwf VAR1 ;El valor leido del PuertoA se almacena en VAR1
rrf VAR1,1 ;El dato leido, se rota una posición hacia a la derecha para que este,
;corresponda al valor real introducido por el puertoA y se guarda nuevamente en
;VAR1.
movlw 00000111B ;Dado que el puertoB esta configurado como entrada/salida, es
;necesario asegurar que unicamente se lean las terminales
movwf VAR2 ;configuradas como entradas por lo que se carga este codigo binario en w
;y luego se transfiere hacia VAR2.
movf PORTB,0 ;Se lee la información del puertoB y se guarda en registro W
andwf VAR2,1 ;Con el valor almacenado en VAR2, se ejecuta la instrucción andwf con
;el dato leido del puerto que hace que unicamente se tomen en cuenta los datos
;configurados como entradas del puertoB y el resultado ;se almacena en VAR2 para su
;posterior procesamiento.
movlw 0 ;Se inicializa el registro de trabajo w con 0.
;Ciclo de Multiplicación
inicio:
addwf VAR1,0 ;Suma el valor de registro w con el valor almacenado en VAR1
movwf RESULTADO ;El resultado se almacena en el registro RESULTADO.
decfsz VAR2,1 ;Decrementa el valor almacenado en registro VAR2, y salta la siguiente
;instrucción si el valor es cero
goto inicio ; si el resultado es diferente de cero se va a la etiqueta inicio y
;vuelve a iniciar el ciclo.
rlf RESULTADO,1 ;Se rota una posición a la Izquierda
rlf RESULTADO,1 ;Se rota una posición hacia la izquierda
rlf RESULTADO,1 ;Se rota una posición hacia la izquierda hasta llegar al bit del
;puerto programado como salida de datos.
movf RESULTADO,0 ;Leer el valor almacenado en RESULTADO y guardarlo en w
movwf PORTB ;Mover el dato almacenado en w y mandarlo a las terminales del puertoB
;configuradas como salidas.
goto CICLO ;Regresar a la etiqueta CICLO para comenzar de nuevo la lectura de los
;puertos en un ciclo infinito.
end ;
Diagrama de circuito para simulación en proteus
R11 R10 R9
600 600 600

C1

1
27p
R1 R2 R3 X1 U1
600 600 600 CRYSTAL 13 33
OSC1/CLKIN RB0/INT
14 34
C2 OSC2/CLKOUT RB1

2
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
27p 4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
R12 R4 R5 R6 R7
19 300 300 300 300 300
RD0/PSP0
20
RD1/PSP1
R8 RD2/PSP2
21
600 22
RD3/PSP3
27
RD4/PSP4
RD5/PSP5
28 D5 D4 D3 D2 D1
29 LED-GREEN LED-GREEN LED-GREEN LED-GREEN LED-GR
RD6/PSP6
30
RD7/PSP7
PIC16F877A
;Ejercicio5.S PROGRAMA DE CONTEO EN EL QUE SE INCLUYE un bucle
;de retardo en ms de manera que se pueda ver mas claro como se incrementa
;de unidad en unidad cada vez el valor de CONTA Y PC.
PROCESSOR 16F877A ; Indica el modelo de PIC que se usa es una directiva del
;ensamblador
#include <xc.inc> ;directiva de ensamblador que incluye archivo de cabecera que
;contiene los registros de funciones especiales de los diferentes microcontroladores
;del fabricante
; CONFIG
CONFIG FOSC = XT ; Oscillator Selection bits (XT oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR Enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable
;bit (RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit (Data EEPROM code
;protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off; all
;program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)
PSECT udata ; Directiva de ensamblador que define la seccion de memoria a utilizar
;considerando variables en cualquier localidad de la memoria RAM con la excepción
;de los espacios compartidos (unbanked memory)
; Declaracion de Variables
CONTA EQU 0x20 ;Variable para almacenar el valor de conteo hasta llegar al valor
;predeterminado
CONTA2 EQU 0x21 ; Contador interno para el retardo en delay1.
CONTA3 EQU 0x22 ;Contador interno para el retardo en delay2.
PSECT code, delta=2, abs ; Directiva de ensamblador que define la seccion de memoria
;para la escritura de Código en memoria de programa
ORG 0x00 ;Directiva de ensamblador que indica la dirección donde se situe la primera
;linea del codigo en la memoria de programa.
goto inicio ; salta a la dirección 5 para sobrepasar
ORG 0x05 ; el vector de interrupción.
inicio: bsf STATUS,5 ; Seleciona el banco 1
movlw 0x00 ; Se configura PuertaB como salida
movwf PORTC
bcf STATUS,5 ; Selección del banco 0
clrf CONTA ; CONTA = 0
BUCLE1: incf CONTA,F ; CONTA + 1 --> CONTA
movf CONTA,W ; CONTA se carga en W
movwf PORTC ; El valor de W se carga en el puerto C
movlw 0x00
movwf CONTA2 ; Se inicializa CONTA2 a 0x00
movwf CONTA3 ; Se inicializa CONTA3 a 0x00
DELAY1: decf CONTA2 ; Se decrementa CONTA2 una unidad
DELAY2: decf CONTA3 ; Se decrementa CONTA3 en una unidad
nop ; Instruccion para consumir tiempo
nop ; Instruccion para consumir tiempo
nop ; Instruccion para consumir tiempo
movf CONTA3,1 ; Se actualiza Z
btfss STATUS,2 ; Explora Z y si vale 1 se produce "brinco"
GOTO DELAY2
movf CONTA2,1 ; Se actualiza Z
btfss STATUS,2 ; Explora Z y si vale 1 se produce "brinco"
goto DELAY1
movlw 0x5f ; W <-- 0x5f
subwf CONTA,W ; CONTA - W --> W
btfss STATUS,2 ; Explora Z y si vale 1 se produce "brinco"
GOTO BUCLE1 ; Si Z = 0 se vuelve a bucle1
BUCLE2: goto BUCLE2 ; si Z = 1 se produce un bucle infinito
End ;Directiva de fin de programa
Diagrama de circuito para simulación en proteus

C1
1
27p U1
X1 13
OSC1/CLKIN RB0/INT
33
CRYSTAL 14 34
C2 OSC2/CLKOUT RB1
35
RB2
2

2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
27p 4 38
RA2/AN2/VREF-/CVREF RB5
5 39
6
RA3/AN3/VREF+ RB6/PGC
40 D1
7
RA4/T0CKI/C1OUT RB7/PGD R1
RA5/AN4/SS/C2OUT
15 300
RC0/T1OSO/T1CKI
8 16 LED-BLUE
9
RE0/AN5/RD RC1/T1OSI/CCP2
17 D2
10
RE1/AN6/WR RC2/CCP1
18
R6
RE2/AN7/CS RC3/SCK/SCL
R2 23 300
RC4/SDI/SDA
1 24 LED-BLUE
MCLR/Vpp/THV RC5/SDO
25
600 RC6/TX/CK
26 D3
RC7/RX/DT R7
19 300
RD0/PSP0
20 LED-BLUE
RD1/PSP1
21
RD2/PSP2
22 D4
RD3/PSP3
27
R8
RD4/PSP4
28 300
RD5/PSP5
29 LED-BLUE
RD6/PSP6
30
RD7/PSP7 D5
PIC16F877A
R9
300
LED-BLUE

D6
R10
300
LED-BLUE
D7
R11
300
LED-BLUE
D8
R12
300
LED-BLUE

También podría gustarte