Autor Tema: error de codigo ? , ayuda con ASM !  (Leído 5153 veces)

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

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
error de codigo ? , ayuda con ASM !
« en: 29 de Mayo de 2009, 22:28:45 »
Hola amigos ! como estan ? espero que bien ! , tengo un codigo que simulado en proteus funciona bien ! , el codigo solo toma una de 4 teclas del teclado de una pc y las envia a un pic conectado via rs-232 ! ,  grabe el pic y tengo un codigo en delphi que hace la comunicacion via rs-232 , en la plaqueta use solo un pic 16f84a , un ST232 y agregue dos led uno a la salida del puerto rs-232 y otro a la salida del ST232 ! para saber si se estan enviando datos al pic ! , quiero saber si me pueden ayudar con el codigo ASM para saber si realmente esta abilitada la conecion serie para recibir datos del puerto de la pc ! , recuerden que al andar en proteus el programa hace lo que tiene que hacer ! , espero que me puedan ayudar ! .

Saludos !.

Código: [Seleccionar]
;SISTEMA DE GOBIERNO DESDE ORDENADOR Desde el teclado de un ordenador se desea comandar
;el movimiento de una estructura mavil, segun la siguiente tabla:
;
;      TECLA (Por ejemplo)       MOVIMIENTO
;      -------------------       ----------
;              t                 Adelante
;              b                 Atrás
;              a                 Izquierda
;              l                 Derecha
;            Espacio             Parada
;
;El programa debe permitir modificar facilmente en posteriores revisiones en el harware de
;la salida, Es decir, para activar las salidas conviene utilizar el direccionamiento por bit
;en lugar de por byte(utilizar instrucciones "bsf" y "bcf", en lugar de "mov")
;
;ZONA DE DATOS***********************************************************************************
;
LIST    p=16f84A
#INCLUDE <P16f84A.INC>

 __config _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

CBLOCK 0x0c
TeclaPulsada ;va a guardar el contenido de la tecla pulsada.
MensajeApuntado ;Va a guardar la dirección del mensaje apuntado.
ENDC

#DEFINE SalidaAdelante PORTB,3 ;Define dómde se situan las salidas.
#DEFINE SalidaAtras PORTB,2
#DEFINE SalidaIzquierda PORTB,1
#DEFINE SalidaDerecha PORTB,0

TeclaAdelante EQU '8' ;Código de las teclas utilizadas
TeclaAtras EQU '2'
TeclaIzquierda EQU '4'
TeclaDerecha EQU '6'
TeclaParada EQU '5' ;Código de la tecla espaciadora, (hay un espacio,
;tener cuidado al teclear el programa).
;ZONA DE cÓDIGOS*************************************************************************

ORG 0
Inicio
call LCD_Inicializa
call RS232_Inicializa
bsf STATUS,RP0 ;Configura como salida las 4 lineas del
bcf SalidaAdelante ;puerto B respetando la configuracion del
bcf SalidaAtras ;resto de las líneas.
bcf SalidaIzquierda
bcf SalidaDerecha
bcf STATUS,RP0
goto Parado ;En principio todas las salidas deben estar
;apagadas.
Principal
   call RS232_LeeDato ;Espera a recibir un carácter.
movwf TeclaPulsada

call TesteaTeclado
goto Principal

;"Mensajes"------------------------------------------------------

Mensajes
addwf PCL,F
MensajeParado
DT"<Gaston/Eduardo>",0x00
MensajeAdelante
DT"Marcha ADELANTE",0x00
MensajeAtras
DT"Marcha ATRAS",0x00
MensajeIzquierda
DT"Hacia IZQUIERDA",0x00
MensajeDerecha
DT"Hacia DERECHA",0x00

;Subrutina"TesteaTeclado"----------------------------------------------
;
;Testea el teclado y actúa en consecuencia.
TesteaTeclado
      movlw   TeclaAdelante      ;Guarda el contenido de la tecla adelante
       subwf   TeclaPulsada,0      ;¿Es la tecla de movimiento hacia adelante?
       btfsc   STATUS,Z
       goto    Adelante      ;Si, se desea movimiento hacia adelante
