Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#961
Hola:

¿Hay algo así pero de escritorio? Me refiero un programa.

Saludo.
#962
Hola:

Puedes comprobarlo con un simulador de PIC como el Proteus 7.10.

Saludo.
#963
Hola:

Aquí encontré un ejemplo sencillo.
Código (asm) [Seleccionar]
;El Timer 0 TMR0.
;
;Se trata de comprobar el funcionamiento básico del Timer 0. Cuando se detecta un flanco
;decendente en RA0 (conectada con un pulsador), se activa la salida RB0 durante un tiempo
;y luego se desconecta. El TMR0 realiza una temporización de 50mS que se repite tantas veces
;como se indique en la variable "Temp". Así pues la temporización total será de 50mS*Temp.
;
;Suponiendo una frecuencia de trabajo de 4MHz, 4Tosc=1uS. Trabajando con un prescaler de 256,
;al TMR0 hay que cargarlo con 195 para temporizar 50mS (Temporización=1uS*195*256)


List p=16F886 ;Tipo de procesador
include "P16F886.INC" ;Definiciones de registros internos

;Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
;adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades

__config _CONFIG1, _LVP_OFF&_PWRTE_ON&_WDT_OFF&_EC_OSC&_FCMEN_OFF&_BOR_OFF ;Palabra 1 de configuración
__config _CONFIG2, _WRT_OFF&_BOR40V ;Palabra 2 de configuración

Valor equ .20 ;Constante para temporizar 1 seg (50mS*20)

Temp equ 0x020 ;Variable para la temporización
             
org 0x00 ;Vector de RESET
goto Inicio
org 0x05

;*********************************************************************************************
;Delay: El Timer 0 realiza un retardo de 50mS que se repite tantas veces como se indica en la
;constante valor

Delay movlw Valor
movwf Temp ;Nº de veces a temporizar 50 mS
Delay_1 movlw ~.195 
movwf TMR0 ;Inicia el Timer 0 con 195 (195*256=49.9mS)
bcf INTCON,T0IF ;Repone flag del TMR0
Delay_2 btfss INTCON,T0IF ;Fin de los 50mS ??
goto Delay_2 ;No, el TMR0 no ha terminado
decfsz Temp,F ;Decrementa el contador. Fin de temporización ??
            goto Delay_1 ;No, el TMR0 temporiza otros 50 mS
return ;Si, final de la temporización

;Programa principal
Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0
bsf STATUS,RP1 ;Selecciona banco 3
clrf ANSEL ;Puerta A digital
clrf ANSELH ;Puerta B digital
bcf STATUS,RP1 ;Selecciona banco 1
movlw b'11111110'
movwf TRISB ;RB0 se configura como salida
movlw b'00111111'
movwf TRISA ;RA5:RA0 se configuran como entrada
movlw b'00000111'
movwf OPTION_REG ;TMR0 con reloj interno y preescaler de 256
bcf STATUS,RP0 ;Selecciona banco 0                                                                          

;Este es el cuerpo principal del programa. Espera a que en RA0 se detecte un flanco descendente

Loop btfsc PORTA,0     ;RA0=0 ??
            goto Loop ;No, esperar
bsf PORTB,0 ;Si activar RB0
call Delay ;Temporizar
bcf PORTB,0 ;Desactivar RB0
goto Loop ;Repetir el proceso

end



Otro más por aquí.
Código (asm) [Seleccionar]
;La interrupción del TMR0.
;
;Se trata de comprobar la interrupción provocada por el TMR0. El programa
;lee el estado de los interruptores conectados a RA0 y RA1 para reflejarlo en
;los leds conectados a RB0 y RB1 respectivamente. Al mismo tiempo el TMR0
;genera una interrupción cada 0.01 seg. (10 mS) que se repetirá 50 veces con objeto
;de hacer intermitencia de 500 mS sobre el led conectado a RB3.


List p=16F886 ;Tipo de procesador
include "P16F886.INC" ;Definiciones de registros internos

;Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
;adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades

__config _CONFIG1, _LVP_OFF&_PWRTE_ON&_WDT_OFF&_EC_OSC&_FCMEN_OFF&_BOR_OFF ;Palabra 1 de configuración
__config _CONFIG2, _WRT_OFF&_BOR40V ;Palabra 2 de configuración

Contador equ 0x020 ;Variable para la temporización
             
org 0x00 ;Vector de RESET
goto Inicio
org 0x04 ;Vector de interrupción
goto Interrupcion
org 0x05

Interrupcion    bcf INTCON,T0IF ;Repone flag del TMR0
decfsz Contador,F ;Decrementa el contador. Ha habido 50 interrupciones ??
            goto Seguir ;No, no han pasado los 500 mS
Con_si_0    movlw .50
            movwf Contador    ;Repone el contador nuevamente para contar 50 interrupciones
            movlw b'00001000'
xorwf PORTB,F ;RB3 cambia de estado
Seguir    movlw ~.39
            movwf TMR0      ;Repone el TMR0 con 39
            retfie ;Retorno de interrupción

Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0
bsf STATUS,RP1 ;Selecciona banco 3
clrf ANSEL ;Puerta A digital
clrf ANSELH ;Puerta B digital
bcf STATUS,RP1 ;Selecciona banco 1
clrf TRISB ;RB7:RB0 se configuran como salida
movlw b'00111111'
movwf TRISA ;RA5:RA0 se configuran como entrada
movlw b'00000111'
movwf OPTION_REG ;Preescaler de 256 para el TMR0
bcf STATUS,RP0 ;Selecciona banco 0                                                                          

;El TMR0 se carga con 39. Con un preescaler de 256 y a una frecuencia de 4MHz se obtiene una interrupción
;cada 10mS. Se habilita la interrupción del TMR0.

movlw ~.39
movwf TMR0 ;Carga el TMR0 con 39
movlw .50
movwf Contador ;Nº de veces a repetir la interrupción
movlw b'10100000'
movwf INTCON ;Activa la interrupción del TMR0

;Este es el cuerpo principal del programa. Consiste en leer constantemente el estado de RA0 y RA1 para visualizar
;sobre RB0 y RB1 sin que cambie el estado actual de RB7

Loop btfsc PORTA,0     ;Testea el estado de RA0
            goto RA0_ES_1
            bcf PORTB,0 ;Desactiva RB0
            goto TEST_RB1
RA0_ES_1    bsf PORTB,0 ;Activa RB0
TEST_RB1    btfsc PORTA,1     ;Testea el estado de RA1
            goto RA1_ES_1
            bcf PORTB,1 ;Desactiva RB1
            goto Loop
RA1_ES_1  bsf PORTB,1 ;Activa RB1
goto Loop

end ;Fin del programa fuente


Saludo.
#964
Lo he pensado. De hecho tarde o temprano tendré una Wii. Sale un poco cara, cuando rebajen mucho.
#965
Hola:

Si le interesa usar retardos, aquí hay información.

http://electronica-pic.blogspot.com.es/2012/02/retardos-para-pic12f-16f-y-18f.html

Saludo.
#966
Hola:



Me dio por probar la GameCube para jugar al Resident Evil Remake, motivo de su compra. Hace muchos años, antes de que saliera la PS3, mucho antes, no he tocado la GC. Me limitaba a jugar juegos de PS2 y PS3. Ahora me encuentro que la GC enciende, puedo leer la Memory Card y ya está. En cuestión de leer juego nada de nada. Nunca muesta el laser rojo, ni un poco. Lo tengo ahora mismo desarmado, le he puesto grasa a los engranajes para que vaya con soltura y nada. No tiene ningún tipo de mod o chip, tal como vino al mundo.

¿Hay alguna solución para salvarlo?

¿Comprar otro lector?
Para eso me compra una Wii (que nunca lo he podido ver ni en pintura), pero sus juegos con compatibles.

