Sistemas Electrónicos Digitales

HOJA  DE  EJERCICIOS  (curso  2014/15)   1. Realizar  un  programa  en  ensamblador  para  que  parpadee  el  bit  P1.0,  utilizando  un  bucle  para

0 downloads 53 Views 998KB Size

Story Transcript

HOJA  DE  EJERCICIOS  (curso  2014/15)   1. Realizar  un  programa  en  ensamblador  para  que  parpadee  el  bit  P1.0,  utilizando  un  bucle  para  realizar  el  retardo.  

SOLUCIÓN:  

;************************************************************* ; Plantilla que se crea automáticamente ; Conviene especificar el microcontrolador usado, describir ; el programa y si fuera posible las patillas utilizadas ; Microcontrolador: MSP430G2553 ; Descripción: ; MSP430G2553 ; ----------------; /|\| XIN|; | | | ; --|RST XOUT|; | | ; | P1.0|-->LED ; ; Autor: ; Empresa: UA ; Fecha: 07/07/14 ; Herramienta: IAR Embedded Workbench Version: 5.51 ;************************************************************* #include "msp430g2553.h" miSP EQU 0x400 ; define el puntero de la Pila ORG 0FC00h ; inicio del programa en memoria ;----------------------------------------------------------RESET MOV.W #miSP,SP ; Inicializa el SP MOV.W #WDTPW+WDTHOLD,&WDTCTL ; para el watchdog BIS.B

#001h,&P1DIR

; el bit P1.0 como salida

XOR.B MOV.W

#001h,&P1OUT #050000,R15

DEC.W JNZ JMP

R15 L1 INICIO

; ; ; ; ; ;

INICIO

L1

Conmuta el bit P1.0 R15=50000 para realizar un retardo se realiza 50000 veces el bucle L1 Decrementando R15 retardo=(1+2)*50000=150000T vuelve a empezar

;-------------------------------------------; VECTORES ;-------------------------------------------ORG 0FFFEh DW RESET END

 

 

            1  

Sistemas  Electrónicos  Digitales    

HOJA  DE  EJERCICIOS  (curso  2014/15)   2. Realizar  un  programa  en  C  para  que  parpadee  el  bit  P1.0,  utilizando  un  bucle  para  realizar  el  retardo.  

SOLUCIÓN:   //************************************************************* #include int main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01;

// Para el watchdog // Configura P1.0 como salida direction

for (;;) { volatile unsigned int i; P1OUT ^= 0x01;

// Conmuta P1.0 usando la XOR

i = 50000; do (i--); while (i != 0); }  

// Retardo

}

  3. Realizar  un  programa  en  C  que  haga  parpadear  el  bit  P1.6,  utilizando  la  función  __delay_cicles(nº  ciclos)  

SOLUCIÓN:   /* Enciende el led verde P1.6 Utilizando __delay_cicles() */ #include #include void main(){ WDTCTL= WDTPW+WDTHOLD;

//inclusiones. //funcion principal //Apagamos el watchdog

P1SEL= 0x00; P1DIR|= BIT6;

//Salida el bit 6 del puerto 1

P1OUT|=BIT6;

//LED parte apagado

