Está en la página 1de 24

Prctica #1.

Estructuras de un programa en Lenguaje Ensamblador.



Objetivo

Reconocer la estructura de un programa realizado en lenguaje ensamblador.
Reconocer los seudocdigos usados en un programa realizado en lenguaje
ensamblador.

Pre-laboratorio

Familiarizarse con las hojas de datos tanto del PICkit1 Flash
Starter Kit como con los del microprocesador PIC12F629/675.
Se recomienda una lectura rpida antes de la realizacin del
laboratorio.
Se recomienda traer en fsico las hojas de datos tanto del PICkit1
Flash Starter Kit como con los del microprocesador PIC12F629/675. O en
su defecto en electrnico.

Laboratorio

1. Explicar que se hace en cada una de las lneas del programa que se adjunta a
continuacin.
2. Indicar que modificaciones identifica usted que deben hacerse al cdigo para ser
usado en un PIC 12f629.
3. Identifique que estructura observa en el cdigo y explique la utilidad de cada
una de esas partes de la estructura del cdigo.





01;******************************************************************
02; Autor: Xxxxxx Xxxxxx Xxxxxx Xxxxxx
03; Xxxxxx Xxxxxx Xxxxxx Xxxxxx
04; Xxxxxx Xxxxxx Xxxxxx Xxxxxx
05; Fecha: XX / XX / XXXX
06; Titulo practica1.asm
07; Programa de ejemplo para detallar las Lneas que lo integran y detallar los
08; usos de dichas lneas.
09;******************************************************************
10
11
12 list p=16f84
13 #include p16f84A.inc
14
15
16 port_a equ 0x05h
17 port_b equ 0x06h
18 trisa equ 0x05h
19 trisb equ 0x06h
20 status equ 0x03h
21 count1 equ 0x0Ch
22 count2 equ 0x0Dh
23 count3 equ 0x0Eh
24
25
26 org 0x00h
27 goto Primero
28
29
30 Primero:
31 bsf status, RP0
32 bcf tris_b, 03
33 bcf status, RP0
34
35 inicio:
36 call flash
37 call ret_largo
38 goto inicio
39
40
41flash:
42 bsf port_b, 03
43 call ret
44 bcf port_b, 03
45 return
46
47
48 ret_largo:
49 movlw 0x03Fh
50 movwf count3
51
52 largo1:
53 call ret
54 decfsz count3, 1
55 goto largo1
56 return
57
58 ret:
59 movlw 0xFF
60 movwf count1
61
62 ret1:
63 movlw 0x0Fh
64 movwf count2
65
66 ret2:
67 decfsz count2, 1
68 goto ret2
69 decfsz count1, 1
70 goto ret1
71 return
72
73 END





Post-laboratorio

Entregar de manera individual

Qu considera Ud. Que aprendi en esta prctica?

Nombrar al menos 8 seudocdigos que recuerde.

Defina 4 de los seudocdigos que recuerde.



Prctica # 2.

Subrutinas en un programa en lenguaje ensamblador.

Objetivo

Reconocer Instrucciones en un programa realizado en lenguaje
ensamblador.
Reconocer subrutinas indicar que funcin tiene cada lnea de la subrutina.

Pre-laboratorio

Familiarizarse con las hojas de datos tanto del PICkit1 Flash
Starter Kit como con los del microprocesador PIC12F629/675.
Se recomienda una lectura rpida antes de la realizacin del
laboratorio.
Se recomienda traer en fsico las hojas de datos tanto del PICkit1
Flash Starter Kit como con los del microprocesador PIC12F629/675. O en
su defecto en electrnico.

Laboratorio

En el cdigo que se encuentra a continuacin:

1. Indicar que lneas del programa encienden el led 6 e indicar que hace cada lnea
de dicha subrutina.
2. Indicar que subrutina convierte un valor analgico a uno digital y para que lo
estamos usando en este cdigo.

list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF &
_WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

cblock 0x20
Cont_1
Cont_2
endc

#define TRIS_D0_D1 B'00001111' ; Activa D0 y D1
#define TRIS_D2_D3 B'00101011' ; Activa D2 y D3
#define TRIS_D4_D5 B'00011011' ; Activa D4 y D5
#define TRIS_D6_D7 B'00111001' ; Activa D6 y D7
#define D0_ON B'00010000' ; D0 LED
#define D1_ON B'00100000' ; D1 LED
#define D2_ON B'00010000' ; D2 LED
#define D3_ON B'00000100' ; D3 LED
#define D4_ON B'00100000' ; D4 LED
#define D5_ON B'00000100' ; D5 LED
#define D6_ON B'00000100' ; D6 LED
#define D7_ON B'00000010' ; D7 LED

org 0x000
goto Inicio

org 0x005
; Start of Program Memory Vector


Inicio

bsf STATUS,RP0 ; Vamos al Bank 1
movwf OSCCAL ; Calibra el oscilador interno
bcf STATUS,RP0 ; Vamos al Bank 0
clrf GPIO ; Limpiamos el puerto
Menu
clrwdt ; Limpiamos el WDT
call Led0 ; Rutina para encender LED0
call Led1 ; Rutina para encender LED1
call Led2 ; Rutina para encender LED2
call Led3 ; Rutina para encender LED3
call Led4 ; Rutina para encender LED4
call Led5 ; Rutina para encender LED5
call Led6 ; Rutina para encender LED6
call Led7 ; Rutina para encender LED7
goto Menu

