Autor Tema: Ayuda BLINK en 16f690(SOLUCIONADO)  (Leído 3023 veces)

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

Desconectado fidodido

  • PIC12
  • **
  • Mensajes: 51
Ayuda BLINK en 16f690(SOLUCIONADO)
« en: 31 de Mayo de 2012, 04:23:14 »
Hola!! Bueno el tema esque empece hace 2 o 3 dias con el assembler y entre que soy nuevo en este lenguaje de programación y que lllevo solo 1 o 2 meses trabajando con PICs pues resulta que en este ejemplo de intentar hacer parpadear un LED pues no soy capaz.

El pic es el 16f690 montado sobre la placa PICkit2 low pin count demo.

Aquí os dejo el código:

Código: [Seleccionar]
; PICkit 2 Lesson 1 - 'Hello World'
;
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF)

CONT1 EQU 0x20  ;definir las variables
CONT2 EQU 0x21  ;CONT1 y CONT2
                ;en las direcciones de memoria (RAM)
                ; 0x0C y 0x0D


org 0 ;vector de reset, es decir, desde que parte de la memoria empieza a leer el priograma (FLASH)
Start

BSF STATUS,RP0 ;select Register Page 1
BCF TRISC,0 ;make I/O Pin C0 an output
BCF TRISC,1 ;make I/O Pin C1 an output
BCF TRISC,2 ;make I/O Pin C2 an output
BCF TRISC,3 ;make I/O Pin C3 an output
BCF STATUS,RP0 ;back to Register Page 0
movlw d'255'
movwf CONT1
movwf CONT2



Loop

BSF PORTC,0 ;turn on LED C0
LABEL1: DECFSZ CONT1, 1   
GOTO LABEL1                    ;RETARDO POR REALIZACION DE CICLOS VACIOS
DECFSZ CONT2, 1
GOTO LABEL1
BCF PORTC,0 ;turn off LED C0
LABEL2: DECFSZ CONT1, 1   
GOTO LABEL2                    ;RETARDO POR REALIZACION DE CICLOS VACIOS
DECFSZ CONT2, 1
GOTO LABEL2
GOTO Loop ;do it again
end


Espero que podáis ayudarme.

Saludos-


EDIT: programa funcionando, el código anterior ya funciona bien :)
« Última modificación: 01 de Junio de 2012, 03:12:19 por fidodido »

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Ayuda BLINK en 16f690
« Respuesta #1 en: 31 de Mayo de 2012, 10:55:27 »
Hola fidodido, Bienvenido al foro

despues de la instruccion

bcf   PORTC,0

Debes poner otro retardo, de otra forma vuelves muy rapido a la instruccion bsf  PORTC,0 y pareceria que el led esta todo el rato encendido.
Ademas debes de configurar los pines para que sean digitales poniendo en cero el registro ANSEL y ANSELH,  por defecto los pines empiezan como entradas analogicas

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ayuda BLINK en 16f690
« Respuesta #2 en: 31 de Mayo de 2012, 13:04:24 »
Aparte de lo que te dice Sander.

Creo que tienes un fallo en la definicion de variables, nunca trabaje con este PIC pero me extraña que puedas poner direcciones de RAM a partir de 0X0C:

Código: [Seleccionar]
CONT1 EQU 0x0C  ;definir las variables
CONT2 EQU 0x0D  ;CONT1 y CONT2
                ;en las direcciones de memoria (RAM)
                ; 0x0C y 0x0D

Ponlas en 0X20 Y 0X21, o mira en el data sheet donde acaban los registros propios del PIC.

Desconectado fidodido

  • PIC12
  • **
  • Mensajes: 51
Re: Ayuda BLINK en 16f690
« Respuesta #3 en: 31 de Mayo de 2012, 17:27:13 »
Hola fidodido, Bienvenido al foro

despues de la instruccion

bcf   PORTC,0

Debes poner otro retardo, de otra forma vuelves muy rapido a la instruccion bsf  PORTC,0 y pareceria que el led esta todo el rato encendido.
Ademas debes de configurar los pines para que sean digitales poniendo en cero el registro ANSEL y ANSELH,  por defecto los pines empiezan como entradas analogicas

Saludos


Lo siento sander, no acabo de entender que tengo que hacer, es lo que tiene ser nuevo del todo, si me lo pudieses aclarar te lo agradeceria. tapi8, muchas gracias por el direccionamiento de las variables CONT, exactamente estaban mal direccionadas.

Aqui dejo el codigo como quedo con las modificaciones de memoria.


Código: [Seleccionar]
; PICkit 2 Lesson 1 - 'Hello World'
;
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF)

CONT1 EQU 0x20  ;definir las variables
CONT2 EQU 0x21  ;CONT1 y CONT2
                ;en las direcciones de memoria (RAM)
                ; 0x20 y 0x21


org 0;vector de reset, es decir, desde que parte de la memoria empieza a leer el priograma (FLASH)

Start

BSF STATUS,RP0 ;select Register Page 1
BCF TRISC,0 ;make I/O Pin C0 an output
BCF TRISC,1 ;make I/O Pin C1 an output
BCF TRISC,2 ;make I/O Pin C2 an output
BCF TRISC,3 ;make I/O Pin C3 an output
BCF STATUS,RP0 ;back to Register Page 0
movlw d'255'
movwf CONT1
movwf CONT2


Loop

BSF PORTC,0 ;turn on LED C0
LABEL:DECFSZ CONT1, 1   
GOTO LABEL                    ;RETARDO POR REALIZACION DE CICLOS VACIOS
DECFSZ CONT2, 1
GOTO LABEL
BCF PORTC,0 ;turn off LED C0
GOTO Loop ;do it again
end

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Ayuda BLINK en 16f690
« Respuesta #4 en: 31 de Mayo de 2012, 23:11:44 »
a lo que se refiere sander es a la secuencia de tu codigo, primero prendes tu led y se queda prendido en lo que tienes el retardo, luego lo apagas y envias a tu programa nuevamente al inicio y lo que hace es prender el led.

entonces tu led esta apagado solamente lo que dura la instruccion de "goto", que son us, entonces nunca lo vas a ver apagado.

despues del bcf portc,0

pon otro retardo igual al que pusiste despues de encender el led
"Nada es imposible, no si puedes imaginarlo"

Desconectado fidodido

  • PIC12
  • **
  • Mensajes: 51
Re: Ayuda BLINK en 16f690
« Respuesta #5 en: 01 de Junio de 2012, 03:09:48 »
Muchas gracias rivale, ya tengo funcionando el programa, tambien muchas gracias a todos por la ayuda :)

El programa del blink que funciona lo voy a dejar en el 1º post por si alguien que comienza quiere un ejemplo fácil.


Saludos.


 

anything