while(1){ //Loop infinito P1OUT|=BIT6; //prende el LED __delay_cycles(100000); //espera P1OUT&=~BIT6; //apaga el LED __delay_cycles(100000); //espera } }

    2  

Sistemas  Electrónicos  Digitales    

HOJA  DE  EJERCICIOS  (curso  2014/15)   4. Escribe   un   programa   en   lenguaje   ensamblador   en   el   cual   inicialmente   el   bit   P1.6   esté   apagado,   cuando   se   pulse   el  

botón  colocado  en  P1.3  se  ponga  a  uno  el  bit  P1.6  y  si  se  vuelve  a  pulsar  que  se  apague.  Esto  se  debe  realizar  de   forma  indefinida.   SOLUCIÓN:   ;******************************************************************** #include "msp430g2553.h" ;-----------------------------------------------------ORG 0FC00h ; Definimos la direccion de inicio ;-----------------------------------------------------RESET MOV.W #0400h,SP ; Establecemos el SP MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Detenemos el watchdog timer MOV.B #040h,&P1DIR ; Colocamos P1.6 salida resto entrada MOV.B #00h,&P1OUT BIS.B #BIT3, &P1REN ; Resistencia en la entrda P1.3 BIS.B #BIT3, &P1OUT ; Resistencia de pull-up SIGUE BIT.B #BIT3, &P1IN ;  si pulsado 0000 1000 AND XXXX 0XXX JZ ENCIENDE ; si pulsado salta y enciende P1.6 JMP APAGA JMP SIGUE APAGA BIC.B #BIT6,&P1OUT JMP SIGUE ENCIENDE BIS.B #BIT6,&P1OUT JMP SIGUE ;-----------------------------------------------------; Vectores Interrupción ;-----------------------------------------------------ORG 0FFFEh ; Vector RESET MSP 430 DW RESET ; END  

 

3  

Sistemas  Electrónicos  Digitales    

HOJA  DE  EJERCICIOS  (curso  2014/15)   5. Escribe   un   programa   en   lenguaje   C   en   el   cual   inicialmente   el   bit   P1.6   esté   apagado,   cuando   se   pulse   el   botón  

colocado  en  P1.3  se  ponga  a  uno  el  bit  P1.6  y  si  se  vuelve  a  pulsar  que  se  apague.  Esto  se  debe  realizar  de  forma   indefinida.   SOLUCIÓN:  

#include int i; void main(void) { WDTCTL = WDTPW + WDTHOLD;

// para el watchdog

P1OUT P1DIR P1DIR P1REN P1OUT

// // // // //

&= ~0x40; |= 0x40; &= ~0x08; |= 0x08; |= 0x08;

P1.6 P1.6 P1.3 P1.3 P1.3

a cero (LED) como salida (push button) como entrada (botón) resistencia habilitada (botón) resistencia pull-up

while (1){ if( BIT3 & ~P1IN ) { P1OUT ^= 0x40; } }  

// Si se pulsa botón // led encendidO

}

  6. Añade  un  antirrebotes  al  ejercicio  3  

  7. Añade  un  antirrebotes  al  ejercicio  4  

  8. Supongamos   que   la   ejecución   normal   del   programa   consiste   en   el   desplazamiento   de   un   bit,   empezando   en   el  

P2.0,  después  se  encenderá  el  P2.0  y  el  P2.1,  después  el  P2.0,  P2.1  y  P2.2,  así  sucesivamente  hasta  llega  al  P2.7,   que   vuelve   a   empezar.   Si   en   el   bit   P1.3   hay   un   flanco   de   bajada   se   debe   atender   la   interrupción   ejecute   el   correspondiente  servicio  (ISR)  que  deberá    sacar  por  P2  la  siguiente  secuencia:    secu            DC8            00000001b,00000010b,00000100b,00001000b    

DC8            00010000b,00100000b,01000000b,10000000b  

                    DC8            00000000b,11111111b,00000000b,11111111b                    

DC8            00000000b,11111111b,00000000b,11111111b  

Finsecu    DC8            01010101b   Cuando   se   encuentre   el   valor   01010101b   se   debe   salir   de   la   interrupción   y   continuar   por   donde   iba.   Escribir   el   programa  en  ensamblador   4   Sistemas  Electrónicos  Digitales    

HOJA  DE  EJERCICIOS  (curso  2014/15)   ;----------------------------------------------------#include "msp430g2553.h" #define miSP 0x400 main ;-------------------------------------------------------------------------------ORG 0xFC00 ;Inicio del programa ;-------------------------------------------------------------------------------RESET MOV.W #miSP,SP ; Inicia SP MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Detiene WD ;----------------------esto es opcional para conseguir la frecuencia-----------MOV.B &CALDCO_1MHZ, &DCOCTL ; calibra la f a 1MHz MOV.B &CALBC1_1MHZ, &BCSCTL1 ; calibra la f a 1MHz ;-------------------------------------------------------------------------------BIC.B #BIT3, &P1DIR ; P1.3 IN #11110111b BIS.B #BIT3, &P1OUT ; P1.3 Resist pullup, resto a cero 00001000b BIS.B #BIT3, &P1REN ; P1.3 Resist pullup habilitada BIS.B #BIT3, &P1IES ; flanco de bajada para P1.3 BIC.B #BIT3, &P1IFG ; borrar flags de interrup para P1.3 BIS.B #BIT3, &P1IE ; interrup locales habilita para P1.3 EINT ; GIE

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.