;
       movlw   TeclaAtras      ;Guarda el contenido de la tecla atras
       subwf   TeclaPulsada,0      ;¿Es la tecla de movimiento hacia atras?
       btfsc   STATUS,Z
       goto    Atras         ;Sí, se decea movimiento hacia atras
;
       movlw   TeclaIzquierda    ;Guarda el contenido de la tecla Izquierda
       subwf   TeclaPulsada,0      ;¿Es la tecla de movimiento hacia Izquierda?
       btfsc   STATUS,Z
       goto    Izquierda      ;Sí, se decea movimiento hacia Izquierda
;
       movlw   TeclaDerecha      ;Guarda el contenido de la tecla Derecha
       subwf   TeclaPulsada,0      ;¿Es la tecla de movimiento hacia Derecha?
       btfsc   STATUS,Z
       goto    Derecha         ;Sí, se decea movimiento hacia la derecha
;
       movlw   TeclaParada      ;Guarda el contenido de la tecla Parado
       subwf   TeclaPulsada,0      ;¿Es la tecla de movimiento hacia parado?
       btfsc   STATUS,Z
       goto    Parado         ;Sí, se decea movimiento hacia la Parado

goto FIN ;No es ninguna tecla de movimiento sale

Parado
bcf SalidaAdelante ;Como se a pulsado la tecla de parada se
bcf SalidaAtras ;desactivan todas las salidas
bcf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeParado
goto  Visualiza
Adelante
bcf SalidaAtras
bsf SalidaAdelante
bcf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeAdelante
goto  Visualiza
Atras
bcf SalidaAdelante
bsf SalidaAtras
bcf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeAtras
goto  Visualiza
Izquierda
bcf SalidaAdelante
bcf SalidaAtras
bsf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeIzquierda
goto  Visualiza
Derecha
bcf SalidaAdelante
bcf SalidaAtras
bcf SalidaIzquierda
bsf SalidaDerecha
movlw MensajeDerecha

;Según el estado de las salidas visualiza el estado del sistema en el visualizador LCD y en
;el monitor del ordenador.

Visualiza
movwf MensajeApuntado ;Guarda la posición del mensaje.
call LCD_Borra ;Borra la pantalla del modulo LCD.
movf MensajeApuntado,W ;Visualiza el mensaje en la pantalla
call LCD_Mensaje ;del visualizador LCD.
call RS232_LineasBlanco ;Borra la pantalla del modulo LCD.
movf MensajeApuntado,W
call RS232_Mensaje ;Lo visualiza en el hiperTerminal
call RS232_LineasBlanco
FIN goto Principal

#INCLUDE <RS232.INC>
#INCLUDE <RS232MEN.INC>
#INCLUDE <LCD_4BIT.INC>
#INCLUDE <LCD_MENS.INC>
#INCLUDE <RETARDOS.INC>

END



Código: [Seleccionar]
;***************************** Librería "RS232.INC" *************************************
;
; ===================================================================
;   Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;   E. Palacios, F. Remiro y L. López. www.pic16f84a.com
;   Editorial Ra-Ma.  www.ra-ma.es
; ===================================================================
;
; Estas subrutinas permiten realizar las tareas básicas de control de la transmisión
; seríe asincrona según normas RS-232.
;
; Los parámetros adoptados para la comunicación son los siguientes:
; - Velocidad de transmisión de 9600 baudios. La duración de cada bit será 104 µs.
; - Un bit de inicio o Start a nivel bajo.
; - Dato de 8 bits.
; - Sin paridad.
; - Dos bits de final o Stop a nivel alto.
;
; El tiempo entre bit y bit  debe coincidir con el periodo de la señal leída o enviada.
; Como la velocidad de transmisión o recepción es de 9600 baudios, el periodo será:
; 1/9600 Baudios = 104 µs. Se utilizará pues la subrutina Retardos_100micros.

CBLOCK
RS232_ContadorBits
RS232_Dato
ENDC

#DEFINE  RS232_Entrada PORTA,4 ; Línea por la que se reciben los datos.
#DEFINE  RS232_Salida PORTA,3 ; Línea por la que se envían los datos.
;
; Subrutina "RS232_Inicializa" -------------------------------------------------------------
;
; Configura las líneas de salida y entrada del microcontrolador.

