You are on page 1of 19

INSTITUTO TECNOLÓGICO DE MÉRIDA

DEPARTAMENTO DE
INGENIERÍA ELÉCTRICA Y
ELECTRÓNICA

INGENIERÍA ELECTRÓNICA

MATERIA:

Microcontoladores

GRUPO:

6EM

INVESTIGACIÓN:

PRACTICAS 1,2 Y 3

ALUMNO:

CARLOS ALBERTO GALICIA DUARTE

JULIO CESAR HERNANDEZ BANTE

FRANCISCO MORENO

BRIAN ALONZO LEON

DIEGO CARDENAS PEREZ

PROFESOR(A):

DOC. CARLOS ALBERTO LUJAN RAMIREZ


Encender y Apagar un LED mediante un botón, PIC18F4550 ASM
Objetivo

 Identificar y conocer las características de los microcontroladores de la familia PIC18, en


particular el PIC18F4550.
 Ubicar los pines del PIC18F4550 e identificar sus funciones (Puertos, Oscilador, AD,
PWM, Tx, Rx…).
 Identificar los pines Vdd, Vss, ~MCLR, PGD y PGC para programar el microcontrolador.
 Conocer y manejar el software MPLAB para el desarrollo de proyectos, simular y
programar un microcontrolador.
 Realizar un programa en ASM para encender y apagar un LED, conectado a RB0,
mediante un botón pulsador conectado a RB4.
 Realizar la simulación del circuito en ISIS Proteus, cargando el *.hex al PIC18F4550.
 Programar el microcontrolador mediante Pickit2
Marco Teórico

En el siguiente gráfico (Figura 1) se muestran los puertos disponibles en el PIC18F4550, sus


ubicaciones y las posibles funciones de cada pin.

Figura1. Diagrama de los Pines del PIC18F4550

A continuación se muestra el diagrama de Bloques de dicho microcontrolador (Figura 2)


figura 2. Diagrama de Bloques del PIC18F4550
Y por último una tabla con funciones para su programación (Figura 3)

Figura 3. Conjunto de instrucciones del PIC18F4550

Hemos mencionado que un microcontrolador puede ser considerado como una


computadora, pues posee una ALU (Unidad de Aritmética y Lógica), registros, buses
y unidad de control, es decir tiene una CPU (Unidad Central de Procesamiento).

La mayoría de los dispositivos de lógica secuencial, entre ellos los CPU, son de naturaleza
síncrona. Es decir, están diseñados y operan en función de una señal de sincronización.
Esta señal, conocida como señal de reloj, usualmente toma la forma de una onda cuadrada
periódica. Calculando el tiempo máximo en que las señales eléctricas pueden moverse en
las varias bifurcaciones de los muchos circuitos de un CPU, los diseñadores pueden
seleccionar un período apropiado para la señal de reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la frecuencia del
oscilador pues determinará los ciclos de instrucción; podemos utilizar un oscilador interno o
externo, sin embargo es recomendable utilizar un oscilador de cristal externo para evitar un
mal funcionamiento frente a las variaciones de temparatura dentro del microcontrolador.

Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con los
valores de la tabla anterior corresponderían a la siguiente configuración:

 0 | El dispositivo entra en reposo/bajo consumo cuando se ejecuta la instrucción Sleep.


 100 | Frecuencia del oscilador interno: 1MHz
 X | Depende del estado del bit IESO
 0 | INTOSC La frecuencia del Oscilador Interno no es estable
 00 | Oscilador primario, externo
Aunque el microcontrolador está configurado por defecto con 1MHz es necesario
especificarlo en la palabra de configuración.

Para estas prácticas se utilizará una frecuencia de 4MHz y, como no es necesario precisión
en el tiempo, no pondremos ningún oscilador externo, de esta manera el valor a cargar será
el siguiente:

 0 110 0 0 00 => 0110 0000 => 0x60


Cálculos

Dado que se configuró el oscilador interno del microcontrolador a 4MHz, se tiene:

 Ciclo de reloj:

 Ciclo de instrucción:
Para limitar la corriente que circula por el LED se propone una resistencia de 330Ω:

Y para limitar la corriente del pin de Reset y el botón pulsador a 0.5mA, utilizar una
resistencia de 10kΩ.

Simulación

Creamos un proyecto nuevo y lo llamamos LedOn, como buena práctica de programación y


para una mejor organización conviene que el archivo fuente del código lleve el mismo
nombre del proyecto, es decir LedOn.asm este archivo con extensión *.asm es de
ensamblador.

; ********************************************************
1
; Desarrollo de Microcontroladores y DSPS
2
; Encender un LED

3
; Práctica 1

4
; Fecha: 03/06/2012

5 ; Notas: Encender un LED en RB4 al presionar un botón en RB0;

