Autor Tema: Realizar una secuencia de led (prender RB1, prender RB2,apagar RB1, apagar RB2)  (Leído 3626 veces)

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

Desconectado danissj

  • PIC10
  • *
  • Mensajes: 5
Necesito hacer el siguiente programa: Realizar la siguiente secuencia a medida que se presiona el botón: prender RB1, prender RB2, apagar RB1, apagar RB2 con interrupcion por RB0.

lo que pude hacer hasta ahora es prender los leds (rb1,rb2) mediante una interrupcion por RB0.

Mi duda es, como tendria que seguir los codigos para apagar los Leds RB1, RB2 y luego volver a prenderse(mediante un pulsador RB0)?

Código: [Seleccionar]
LIST p=16F628
INCLUDE <P16F628.INC>   

ORG 0x00
CLRF PORTB
GOTO INICIO

ORG 0x04
BCF INTCON,7
BSF INTCON,1
BSF PORTB,1
BSF PORTB,2
BSF INTCON,7
retfie

INICIO
BSF INTCON,7
BSF INTCON,4
BSF STATUS,RP0
MOVLW B'00000001'
MOVWF TRISB
BCF STATUS,RP0
goto $

END
« Última modificación: 26 de Septiembre de 2018, 23:39:12 por danissj »

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:Realizar una secuencia de led (prender RB1, prender RB2,apagar RB1, apagar RB2)
« Respuesta #1 en: 27 de Septiembre de 2018, 01:22:00 »
Procura no abrir dos temas para el mismo problema. Esto hace que no te puedan ayudar.

Solo seleccionaste el fichero, P16F628. Revisa si tu PIC es el adecuado o selecciona bien P16F628A.

Los fuses no aparecen, cada micro tiene caracteristicas distintas y eso lo explica la hoja de datos.

Código: ASM
  1. list      p=16F628A     ; definir procesador
  2.  
  3. #include <p16F628A.inc> ; definiciones de variables específicas del procesador
  4.  
  5.  
  6.         __CONFIG  _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF& _BODEN_ON
  7.  
  8. ; Estos de arriba son los fuses. Donde seleccionas el oscilador interno y apagas el reset.
  9.  
  10.         CBLOCK  0x20
  11.  
  12.         ENDC
  13.  
  14. ;***********************************************************************************
  15.  
  16.         org     0x000
  17.         goto    principal
  18.  
  19. ;***********************************************************************************
  20. ; Principal
  21. ;***********************************************************************************
  22.  
  23. principal
  24.                 movlw b'00000111'       ; deshabilita comparadores. Esto es
  25.                 movwf CMCON             ; algo importante en el PIC 16F628A
  26.                 clrf PORTA              ; inicia ports
  27.                 clrf PORTB              ; inicia ports
  28.                 bsf STATUS,RP0          ; Apunta a banco 1
  29.                 movlw b'11111111'       ; PORTA
  30.                 movwf   TRISA           ; salidas menos 1, 2 y 3, entradas
  31.                 MOVLW b'00000000'       ; PORTB
  32.                 movwf   TRISB           ; salidas
  33.             bcf STATUS,RP0    
  34.         CLRF PORTB
  35. INICIO
  36.         MOVLW   0XFF
  37.         MOVWF   PORTB
  38.         GOTO INICIO
  39.  
  40.         END

Este es un ejemplo solo para prender el puerto B.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:Realizar una secuencia de led (prender RB1, prender RB2,apagar RB1, apagar RB2)
« Respuesta #2 en: 27 de Septiembre de 2018, 01:25:01 »
Hay cosas que omites, viendo tu codigo pretendes trabajar con interrupciones y no estan bien configuradas.

Poco a poco: El registro TRISB es para configurar el puerto como entrada o Salida. Asocia un Cero "0" = Output y un 1= Input.

Es muy distinto al registro PORTB. Que este es el puerto fisico donde vas a conectar los leds de salida o las señales de entrada.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:Realizar una secuencia de led (prender RB1, prender RB2,apagar RB1, apagar RB2)
« Respuesta #3 en: 27 de Septiembre de 2018, 01:30:12 »
Aqui en el foro hay muchos colegas que tienen una amplia experiencia en programacion. Creo que todos tienen la disposicion de ayudar pero ninguno de hacerte el programa. Los ultimos tres temas son tuyos y en todos te refereis a lo mismo. Estoy dispuesto a explicarte las dudas que tengas pero siempre y cuando seas mas objetivo en las preguntas.

Si no puedes hacer un prendido de leds en secuencia de manera correcta, veo muy dificil que te quede claro lo de las interrupciones. Con todo respeto ya que el ensamblador es muy buen lenguaje pero necesitas leer bien la hoja de especificaciones para saber como funciona.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Realizar una secuencia de led (prender RB1, prender RB2,apagar RB1, apagar RB2)
« Respuesta #4 en: 27 de Septiembre de 2018, 06:48:37 »
Veo varias opciones..

- Usar un tabla.. que posea los valores 0x00, 0x01, 0x11 , 0x10
- Preguntar por el bit RB1, si esta en 0 poner un 1 en el carry y rotar, y viceversa, si esta en 1 dejar un 0 en el carry. Recurrir a AND/OR, etc para hacerlo.
- Esos 2 bits asi como lo tenes parece un codigo gray, asi que si llevas el valor de 0 a 3 en un registr, y lo rotas y haces una XOR con el mismo valor tendrias el numero que estas buscando.

Obviamente cualquiera de las formas vas a necesitar cuidar de no modificar los demas bits


 

anything