Led0 ; Subrutina para encender LED0
bsf STATUS, RP0 ; Nos movemos al banco 1
movlw TRIS_D0_D1 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS,RP0 ;Bank 0
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D0_ON ; Encendemos LED0
movwf GPIO
call wait ; Llamamos retardo
return ; Retornamos de la subrutina

Led1 ; subrutina para encender LED1
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D0_D1 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D1_ON ; Encendemos LED1
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led2 ; Subrutina para encender LED2
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D2_D3 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D2_ON ; Encendemos LED2
movwf GPIO
call wait
return ; Retornamos de la subrutina
Led3 ; Subrutina para encender LED3
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D2_D3 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D3_ON ; Encendemos LED03
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led4 ; Subrutina para encender LED4
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D4_D5 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D4_ON ; Encendemos LED4
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led5 ; Subrutina para encender LED5
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D4_D5 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D5_ON ; Encendemos LED5
movwf GPIO
call wait
return ; Retornamos de la subrutina


Led6 ; Subrutina para encender LED6
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D6_D7 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D6_ON ; Encendemos LED6
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led7 ; Subrutina para encender LED7
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D6_D7 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D7_ON ; Encendemos LED7
movwf GPIO
call wait
return ; Retornamos de la subrutina





wait

bsf ADCON0,GO ; se indica que se inicie la conversin
wait22 btfsc ADCON0,GO ; se espera que la conversin finalice
goto wait22
movf ADRESH,W ; se tiene el equivalente digital en el registro
w
movwf Cont_1
movwf Cont_2

; movlw 0
; movwf Cont_1

w1 call wait2
decfsz Cont_1
goto w1

return


wait2
clrf Cont_2
w2 decfsz Cont_2
goto w2
return

end







Post-Laboratorio

1.-Indicar que significado tienen las siguientes instrucciones:

OSCCAL
ADCON0
TRISIO
GPIO
ADRESH

2.-Que funcin tena en el programa estudiado en el laboratorio la subrutina w1.

3.-Que funcin tena en el programa estudiado en el laboratorio la subrutina el bloque.

bsf STATUS,RP0
movwf OSCCAL
bcf STATUS,RP0
clrf GPIO
















Prctica # 3.

Uso del MPLAB IDE y el Pickit 1 Classic.

Objetivos

Familiarizarse con los programas MPLAB IDE y Pickit 1 Classic para ser
usado en el desarrollo de programas realizados en lenguaje ensamblador.
Familiarizarse con los programas MPLAB IDE y Pickit 1 Classic para
programar microprocesadores con los programas realizados en lenguaje
ensamblador.

Pre-laboratorio

Familiarizarse con las hojas de datos tanto del PICkit1 Flash
Starter Kit como con los del microprocesador PIC12F629/675.
Se recomienda una lectura rpida antes de la realizacin del
laboratorio.
Se recomienda traer en fsico las hojas de datos tanto del PICkit1
Flash Starter Kit como con los del microprocesador PIC12F629/675. O en
su defecto en electrnico.


Laboratorio

1. Crear un proyecto con el MPLAB IDE, ejecutar el programa dado a
continuacin, compilarlo, grabarlo en el microprocesador 12F675 y correr el
programa con la ayuda de la plataforma de prueba.
2. Modificar el programa para que solo encienda el led 6 y verificarlo con la
plataforma de prueba.



list p=12f675 ; list directive to define processor
#include <p12f675.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF &
_WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

cblock 0x20
Cont_1
Cont_2
endc

#define TRIS_D0_D1 B'00001111' ; Activa D0 y D1
#define TRIS_D2_D3 B'00101011' ; Activa D2 y D3
#define TRIS_D4_D5 B'00011011' ; Activa D4 y D5
#define TRIS_D6_D7 B'00111001' ; Activa D6 y D7
#define D0_ON B'00010000' ; D0 LED
#define D1_ON B'00100000' ; D1 LED
#define D2_ON B'00010000' ; D2 LED
#define D3_ON B'00000100' ; D3 LED
#define D4_ON B'00100000' ; D4 LED
#define D5_ON B'00000100' ; D5 LED
#define D6_ON B'00000100' ; D6 LED
#define D7_ON B'00000010' ; D7 LED
org 0x000
goto Inicio

org 0x005
; Start of Program Memory Vector

Inicio

bsf STATUS,RP0 ; Vamos al Bank 1
movwf OSCCAL ; Calibra el oscilador interno
bcf STATUS,RP0 ; Vamos al Bank 0
clrf GPIO ; Limpiamos el puerto
Menu
clrwdt ; Limpiamos el WDT
call Led0 ; Rutina para encender LED0
call Led1 ; Rutina para encender LED1
call Led2 ; Rutina para encender LED2
call Led3 ; Rutina para encender LED3
call Led4 ; Rutina para encender LED4
call Led5 ; Rutina para encender LED5
call Led6 ; Rutina para encender LED6
call Led7 ; Rutina para encender LED7
goto Menu