RS232_Inicializa
bsf RS232_Salida ; Al principio salida en alto para resposo.
bsf STATUS,RP0
bsf RS232_Entrada ; Esta línea se configura como entrada.
bcf RS232_Salida ; Esta línea se configura como salida.
bcf STATUS,RP0
return

; Subrutina "RS232_LeeDato" -------------------------------------------------------------
;
; El microcontrolador lee el dato por la línea de entrada comenzando por el bit de menor
; peso. El dato leído se envía finalmente en el registro de trabajo W.
;
; El ordenador parte siempre de un nivel alto, que es el estado que tiene cuando no
; envía información. La secuencia utilizada es:
; 1º Espera que se ejecute el pulso negativo del bit Start o flanco de bajada.
; 2º Deja pasar un tiempo una y media veces mayor que el periodo de transmisión para
; saltarse el bit de Start y lee el primer bit en su mitad.
; 3º Lee el resto de los bits de datos, esperando un tiempo igual a la duración del
; período entre lectura y lectura para testearlos en mitad del bit.
;
; Salida: En el registro de trabajo W el byte leído.

RS232_LeeDato
movlw d'8' ; Número de bits a recibir.
movwf RS232_ContadorBits
RS232_EsperaBitStart
btfsc RS232_Entrada ; Lee la entrada y espera a que sea "0".
goto RS232_EsperaBitStart ; No, pues espera el nivel bajo.
call Retardo_100micros ; El primer bit debe leerlo un tiempo igual a una
call Retardo_50micros ; vez y media el periodo de transmisión.
RS232_LeeBit
bcf STATUS,C ; Ahora lee el pin. En principio supone que es 0.
btfsc RS232_Entrada ; ¿Realmente es cero?
bsf STATUS,C ; No, pues cambia a "1".
rrf RS232_Dato,F ; Introduce el bit en el registro de lectura.
call Retardo_100micros ; Los siguientes bits los lee un periodo más tarde.
decfsz RS232_ContadorBits,F ; Comprueba que es el último bit.
goto RS232_LeeBit ; Si no es el último bit pasa a leer el siguiente.
call Retardo_200micros ; Espera un tiempo igual al los 2 bits de Stop.
movf RS232_Dato,W ; El resultado en el registro W.
return

; Subrutinas "RS232_EnviaDato" y "RS232_EnviaNúmero" -------------------------------------
;
; El microcontrolador envía un dato por la línea de salida comenzando por el bit de menor
; peso. En dato enviado será el que le llegue a través del registro de trabajo W.
; 1º. Envía un "0" durante un tiempo igual al periodo de la velocidad de transmisión.
; Este es el bit de "Start".
; 2º. Envía el bit correspondiente:
; - Si va a enviar un "0" permanece en bajo durante el periodo correspondiente.
; - Si va a escribir un "1" permanece en alto durante el periodo correspondiente.
; 3º. Envía dos bits "1" durante un tiempo igual al período de la velocidad de
; transmisión cada uno. Estos son los dos bits de Stop.
;
; Entrada: En (W) el dato a enviar.

RS232_EnviaNumero ; Envía el código ASCII de un número.
addlw '0' ; Lo pasa a código ASCII sumándole el ASCII del 0.
RS232_EnviaDato
movwf RS232_Dato ; Guarda el contenido del byte a transmitir.
movlw d'8' ; Este es el número de bits a transmitir.
movwf RS232_ContadorBits
bcf RS232_Salida ; Bit de Start.
call Retardo_100micros
RS232_EnviaBit ; Comienza a enviar datos.
rrf RS232_Dato,F ; Lleva el bit que se quiere enviar al Carry para
btfss STATUS,C ; deducir su valor. ¿Es un "1" el bit a transmitir?
goto RS232_EnviaCero ; No, pues envía un "0".
RS232_EnviaUno
bsf RS232_Salida ; Transmite un "1".
goto RS232_FinEnviaBit
RS232_EnviaCero
bcf RS232_Salida ; Transmite un "0".
RS232_FinEnviaBit
call Retardo_100micros ; Este es el tiempo que estará en alto o bajo.
decfsz RS232_ContadorBits,F ; Comprueba que es el último bit.
goto RS232_EnviaBit ; Como no es el último bit repite la operación.
bsf RS232_Salida ; Envía dos bits de Stop.
call Retardo_200micros
return





