Menú
Foros
Nuevos mensajes
Buscar en foros
Novedades
Nuevos mensajes
Nuevos recursos
Última actividad
Recursos
Últimas revisiones
Buscar recursos
Acceder
Registrarse
Novedades
Buscar
Buscar
Buscar sólo en títulos
De:
Nuevos mensajes
Buscar en foros
Menú
Acceder
Registrarse
Install the app
Instalar
Foros
Diseño digital
Microcontroladores y sistemas embebidos
No funciona DECFSZ 16F628a
JavaScript está desactivado. Para una mejor experiencia, por favor, activa JavaScript en el navegador antes de continuar.
Estás usando un navegador obsoleto. No se pueden mostrar este u otros sitios web correctamente.
Se debe actualizar o usar un
navegador alternativo
.
Responder al tema
Mensaje
[QUOTE="426ivan, post: 1270855, member: 846"] Hola. ¿Cómo están? Llevo dos días buscando alternativas y soluciones en la web para un problema que me tiene muy mal. Tal vez puedan ayudarme a encontrar qué estoy haciendo tan mal. Necesito transmitir 8 bits por los pines de un PIC16F628A y para ello tengo la siguiente rutina: [CODE]#INCLUDE <P16F628A.INC> ; Lista de etiquetas de microchip __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_ON & _XT_OSC &_LVP_OFF INT_VAR UDATA_SHR TOTALBIT RES 1; EQU 0x16 Transmitir ;Rutina de Transmisión movwf DatoTX ; Cargo el valor que viene en W para transmitir clrwdt bsf PORTB,2 ; Habilitar transmisión RS485 DE=1 RE=1 bcf PORTB,1 ; Bajo el nivel para indicar inicio de transmisión movlw d'8' ; Para leer los 8 bits movwf TOTALBIT IniTX Call DEMORA50 ; Espero 2 ciclos para Call DEMORA50 ; indicar bit de inicio CicloTX bsf PORTB,3 ; transmitir un UNO(LED) Call DEMORA250 ; Llamar al retardo entre bits bcf PORTB,3 ; transmitir un CERO(LED) Call DEMORA250 ; Llamar al retardo entre bits rrf DatoTX ; Rotar a la derecha el byte (en CARRY esta el primer bit) btfsc STATUS,C ; Carry es cero? goto EsUNO ; No,es un uno EsCERO bcf PORTB,1 ; transmitir un CERO(DATO) clrwdt Goto SigBit EsUNO bsf PORTB,1 ; transmitir un UNO(DATO) clrwdt Goto SigBit SigBit decfsz TOTALBIT,1 goto CicloTX ; Faltan bits de transmitir bsf PORTB,1 ; transmitir un UNO: linea en espera bcf PORTB,2 ; Deshabilitar transmisión RS485, poner "en escucha" clrwdt bcf PORTB,3 ; Apagar led testigo de Tx bsf PORTA,1 ; Encender relé RETURN[/CODE] Llamo a la rutina de la siguiente manera: [CODE]movlw 0xAA ;Dato a transmitir es AA Call Trasnsmitir[/CODE] Uso esta parte para darme cuenta de que no decrementa correctamente contando los destellos del led que suman 256 antes de salir (encender el relé) [CODE] bsf PORTB,3 ; transmitir un UNO(LED) Call DEMORA250 ; Llamar al retardo entre bits bcf PORTB,3 ; transmitir un CERO(LED) Call DEMORA250 ; Llamar al retardo entre bits[/CODE] Debería contar 8 parpadeos del led y luego salir, pero cuenta hasta 256 y recién sale. Las rutina de demora funcionan bien porque hice un test con un led y no fallan (la de 50 y la de 250 funcionan bien). Pero el descuento de TOTALBIT no funciona. También probé haciendo DECF TOTALBIT,1 y luego BTFSS STATUS,Z pero no funciona. En la simulación con MPLAB no falla pero cuando lo paso al PIC ¡No funciona! Cambié dos PIC pensando que podrían tener una falla interna. Cambié de lugar la rutina para que el compilador la asigne a distintas porciones de memoria. Ya no sé qué más probar. Me estoy volviendo loco. o_O ¿Alguna idea? Muchas gracias. Disculpen, no sé subir el código para que se pueda leer, la verdad que así como está no te dan ni ganas de leer. [/QUOTE]
Verificación
Responder
Foros
Diseño digital
Microcontroladores y sistemas embebidos
No funciona DECFSZ 16F628a
Arriba