6 ; Autor: ek

7 ; ********************************************************

LIST P = 18F4550
8
INCLUDE <P18F4550.INC>
9
;************************************************************
10
CONFIG FOSC = HS ;INTOSC_XT no disponible para simulación, usar HS

11
CONFIG PWRT = ON

12
CONFIG BOR = OFF
13 CONFIG WDT = OFF

CONFIG MCLRE = ON
14
CONFIG PBADEN = OFF
15
CONFIG LVP = OFF
16
CONFIG DEBUG = OFF

17
CONFIG XINST = OFF

18
; CODE ******************************************************

19 #define Led PORTB, 4

20 ORG 0x00 ;Iniciar el programa en el registro 0x00

21 clrf PORTB ;Limpia los posibles valores actuales de PORTB

movlw 0x0F ;Entradas y Salidas para PORTB


22
movwf TRISB ;Configura TRISB <- W
23
INICIO
24
btfss PORTB, 0 ;Salta si RB0 = 1 presionado

25
goto LedOff ;RB0 = 0, continua apagado

26
bsf Led ;Encender Led

27 bra INICIO

28 LedOff

29 bcf Led ;Apagar Led

bra INICIO
30
END ;Fin de Programa
31

Una vez terminado contruimos el código y si todo sale bien, nos deberá aparecer en la
ventana output algo similar a esto:
Ahora abrimos Pickit 2 y grabamos el archivo LedOn.hex generado.
Montamos el pic conforme el siguiente diagrama (Figura 5) y probamos.
2. Efecto de corrimiento con LED’s, PIC18F4550 ASM
Introducción
La disposición de los puertos digitales nos permite hacer operaciones con un byte, nibble o
bit, por ejemplo intercambiar el nibble alto por el bajo o desplazar el valor de un bit hacia la
izquierda o derecha, algunas de estas operaciones están disponibles en las funciones de
algunos PICs como el caso del 18F4550, gracias a estas funciones es posible crear efectos
de luces con LEDs al colocar ciertas configuraciones de 0 y 1 a la salida de dichos puertos.

Objetivos

 Identificar las características del PIC18F4550.


 Utilizar el software MPLAB para crear un proyecto y simular el código.
 Realizar un programa en lenguaje ensamblador para controlar el encendido de 8 LED’s
conectados a PORT B.
 Mediante un pulsador en PD0 cambiar el sentido de encendido de derecha a izquierda o
viceversa al momento de presionar el botón.
 El tiempo de transición entre los LED’s será de 300ms.
 Realizar simulación en MPLAB.
 Realizar simulación en ISIS Proteus.
 Programar el microcontrolador utilizando Pickit 2

La mayoría de los dispositivos de lógica secuencial, entre ellos los CPU, son de naturaleza
síncrona. Es decir, están diseñados y operan en función de una señal de sincronización.
Esta señal, conocida como señal de reloj, usualmente toma la forma de una onda cuadrada
periódica. Calculando el tiempo máximo en que las señales eléctricas pueden moverse en
las varias bifurcaciones de los muchos circuitos de un CPU, los diseñadores pueden
seleccionar un período apropiado para la señal de reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la frecuencia del
oscilador pues determinará los ciclos de instrucción; podemos utilizar un oscilador interno o
externo, sin embargo es recomendable utilizar un oscilador de cristal externo para evitar un
mal funcionamiento frente a las variaciones de temparatura dentro del microcontrolador.A
continuación mostramos la tabla del registro de configuración del oscilador (Figura 4)
Figura 4. Registro OSCCON para la Configuración del Oscilador

Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con los
valores de la tabla anterior corresponderían a la siguiente configuración:

 0 | El dispositivo entra en reposo/bajo consumo cuando se ejecuta la instrucción Sleep.


 100 | Frecuencia del oscilador interno: 1MHz
 X | Depende del estado del bit IESO
 0 | INTOSC La frecuencia del Oscilador Interno no es estable
 00 | Oscilador primario, externo
Aunque el microcontrolador está configurado por defecto con 1MHz es necesario
especificarlo en la palabra de configuración.
Para estas prácticas se utilizará una frecuencia de 4MHz y, como no es necesario precisión
en el tiempo, no pondremos ningún oscilador externo, de esta manera el valor a cargar será
el siguiente:

 0 110 0 0 00 => 0110 0000 => 0x60


Cálculos
Dado que se configuró el oscilador interno del microcontrolador a 4MHz, se tiene:

 Ciclo de reloj:

 Ciclo de instrucción:

Para limitar la corriente que circulará por los LED’s conectados al Puerto B, se proponen
resistencias de 330Ω:

Y para limitar la corriente del pin de Reset y el botón pulsador a 0.5mA, utilizar una
resistencia de 10kΩ.

