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:
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);
}
}
}
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
;*****************************************************
; 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