Un cordial saludo.

PD: Lo que no me gusta de las consolas con fomato disco, que los lectores no duran como los cartuchos de antes. A parte de ello, no puedes cambiar de lector con PS3. ;(
#967
Hola:



Quiero saber, dentro de España, revistas favoritas sobre el mundo de programación que leen y practican con ellas algunos códigos. He estado en elmundo de la electrónica, PC, Linux y videojuegos, ahora toca programación, se pueden intercalar. En este caso, si lees alguna revista muy de solo programación, cuál te gusta y cual das consejos sobre ella.

Quiero saber cuantas marcas hay en el mercado ahora mismo. Me picó la curiosidad porque encontré en el baúl de los recuerdo una que se llama Divmanía Año1, número 1. Muy pero que muy entretenido para la época ya más de 10 años por lo menos.

El que me llama la atención es relacionado con Visual Studio y Bases de datos, solo se centran en ello, las demás de todo un poco.

No la he comprado pero las pongo y nos de consejos o sugerencias de que les parece.
http://www.dotnetmania.com/revista

Me da la sensación que las revistan antiguas, son muy entretenidas.

Un saludo.
#968
Electrónica / Manejar EEPROM interna
7 Marzo 2013, 15:51 PM
Hola:

Uso el PIC12F629 puedo leer un valor en la EEPROM interna pero no soy capaz  de almacenarlo en la misma dirección.

Este es el código.
;No olvidar que si GP2 detecta un un 0 en la entreda menor de 5 segundos,
;el PIC no actua, vuelve a lo suyo como si no pasara nada.
;
; Cuando detecte
;GP2|GP0 GP1 GP4 GP5
;---+----------------
;1) | 0   1   0   0
;2) | 1   0   1   0
;3) | 0   1   1   0
;4) | 1   0   0   1
;
;ZONA DE DATOS*****************************************************************

    LIST P=12F629                          ; Procesador usado.
    INCLUDE <P12F629.INC>                  ; Fichero que definen las etiquetas.

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_OFF & _FOSC_INTRCIO
    ERRORLEVEL -302

#DEFINE     Pulsador    GPIO,2      ; Pulsador.
#DEFINE     Leds        GPIO        ; Leds está conectado al GPIO.

VARIABLES UDATA_SHR
ContadorEstado RES 1
RAM_ret RES 1
RAM_ret_1 RES 1
Contador RES 1

;ContadorEstado     equ  20h
;RAM_ret         equ 21h
;RAM_ret_1       equ 22h
;Contador        equ 23h

; ORG 0x2100 ; Corresponde a la dirección 0 de la zona EEPROM de datos.
; DE 0x00 ; El contador en principio a cero.

;ZONA DE CÓDIGOS***************************************************************
    ORG     0     
                  ; El programa comienza en la dirección 0.
    goto    Inicio

Inicio
    bsf     STATUS,RP0                  ; Selecciona banco 1.
    call    0x3FF                    ; Lo el valor de la calibración que sera almacenada en W.
    movwf   OSCCAL                    ; Paso el valor de W a OSCCAL para calibrar el oscilador.
    movlw   b'00000100'
    movwf   TRISIO
    movlw   b'00001111'
    movwf   OPTION_REG              ; Activa Pull Up.
    movlw   b'0000100'
    movwf   WPU                     ; Activada Pull Up del GP0.
    bcf     STATUS,RP0                      ; Selecciona banco 0.
    movlw   b'00000111'             ; Desactivar comparadores.
    movwf   CMCON
movlw .3
    movwf Contador
clrf GPIO
;***************************************************************************

Principal
    btfsc   Pulsador                ; ¿Pulsador presionado?, ¿(Pulsador)=0?
    goto    Principal               ; No. Vuelve a leerlo.
;    call    Retardo_20ms            ; Espera que se estabilicen los niveles de tensión.
    btfsc   Pulsador                ; Comprueba si es un rebote.
    goto    Principal               ; Era un rebote y sale fuera.
    call    IncrementaVisualiza             ; Incrementa el contador y lo visualiza.