Para generar el retardo se utilizarán tres registros de la memoria y se cargarán con los
siguientes valores, estos valores son calculados de acuerdo a un algoritmo que utiliza ciclos.

Conta1 = 200
Conta2 = 100
Conta3 = 5

El contador 1 (Conta1) se encuentra dentro del ciclo de conteo del contador 2 (Conta2) y
ambos están dentro del ciclo del contador 3 (Conta3). Tomando en cuenta que se necesitan
3 ciclos de instrucción para ir decrementando los ciclos, la fórmula queda como sigue:
Simulación

Desarrollar una simulación en MPLAB con la finalidad de medir los tiempos de ejecución
para los retardos y observar la ejecución de cada instrucción.

1 ; ********************************************************

2 ; Desarrollo de Microcontroladores y DSPS

3 ; Barrido de LEDs bidireccional

4 ; Práctica 2

5 ;

6 ; Fecha: 08/06/2012

7 ; Notas: Hacer el barrido de un LED

8 ; Autor: ek

9 ; ************************************************************

10 LIST P = 18F4550

11 INCLUDE <P18F4550.INC>

12 ;************************************************************

13 CONFIG FOSC = HS

14 CONFIG PWRT = ON

15 CONFIG BOR = OFF

16 CONFIG WDT = OFF

17 CONFIG MCLRE = ON

18 CONFIG PBADEN = OFF

19 CONFIG LVP = OFF

20 CONFIG DEBUG = OFF


21 CONFIG XINST = OFF

22 ; CODE ******************************************************

23 #define Conta 0x12

24 cblock

25 Conta1

26 Conta2

27 Conta3

28 Sweep

29 endc

30 #define Time1 0x00 ;Configuración para 300ms 0x00

31 #define Time2 0x85 ;Configuración para 300ms 0x85

32 #define Time3 0x02 ;Configuración para 300ms 0x02

33 ORG 0x00 ;Iniciar el programa en el registro 0x00

34 clrf PORTB ;Limpia los posibles valores actuales de PORTB

35 clrf PORTD ;Limpia los posibles valores actuales de PORTD

36 clrf TRISB ;Configura TRISB movlw 0x01 ;Entrada RD0 de habilitación en PORTD

37 movwf TRISD ;Configura TRISD =>=>

38 call Retardo ;Esperar un tiempo

39 rrncf Sweep, F ;Rotar hacia la Derecha y Guardar en Sweep

40 movff Sweep, PORTB ;Mover el valor de Sweep a PORTB

41 btfss PORTD, 0 ;Salta si RD0 = 1, Cambio <== bra MoveRight ;Repetir Ciclo >=>=>

42

43 MoveLeft
44 call Retardo ;Esperar un tiempo

45 rlncf Sweep, F ;Rotar hacia la izquierda y Guardar en Sweep

46 movff Sweep, PORTB ;Mover el valor de Sweep a PORTB

47 btfss PORTD, 0 ;Salta si RD0 = 1, Cambio ==> PRESIONAR Y SOLTAR

48 ;btfsc PORTD, 0 ;Salta si RD0 = 0, Cambio ==> SÓLO AL PRESIONAR

49 bra MoveLeft ;Repetir Ciclo <=<=< bra MoveRight ;Dirección [Predeterminada] >=>=>

50 bra INICIO

51 ;****** Funciones *************************

52 Retardo

53 movlw Time1

54 movwf Conta1

55 movlw Time2

56 movwf Conta2

57 movlw Time3

58 movwf Conta3

59 Repeat

60 decfsz Conta1, F ;Salta cuando Conta1 llega a 0

61 bra Repeat ;Salta a Repeat para Decrementar Conta1

62 movlw Time1 ;Mover el valor de Conta1 -> W

63 movwf Conta1 ;W -> Conta1, reconfigurar el valor

64 decfsz Conta2, F ;Salta cuando Conta2 llega a 0

65 bra Repeat ;Salta a Repeat

66 decfsz Conta3
67 bra Repeat

68 Return

69 END ;Fin de Programa

70

Armar el siguientes circuito en ISIS Proteus y simularlo, de la misma manera será el circuito
físico (Figura 5).

Figura 5. Circuito

3. Efecto de 8 bits con LED’s, PIC18F4550 ASM


Introducción
La disposición de los puertos digitales nos permite hacer operaciones con un byte, nibble o
bit, por ejemplo intercambiar el nibble alto por el bajo o desplazar el valor de un bit hacia la
izquierda o derecha, algunas de estas operaciones están disponibles en las funciones de
algunos PICs como el caso del 18F4550, gracias a estas funciones es posible crear efectos
de luces con LEDs al colocar ciertas configuraciones de 0 y 1 a la salida de dichos puertos.

