0 calificaciones0% encontró este documento útil (0 votos)
35 vistas24 páginas
Este documento presenta dos prácticas de laboratorio sobre programación en lenguaje ensamblador para microcontroladores PIC. La primera práctica explica la estructura de un programa en ensamblador y cómo reconocer pseudocódigos. La segunda práctica enseña sobre subrutinas y cómo identificar la función de cada línea dentro de una subrutina, además de reconocer instrucciones en el código. Ambas prácticas incluyen objetivos, preparación requerida y pasos a seguir durante el laboratorio.
Este documento presenta dos prácticas de laboratorio sobre programación en lenguaje ensamblador para microcontroladores PIC. La primera práctica explica la estructura de un programa en ensamblador y cómo reconocer pseudocódigos. La segunda práctica enseña sobre subrutinas y cómo identificar la función de cada línea dentro de una subrutina, además de reconocer instrucciones en el código. Ambas prácticas incluyen objetivos, preparación requerida y pasos a seguir durante el laboratorio.
Este documento presenta dos prácticas de laboratorio sobre programación en lenguaje ensamblador para microcontroladores PIC. La primera práctica explica la estructura de un programa en ensamblador y cómo reconocer pseudocódigos. La segunda práctica enseña sobre subrutinas y cómo identificar la función de cada línea dentro de una subrutina, además de reconocer instrucciones en el código. Ambas prácticas incluyen objetivos, preparación requerida y pasos a seguir durante el laboratorio.
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.
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
#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.
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
#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
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.