Código: [Seleccionar]
;***************************** Librería "RS232MEN.INC"
;

;
; Estas subrutinas permiten transmitir mensajes desde el microcontrolador hacia el
; ordenador a través del puerto serie RS232.
;
; Subrutina "RS232_Mensaje" -------------------------------------------------------------
;
; Envía por el puerto serie el mensaje apuntado por el registro W y grabado en memoria
; de programa del PIC. El mensaje se visualizará en el monitor del ordenador. Esta
; subrutina sigue la estructura de funcionamiento similar a la ya conocida "LCD_Mensaje"
; para visualización de mensajes en pantallas de  modulos LCD.
;
    CBLOCK
    RS232_ApuntaCaracter            ; Apunta al carácter a visualizar.
    RS232_ValorCaracter                ; Valor ASCII del carácter a visualizar.
    ENDC

RS232_Mensaje
    movwf    RS232_ApuntaCaracter    ; Posición del primer carácter del mensaje.
    movlw    Mensajes                ; Halla la posición relativa del primer carácter
    subwf    RS232_ApuntaCaracter,F    ; del mensaje respecto del comienzo de todos los
                                    ; mensajes (identificados mediante la etiqueta
                                    ; "Mensajes").
    decf    RS232_ApuntaCaracter,F    ; Para compensar la posición que ocupa la
RS232_VisualizaOtroCaracter            ; instrucción "addwf PCL,F".
    movf    RS232_ApuntaCaracter,W    ; Apunta al carácter a visualizar.
    call    Mensajes                ; Obtiene el código ASCII del carácter apuntado.
    movwf    RS232_ValorCaracter        ; Guarda el valor de carácter.
    movf    RS232_ValorCaracter,F    ; Lo único que hace es posicionar flag Z. En caso
    btfsc    STATUS,Z                ; que sea "0x00", que es código indicador final   
    goto    RS232_FinMensaje         ; de mensaje, sale fuera.
RS232_NoUltimoCaracter
    call    RS232_EnviaDato            ; Visualiza el carácter ASCII leído.
    incf    RS232_ApuntaCaracter,F    ; Apunta a la posición del siguiente carácter
    goto    RS232_VisualizaOtroCaracter    ; dentro del mensaje.
RS232_FinMensaje
    return

; Subrutina "RS232_LineasBlanco" ------------------------------------------------
;
; Visualiza unas cuantas líneas en blanco en el monitor del ordenador.

    CBLOCK
    RS232_ContadorLineas
    ENDC

RS232_LineasBlanco
    movlw    d'10'                    ; Por ejemplo este número de líneas en
    movwf    RS232_ContadorLineas    ; blanco.
R232_LineasBlancoLazo
    movlw    .10                        ; Código del salto de línea
    call    RS232_EnviaDato
    decfsz    RS232_ContadorLineas,F
    goto    R232_LineasBlancoLazo
    movlw    .13                        ; Código del retorno de carro.
    call    RS232_EnviaDato            ; Finaliza con un retorno de carro.
    return
   
