Está en la página 1de 49

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

Enero - Junio 2020

Prof. Germán A. 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


microprocesador da origen al denominado lenguaje
Materia: Microcontroladores
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.
•El ensamblador MPASM (distribuido por Microchip) soporta los
sistemas de numeración decimal, hexadecimal, octal, binario y
Especialidad: Sistemas Eléctricos de Potencia

ASCII.

•Los nemónicos que tengan una constante como operando deberán


Materia: Microcontroladores

incluirla respetando la sintaxis que se indica a continuación.


Ingeniería Eléctrica

TIPO SINTAXIS
Decimal D’<valor>’ d’<valor>’ .<valor>
Hexadecima H’<valor>’ h’<valor>’ 0x<valor>
l <valor>H <valor>h
Octal O’<valor>’ o’<valor>’
Binario B’<valor>’ b’<valor>’
ASCII A’<carácter>’ a’<carácter>’ ‘<carácter>’
Cadena “<cadena>”

Las constantes hexadecimales que empiecen por una letra deben ir


precedidas de un cero para no confundirlas con una etiqueta. Ejemplo:
movlw 0F7h
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).
•Hay más de 50 directivas reconocidas por MPASM. A
Materia: Microcontroladores
Ingeniería Eléctrica

continuación se recogen algunas de las más habituales


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 aRodríguez
Prof. Germán A. partirMayde la posición indicada por
<expresión>.
2.2 Estructura del programa.
CONFIG <expresión> [& <expresión> & ... & <expresión>]
Especialidad: Sistemas Eléctricos de Potencia

Permite indicar la configuración elegida para la grabación


del PIC. Ejemplo: CONFIG _CP_OFF & _WDT_OFF &
_XT_OSC
Materia: Microcontroladores

LIST P=16F877
Ingeniería Eléctrica

Indica el tipo de microcontrolador utilizado.


INCLUDE <p16F877.inc> o INCLUDE “p16F877.inc”
Incluye en el programa un fichero donde se definen las
etiquetas con las que se nombra a los diferentes registros
y sus bits. Este fichero se encuentra en el directorio
principal del programa ensamblador. Puede usarse esta
directiva para incluir cualquier otro fichero (¡Ojo! El
fichero de inclusión no puede terminar con una directiva
END).

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
Materia: Microcontroladores

PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 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
ADCON0 1Fh ADCON1 11Fh 19Fh
9Fh
20h 120h 1A0h
A0h
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

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


Ingeniería Eléctrica

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.
2.3 Programación de Puertos Digitales.
;SEGUNDO.ASM Programa que lee el numero binario
Especialidad: Sistemas Eléctricos de Potencia

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

#include "p16f877a.inc"
__CONFIG _FOSC_XT & _WDTE_ON & _PWRTE_OFF & _BOREN_ON &
_LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
LIST P = 16F877A ;Comando que indica el PIC usado
RADIX HEX ;Los valores se representaran en
;hexadecimal
ORG 0 ;Comando que indica al Ensamblador la
;dirección de la memoria donde se
;situara la siguiente instrucción.

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
bsf STATUS,5 ;Pone a 1 el bit 5 del registro STATUS
;para direccionar la página 1 de la
Especialidad: Sistemas Eléctricos de Potencia

;memoria de datos.
bcf STATUS,6 ;Pone a 0 el bit 6 del registro STATUS
;para direccionar la página 1 de la
Materia: Microcontroladores

;memoria de datos.
Ingeniería Eléctrica

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 Prof.
; se inicializan
Germán A. Rodríguez Maylos valores del puerto A

clrf PORTB ; se inicializan los valores del puerto B


2.3 Programación de Puertos Digitales.
inicio movf PORTA,0 ;Lee el dato en el puerto B y lo
Especialidad: Sistemas Eléctricos de Potencia

;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
Materia: Microcontroladores

movwf PORTB ; El valor almacenado en el registro de


Ingeniería Eléctrica

;trabajo W se envía al puerto B


goto inicio ; se reinicia el ciclo
END ; Directiva de fin de programa.

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
Ejercicio 3. Realizar un Programa que lea el numero
Especialidad: Sistemas Eléctricos de Potencia

binario introducido mediante 3 interruptores conectados a


la puerta PA(RA0,RA1,RA2) y a tres interruptores
conectados al puerto PC(RC0,RC1,RC2) y realice la suma de
esos dos valores, visualizando el resultado mediante 4
Materia: Microcontroladores

diodos led conectados a la puerta PB(RB0, RB1,RB2,RB3).


Ingeniería Eléctrica

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
;Ejercicio 4. Programa de Conteo desde cero hasta el
Especialidad: Sistemas Eléctricos de Potencia

;valor de 95 (5F Hexadecimal), 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 señalizándose en el Puerto C a través
Materia: Microcontroladores

;de 8 diodos LED.


Ingeniería Eléctrica

#include "p16f877a.inc“

__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF &


_LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF

RADIX HEX

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
Especialidad: Sistemas Eléctricos de Potencia W EQU 0x00 ; Comienzo del campo de etiquetas.
F EQU 0x01
PUERTAC EQU 0x07
ESTADO EQU 0x03
Materia: Microcontroladores
Ingeniería Eléctrica

CONTA EQU 0x20


CONTA2 EQU 0x21 ; Contador interno para el retardo
; en delay1.
CONTA3 EQU 0x22 ;Contador interno para el retardo
;en delay2.
ORG 0 ; El programa comienza en la dirección 0 y
goto inicio ; salta a la dirección 5 para sobrepasar
ORG 5 ; el vector de interrupción.

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
inicio bsf ESTADO,5 ; Selecciona el banco 1
Especialidad: Sistemas Eléctricos de Potencia

movlw 0x00 ; Se configura Puerta C como salida


movwf PUERTAC
bcf ESTADO,5 ; Selección del banco 0
Materia: Microcontroladores
Ingeniería Eléctrica

clrf CONTA ; CONTA = 0


BUCLE1 incf CONTA,F ; CONTA + 1 --> CONTA
movf CONTA,W ; CONTA se carga en W
movwf PUERTAC ; W se carga en el registro de datos PB
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

Prof. Germán A. Rodríguez May


2.3 Programación de Puertos Digitales.
nop
Especialidad: Sistemas Eléctricos de Potencia

nop
nop
movf CONTA3,1 ; Se actualiza Z
Materia: Microcontroladores
Ingeniería Eléctrica

btfss ESTADO,2 ; Explora Z y si vale 1 se produce "brinco"

GOTO DELAY2
movf CONTA2,1 ; Se actualiza Z
btfss ESTADO,2 ; Explora Z y si vale 1 se produce "brinco"

goto DELAY1
movlw 0x5f ; W <-- 0x5f
subwf CONTA,W ; CONTA - W --> W
btfss ESTADO,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
Prof. Germán A. Rodríguez May
end
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.

También podría gustarte