EsperaDejePulsar
    btfss    Pulsador                ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
    goto    EsperaDejePulsar         ; No. Espera que deje de pulsar.
Fin    goto    Principal

;***************************************************************************   
; Subrutina "IncrementaVisualiza" ---------------------------------------------------------

IncrementaVisualiza
call Lee_Dato_EEPROM
incf Contador,F ; Incrementa el contador y comprueba si ha
call Escribe_Dato_EERPOM
movlw d'4' ; llegado a su valor máximo mediante una
subwf Contador,W ; resta. (W)=(Contador)-4.
btfsc STATUS,C ; ¿C=0?, ¿(W) negativo?, ¿(Contador)<4?
InicializaContador
clrf Contador ; No, era igual o mayor. Por tanto, resetea.
Visualiza
movf Contador,W
call Tabla ; Lo pasa a siete segmento para poder ser
movwf GPIO ; visualizado en el display.
return


Tabla
    addwf PCL,F                      ; Sumo W al contador de programa. ;
    retlw b'00000010'  ;1
    retlw b'00010001'  ;2         
    retlw b'00010010'  ;3               ; Retorno con el valor correspondiente. 
    retlw b'00100001'  ;4
;Subrutina EEPROM ******************************************************************

Lee_Dato_EEPROM
    bsf     STATUS,RP0              ; Banco 1
    movlw   0x00              ; Primera posición de la tabla
    movwf   EEADR                  ; Apunta ahí
;    movf    Contador,W       ; Coge el contador
;    addwf   EEADR                  ; Suma el contador para apuntar al dato que nos interesa
    bsf     EECON1,RD              ; Lee el valor de la tabla
    movf    EEDATA,W              ; Pasa el valor a W para trabajar con él.
bcf STATUS,RP0
    return



;Guarda en la EEPROM el valor del contador
Escribe_Dato_EERPOM
    bsf      STATUS,RP0             ; Banco 1.
    movlw    0x00                 ; Elijo esta dirección de la EEPROM y
    movwf    EEADR                  ; lo cargo en EEADR con el dato a escribir.
    movlw    Contador
    movwf    EEDAT                  ; Cargo el registro EEDAT con el dato a escribir.
    bsf      EECON1,WREN            ; Habilitar
    bcf     INTCON,GIE              ; Deshabilitar intercepciones.
    movlw     0x55                  ; Desbloquear escritura.
    movwf     EECON2
    movlw     0xAA
    movwf     EECON2
    bsf     EECON1,WR               ; Inicie la escritura.
    bsf     INTCON,GIE              ; Habilitar INTS.
bcf STATUS,RP0
    return
   
;Subrutina Retardo_20ms ************************************************************
; Retardo = 0.02 segundos.
; Frecuencia Reloj = 4 MHz.
; Retardo actual = 0.02 segundos = 20000 ciclos.

Retardo_20ms
            ;19993 ciclos.
    movlw    0x9E
    movwf    RAM_ret
    movlw    0x10
    movwf    RAM_ret_1
Retardo_20ms_0
    decfsz    RAM_ret, f
    goto    $+2
    decfsz    RAM_ret_1, f
    goto    Retardo_20ms_0
            ;3 ciclos.
    goto    $+1
    nop
            ;4 ciclos (incluyendo call).
    return

END


Salu2.
#970
Hola:





He visto este enlace y está caducado. A estas altura de la vida, a lo mejor hay mejores versiones o más actualizado.

http://www.emudesc.net/foros/anade-tus-manuales/7759-aprende-a-crackear-tutorial-crack-dia.html

Si alguien lo conoce y lo tiene. ¿Lo compraten?

Un saludo.

Edito:

Parece que hay algo aquí.
http://systeek.blogspot.com.es/2011/10/tema-2-sistemas-numericos-y-stack.html