Objetivos

 Identificar las características del PIC18F4550.


 Utilizar el software MPLAB para crear un proyecto y simular el código.
 Realizar un programa en lenguaje ensamblador para controlar el encendido de 8 LED’s
conectados a PORT B.
 Mantener activados 8 leds.
 Realizar simulación en MPLAB.
 Realizar simulación en ISIS Proteus.
 Programar el microcontrolador utilizando Pickit 2

La mayoría de los dispositivos de lógica secuencial, entre ellos los CPU, son de naturaleza
síncrona. Es decir, están diseñados y operan en función de una señal de sincronización.
Esta señal, conocida como señal de reloj, usualmente toma la forma de una onda cuadrada
periódica. Calculando el tiempo máximo en que las señales eléctricas pueden moverse en
las varias bifurcaciones de los muchos circuitos de un CPU, los diseñadores pueden
seleccionar un período apropiado para la señal de reloj.
Para el correcto funcionamiento del microcontrolador debemos definir la frecuencia del
oscilador pues determinará los ciclos de instrucción; podemos utilizar un oscilador interno o
externo, sin embargo es recomendable utilizar un oscilador de cristal externo para evitar un
mal funcionamiento frente a las variaciones de temparatura dentro del microcontrolador.

Podemos ver que por default tiene cargado el valor: 0100 X000 que de acuerdo con los
valores de la tabla anterior corresponderían a la siguiente configuración:

 0 | El dispositivo entra en reposo/bajo consumo cuando se ejecuta la instrucción Sleep.


 100 | Frecuencia del oscilador interno: 1MHz
 X | Depende del estado del bit IESO
 0 | INTOSC La frecuencia del Oscilador Interno no es estable
 00 | Oscilador primario, externo
Aunque el microcontrolador está configurado por defecto con 1MHz es necesario
especificarlo en la palabra de configuración.

Para estas prácticas se utilizará una frecuencia de 4MHz y, como no es necesario precisión
en el tiempo, no pondremos ningún oscilador externo, de esta manera el valor a cargar será
el siguiente:

 0 110 0 0 00 => 0110 0000 => 0x60


Simulación.

Desarrollar una simulación en MPLAB con la finalidad de medir los tiempos de ejecución
para los retardos y observar la ejecución de cada instrucción.

.................... #include <18f450a.h>


.................... //////// Standard Header file for the PIC18F4550 device ////////////////

.................... #use delay(clock=4000000)

0004: MOVLW 22

0005: MOVWF 04

0006: BCF 03.7

0007: MOVF 00,W

0008: BTFSC 03.2

0009: GOTO 018

000A: MOVLW 01

000B: MOVWF 78

000C: CLRF 77

000D: DECFSZ 77,F

000E: GOTO 00D

000F: DECFSZ 78,F

0010: GOTO 00C

0011: MOVLW 4A

0012: MOVWF 77

0013: DECFSZ 77,F

0014: GOTO 013

0015: GOTO 016

0016: DECFSZ 00,F

0017: GOTO 00A

0018: BCF 0A.3

0019: BCF 0A.4

001A: GOTO 037 (RETURN)

001B: CLRF 04

001C: BCF 03.7

001D: MOVLW 1F

001E: ANDWF 03,F

001F: MOVLW 01

0020: MOVWF 20

0021: BSF 03.5

0022: BSF 1F.0

0023: BSF 1F.1


0024: BSF 1F.2

0025: BCF 1F.3

0026: MOVLW 07

0027: MOVWF 1C

....................

.................... //Configuracion de puertos E/S

.................... SET_TRIS_B(0x00);//Configura el puerto B: 0=Salida; 1=Entrada

0028: MOVLW 00

0029: MOVWF 06

.................... output_b(0x00); //Limpia el registro del puerto

002A: CLRF 06

002B: BCF 03.5

002C: CLRF 06

.................... //Estructura Programa principal

While(true)//Ciclo infinito

. output_b(A);//Sale por el puerto B el valor de A

002D: BSF 03.5

002E: CLRF 06

002F: BCF 03.5

0030: MOVF 20,W

0031: MOVWF 06

.................... retardo;//Demora

0032: MOVLW 02

0033: MOVWF 21

0034: MOVLW FA

0035: MOVWF 22

0036: GOTO 004

0037: DECFSZ 21,F

0038: GOTO 034

.................... a=a*2;//Incrementa A para encender cada led del puerto

0039: BCF 03.0

003A: RLF 20,F

.................... if(a==256)A=1;//Reinicia el encendido de los leds


003B: MOVF 20,W

003C: SUBLW 00

003D: BTFSS 03.2

003E: GOTO 041

003F: MOVLW 01

0040: MOVWF 20

.................... }

0041: GOTO 02D

.................... }

0042: SLEEP

End ;

You might also like