Autor Tema: Ayuda con pic 16F887  (Leído 2792 veces)

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

Desconectado Jeus29

  • PIC10
  • *
  • Mensajes: 2
Ayuda con pic 16F887
« en: 23 de Junio de 2018, 23:50:36 »
Hola buena noches, soy nuevo en esto de la programacion de pic's y tengo problemas con esto: Realice un programa en ensamblador, para hacer parpadear un led y simule el circuito en proteus y sirve bien, lo que pasa es que cuando lo paso a proto no funciona, el led solo se queda encendido sin parpadear.

Este es el programa, lo estoy compilando en Mplab, les agradezco su ayuda.
LIST P=16F887
INCLUDE "P16F887.INC"
TIEMPO EQU 0X021   
   __CONFIG      _CONFIG1, _LVP_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
   __CONFIG      _CONFIG2, _WRT_OFF & _BOR21V

   ORG 00H
      ;bsf STATUS,RP0 ; SELECCIONA EL BANCO 1
      ;clrf TRISB ; PUERTOE COMO SALIDA
      bcf STATUS,RP0 ; SELECCION DEL BANCO 0
      CLRF PORTA ; INIT PORTA
      BSF STATUS,RP0 ; SEL. BANK3 PARA ACCEDER AL REG ANSELH
      BSF STATUS, RP1;
      BANKSEL ANSEL;
      CLRF ANSEL ; DIGITAL I/O
      BCF STATUS, RP1 ; BANK 1
      BANKSEL TRISA;
      MOVLW 00H ; PUERTOA COMO SALIDA O 0FFH ENTRADA
      MOVWF TRISA ;
      bcf STATUS, RP0 ; SELECCION DEL BANCO 0


;XXXXXXXXXXX ZONA DE CODIGO XXXXXXXXXX
      
INICIO      BSF PORTA,1
      CALL RETARDO
      CALL RETARDO
      BCF PORTA,1
      CALL RETARDO
      CALL RETARDO
      GOTO INICIO
      
RETARDO

      MOVLW D'255'
      MOVFW TIEMPO
DEC      DECFSZ TIEMPO
      GOTO DEC
      RETURN
      END

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda con pic 16F887
« Respuesta #1 en: 24 de Junio de 2018, 00:27:33 »
Citar
lo que pasa es que cuando lo paso a proto no funciona, el led solo se queda encendido sin parpadear.

O tal ves es tan rapido que no lo ves... Porque el proteus va MUY lento. Por ejemplo si alguna ves queres hacer una "multiplexacion" te vas a dar cuenta que en proteus es mejor no usar delays entre display y display, mientras que en real necesitas al menos un tiempo encendido decente

Trata de usar este retardo, a 4Mhz es 1s:

Código: ASM
  1. ; Delay = 1 seconds
  2. ; Clock frequency = 4 MHz
  3.  
  4. ; Actual delay = 1 seconds = 1000000 cycles
  5. ; Error = 0 %
  6.  
  7.         cblock 0x70
  8.         d1
  9.         d2
  10.         d3
  11.         endc
  12.  
  13. RETARDO
  14.                         ;999990 cycles
  15.         movlw   0x07
  16.         movwf   d1
  17.         movlw   0x2F
  18.         movwf   d2
  19.         movlw   0x03
  20.         movwf   d3
  21. RETARDO_0
  22.         decfsz  d1, f
  23.         goto    $+2
  24.         decfsz  d2, f
  25.         goto    $+2
  26.         decfsz  d3, f
  27.         goto    RETARDO_0
  28.  
  29.                         ;6 cycles
  30.         goto    $+1
  31.         goto    $+1
  32.         goto    $+1
  33.  
  34.                         ;4 cycles (including call)
  35.         return

Generado en esta pagina

http://www.piclist.com/techref/piclist/codegen/delay.htm

-------------------------

Vos tenes 255, que contando entre la resta y el salto son 3 ciclos aproximadamente por cada vuelta. Es decir un total de 255*3 = 765 ciclos. ( no estoy siendo tan exacto obviamente)
A 1us por ciclo por los 4Mhz, segun tu codigo cambia de estado cada 2 retardos de esos. Es decir 0.76ms * 2 = 1.5ms ... Es muy poco. Esta cambiando de estado unas 66 veces por segundo, tal ves es por eso que lo ves encendido
« Última modificación: 24 de Junio de 2018, 00:33:24 por KILLERJC »

Desconectado Jeus29

  • PIC10
  • *
  • Mensajes: 2
Re:Ayuda con pic 16F887
« Respuesta #2 en: 24 de Junio de 2018, 00:38:22 »
Mucha gracias, me sirvio creo que si era eso.

Desconectado tomasguido

  • PIC10
  • *
  • Mensajes: 13
Re:Ayuda con pic 16F887
« Respuesta #3 en: 24 de Junio de 2018, 15:52:13 »
Como dato extra agrego que proteus tenes un contador de tiempo que esta en micro segundos, para que te ayude a hacer retardos, o conocer el tiempo de retardo, y como esta conectado en la imagen de abajo, se acciona cuando hay un pulso alto. Saludos...