Led0 ; Subrutina para encender LED0
bsf STATUS, RP0 ; Nos movemos al banco 1
movlw TRIS_D0_D1 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS,RP0 ;Bank 0
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D0_ON ; Encendemos LED0
movwf GPIO
call wait ; Llamamos retardo
return ; Retornamos de la subrutina

Led1 ; subrutina para encender LED1
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D0_D1 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D1_ON ; Encendemos LED1
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led2 ; Subrutina para encender LED2
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D2_D3 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D2_ON ; Encendemos LED2
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led3 ; Subrutina para encender LED3
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D2_D3 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D3_ON ; Encendemos LED03
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led4 ; Subrutina para encender LED4
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D4_D5 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D4_ON ; Encendemos LED4
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led5 ; Subrutina para encender LED5
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D4_D5 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D5_ON ; Encendemos LED5
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led6 ; Subrutina para encender LED6
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D6_D7 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D6_ON ; Encendemos LED6
movwf GPIO
call wait
return ; Retornamos de la subrutina

Led7 ; Subrutina para encender LED7
bsf STATUS, RP0 ; Nos movemos al banco
movlw TRIS_D6_D7 ; Se configura el puerto
movwf TRISIO
movlw B'00110001'
movwf ANSEL ;GP0 analgica entrada, Digital I/O
;GP<1,2,3,4,5>
bcf STATUS, RP0 ; Nos movemos al banco cero
movlw B'00000011'
movwf ADCON0 ; se configura el registro del conversor
movlw D7_ON ; Encendemos LED7
movwf GPIO
call wait
return ; Retornamos de la subrutina



wait

bsf ADCON0,GO ; se indica que se inicie la conversin
wait22 btfsc ADCON0,GO ; se espera que la conversin finalice
goto wait22
movf ADRESH,W ; se tiene el equivalente digital en el registro w
movwf Cont_1
movwf Cont_2

; movlw 0
; movwf Cont_1
w1 call wait2
decfsz Cont_1
goto w1

return

wait2
clrf Cont_2
w2 decfsz Cont_2
goto w2
return

end










Post-Laboratorio

1.-Indicar la diferencia entre el Pic 12F629 y el Pic 12F675.

2.-Que funcin tena en el programa estudiado en el laboratorio la subrutina w1.

3.-Que funcin tena en el programa estudiado en el laboratorio la subrutina el bloque.

bsf STATUS,RP0
movwf OSCCAL
bcf STATUS,RP0
clrf GPIO






















Prctica # 4.

Uso de cdigo para manejar el tiempo de ejecucin de las instrucciones.

Objetivo

Manejar la relacin de frecuencia y tiempo de ejecucin de cada
instruccin para manejar el tiempo de ejecucin del programa en tiempo
real.

Pre-laboratorio

Familiarizarse con las hojas de datos tanto del PICkit1 Flash
Starter Kit como con los del microprocesador PIC12F629/675.
Se recomienda una lectura rpida antes de la realizacin del
laboratorio.
Se recomienda traer en fsico las hojas de datos tanto del PICkit1
Flash Starter Kit como con los del microprocesador PIC12F629/675. O en
su defecto en electrnico.
Se recomienda investigar en la web como se generan los retados y
como se controla el tiempo de manera precisa en los mismos.


Laboratorio

1. Crear un cdigo que encienda los led en la plataforma de prueba de manera
secuencial de manera que el tiempo de encendido entre los led sea de 2
segundos.

Post-Laboratorio

1.-Indicar como calculo el retarde de encendido entre los led.

2.-Indicar que pic entre el 12f629 ^ 12f675 es recomendado para este cdigo. Justifique
su respuesta.






















Prctica # 5.

Uso de interrupciones y seales externas para ser usadas por el cdigo.

Objetivo

Manejar seales externas para modificar valores o instrucciones del
cdigo.
Manejar las conversiones Analgico-digitales para ser usadas en el cdigo.


Pre-laboratorio

Familiarizarse con las hojas de datos tanto del PICkit1 Flash
Starter Kit como con los del microprocesador PIC12F629/675.
Se recomienda una lectura rpida antes de la realizacin del
laboratorio.
Se recomienda traer en fsico las hojas de datos tanto del PICkit1
Flash Starter Kit como con los del microprocesador PIC12F629/675. O en
su defecto en electrnico.

Laboratorio

Crear un cdigo que encienda los led en la plataforma de prueba de manera
secuencial de manera:
Que el tiempo de encendido entre los led sea de 2 segundos.
Que con el pulsador de invierta el orden de encendido de los led.
Que con el potencimetro se aumente el retardo de encendido entre los led.

Post-Laboratorio

1.-Indicar como se genera el retardo variable con el potencimetro.

2.-Indicar como se genera la interrupcin para el cambio de sentido en el encendido de
los led.

3.-Indicar cmo funciona el anti rebote del pulsador y para que lo utilizo en el
programa.

También podría gustarte