« Última modificación: 29 de Mayo de 2009, 22:33:58 por Mind-field »

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: error de codigo ? , ayuda con ASM !
« Respuesta #1 en: 29 de Mayo de 2009, 23:38:44 »
Para mi el código esta bien, pruebalo enviado datos desde la PC con Siow para asegurarnos si es problema del código del PIC o del programa hecho en Delphi :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #2 en: 30 de Mayo de 2009, 15:02:10 »
Hola de nuevo Suky ! y muchas gracias por contestar amigo ! , lo probe con comport ! un programa para ver lo que pasa en el serie y el programa hace lo que tiene que hace ! , si quieres te paso el diagrama de mi circuito que es lo ultimo que me queda por ver si esta bien ! , ahora me fijo en lo que me propones y en un rato comento ! , gracias nuevamente !

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: error de codigo ? , ayuda con ASM !
« Respuesta #3 en: 30 de Mayo de 2009, 15:58:54 »
Dale adjunta el diagrama.
Y que programa probaste con el comport? El de Delphi o el del PIC? Proba con el Siow para sacarte las dudas!
No contesto mensajes privados, las consultas en el foro

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #4 en: 30 de Mayo de 2009, 15:58:57 »
Suky estoy en lo mismo ! no funciona el circuito pero si envia datos el puerto ! , a continuacion agrego el circuito ! y yo tambien me voy a fijar en el que tengo armado para ver algun error otra vez !

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #5 en: 30 de Mayo de 2009, 16:04:45 »
Amigo Suky ! probe todo lo que tengo el de Delphi modificado por mi el que me dijiste y 3 mas para checkear el puerto ! no hay forma ! solo queda un error en el circuito , ya sea en el esquema o en el que yo hice en un protoboard !

Gracias por tu interes y colaboracion Suky !

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: error de codigo ? , ayuda con ASM !
« Respuesta #6 en: 30 de Mayo de 2009, 16:13:01 »
Cambia el circuito del max232 por el que te adjunto. El capacitor del pin 2 va a 5 Vcc.
Agrégale una resistencia de 10k al Mclr del PIC a Vcc
No contesto mensajes privados, las consultas en el foro

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #7 en: 30 de Mayo de 2009, 17:45:48 »
Hola Suky ! amigazo ! jaja anda ! lo probe de nuevo con el programita que me pasaste y le cambie los baudios en 9600 anduvo perfecto ! y otra cosa que tenia el circuito es que los led's estaban quemados !  :x ademas cambie el cristal ! por las dudas jeje ! pero ya esta ! anda bien !

gracias Suki !

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #8 en: 30 de Mayo de 2009, 19:05:30 »
HOLA AMIGO SUKY ! ya arregle el protocolo de mi programa en Delphi !!!!!!!!  :-/  :-) esta andando !!!!!!!!!

SALUDOS !!!!!!!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: error de codigo ? , ayuda con ASM !
« Respuesta #9 en: 30 de Mayo de 2009, 20:45:19 »
 :-/  :-/ Buenísimo! Que linda sensación, viste!  :-)
No contesto mensajes privados, las consultas en el foro

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #10 en: 31 de Mayo de 2009, 15:15:27 »
 :-/ si ! es una sensacion linda y a la ves extraña !  :-) y ya empese a pensar en el usb apenas termine el programa de comunicacion por serie ! y ademas entienda un poco mas el funcionamiento del juego de instrucciones del pic !

Gracias Suky y en algun momento nos estaremos comunicando casi seguro !

Salu2 !!  :mrgreen:

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: error de codigo ? , ayuda con ASM !
« Respuesta #11 en: 31 de Mayo de 2009, 16:58:01 »
:-/ si ! es una sensacion linda y a la ves extraña !  :-) y ya empese a pensar en el usb apenas termine el programa de comunicacion por serie !...

 :shock: Avanzas rápido  :mrgreen: Para comunicación USB hay que trabajar en C y con los PIC18F, en el foro hay mucha info y en mi blog hay una recopilación de ambas cosas! Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #12 en: 31 de Mayo de 2009, 20:43:08 »
Gracias por la info ! en ClubDelphi tambien tengo info en lenguaje (Pascal) como se llamaba antes ! , pero si me tengo que poner con C jejeje es mas dificil que Delphi ! , me voy a fijar si encuentro la pagina y cuelgo un link en un nuevo hilo haci existe algo de ayuda en Delphi !

Desconectado Mind-field

  • PIC12
  • **
  • Mensajes: 60
Re: error de codigo ? , ayuda con ASM !
« Respuesta #13 en: 31 de Mayo de 2009, 21:06:50 »
 :mrgreen: perdon la pagina es de este foro ! el codigo esta en C ! pero esta encapsulado en una DLL ! y se lo puede llamar desde el codigo en Delphi !!!!  :-/ :-/ Buenisimo :-/ :-/

El link : http://www.todopic.com.ar/foros/index.php?topic=13418.0