Trabajo practico 13


Microcontroladores
En este TP se nos pide crear un programa
capaz de activar una salida con una frecuencia de 500Hz, la cual se comandará desde el pulsador. Nosotros decidimos hacerlo en los dos lenguajes, ASM y C. A continuación los programas:

Programa en C
#include

int1   flag=0;                                                                       //Definimos un bit llamado flag.

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   output_b(0x00);

   while (1)                                                                        
   {
      if (input(PIN_A0) == 1)                                               //Si el pulsador que se encuentra en A0
      {                                                                                    //es pulsado, cambiará el estado de flag
          flag=~flag;                                                               //el cual usamos para darle un estado de
          delay_ms(200);                                                      //"prendido" o "apagado" al programa
      }                                                                                   //principal.
      if (flag == 1)                                                                //Si el bit flag esta en "1", el programa
      {                                                                                   //principal se activa, el cual prende un led
          output_high(PIN_B1);                                           //conectado a B1, espera 1 ms, y lo apaga
          delay_ms(1);                                                         //resultando en una frecuencia de 500 Hz.
          output_low(PIN_B1);
          delay_ms(1);
      }
     
   }
}

Funcionamiento


Programa en ASM



;*****************************************************
; Ejercicio 13.asm
; Descripción:
; Al apretar un pulsador, en la salida RB1, habra una frecuencia de 500 Hz.
; Al pulsarlo nuevamente, se apagara.
;*****************************************************
; Fecha: 08/06/10 Autor/es: JF
;*****************************************************
LIST p=16F84A
#INCLUDE
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;*****************************************************
; Variables
;*****************************************************
CBLOCK 0x0C
vdly1
vdly2
Contador
ENDC

#DEFINE Led1 PORTB,1
#DEFINE Pulsador PORTB,0

;*****************************************************
ORG 0x000
goto main ;Vector de reset

ORG 0x004
goto Interrupcion ;Vector de interrupción
;*****************************************************
main
; Configuración de los puertos
bsf STATUS,RP0 ;Banco 1
clrf TRISB ;Todo el PORTB como salida
bsf Pulsador ;Excepto RP0
movlw b'111110111'
movwf TRISA
bcf STATUS,RP0
clrf PORTB
clrf Contador
movlw b'10010000'
movwf INTCON

loop
incf Contador
decfsz Contador
goto $+2
goto loop
decfsz Contador
goto $+2
goto Prendido
decf Contador
goto loop

Prendido
bsf Led1
call delay_200ms
bcf Led1
call delay_200ms
incf Contador
goto loop










;*****************************************************
; Subrutinas
;*****************************************************
delay_200ms
decfsz vdly1,F
goto $-1
decfsz vdly2,F
goto $-3
return

Interrupcion
incf Contador,1
bcf INTCON,INTF
retfie
;*****************************************************
END




Funcionamiento

No hay comentarios:

Publicar un comentario