Autor Tema: Parpadeo 2LEDs PIC16F876  (Leído 1447 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Fredi

  • PIC10
  • *
  • Mensajes: 1
Parpadeo 2LEDs PIC16F876
« en: 21 de Octubre de 2021, 07:50:37 »
Hola buenas, tengo un problema que no me acaba de salir, es el siguiente
-Realiza un programa .asm que permita el parpadeo de dos LEDs ubicados en RA0/RA1. Cuando RA0 enciende, RA1 se apaga. El tiempo de parpadeo será de unos 100ms. Usar retardos por software

A ver si me podeis ayudar, gracias, esto es lo que tengo hecho de momento, me faltan retardos y algo más


 List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos

;Ajusta los valores de la palabra de configuración durante el ensamblaje:
;protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC

reg1 equ 0x20     ; Estos 3 registros los utilizar
reg2 equ 0x21     ; para hacer el retardo
reg3 equ 0x22

;-------Configuración de puertos-------
org 0x00     ; Origen del programa, aqu  comenzar
goto inicio     ; salta a la etiqueta inicio.
inicio bsf STATUS,RP0     ; Pone rp0 a 1 y pasa al banco1
movlw b'00000000'  ; Carga W con 00000000
movwf TRISB     ; y pasa el valor a TRISB.
bcf STATUS,RP0     ; pone rp0 a 0 y regresa al banco0
;----Aquí  enciende y apaga el LED-----
bucle
bsf PORTA,0     ; Pone un 1 en RA0 enciende el LED
bcf PORTA,1     ; Pone a 0 RA1 apaga el LED
call retardo     ; Llamamos a la subrutina retardo.

               bsf PORTA,1      ; Pone un 1 en RA1 enciende el LED
bcf PORTA,0     ; Pone a 0 RA0 apaga el LED
call retardo     ; Llamamos a la subrutina retardo.
goto bucle     ; Repite el bucle infinitamente

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Parpadeo 2LEDs PIC16F876
« Respuesta #1 en: 21 de Octubre de 2021, 09:21:25 »
Para el retardo puedes hacerlo de varias formas:

Bien cargando un valoren un registro e ir cambiando el valor  según pasen cierto número de ciclos maquina del reloj. Esto no es recomendable se deja el micro en un bucle sin hacer nada más.

Lo ideal es usar las interrupciones de laguna timer y con cada interrupción incrementar o decrementar el valor de un registro y dentro del programa principal comprobar que el valor de ese registro alcanza el valor que deseas.

F
Todos los días se aprende algo nuevo.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Parpadeo 2LEDs PIC16F876
« Respuesta #2 en: 21 de Octubre de 2021, 15:25:06 »
Tenés ejemplos y hasta generadores de código disponibles. 

Aunque esta clase de retardos hay que usarlos con precaución porque estás bloqueando la ejecución (salvo las interrupciones)