Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniería Eléctrica
Microcontroladores
Especialidad: Sistemas Eléctricos de Potencia
Materia: Microcontroladores
direccionamiento.
Ingeniería Eléctrica
clrf f 00 (f) Z
clrw 00 (W) Z
movf f,d (f) (destino) Z
Materia: Microcontroladores
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
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
• 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.
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.
Memoria de programa
Ingeniería Eléctrica
0000h RESET
0001h
0006h
0007h
•El PIC16F877 tiene una memoria de
0008h programa no volátil denominada ROM
Flash que admite unas 1000 grabaciones.
0009h
000Ah
000Bh
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
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
Dato
Configura Dirección del Dato
PORTB Tri-State Register (TRISB)
TRISB7TRISB6TRISB5TRISB4TRISB3TRISB2TRISB1TRISB0
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