Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Encendido de LED
#1
Podeis revisarme este codigo para encender un led, no consigo hacer que funcione.


Código:
#include "p16F84A.inc"

; CONFIG
; __config 0xFFFD
__CONFIG _FOSC_XT & _WDTE_ON & _PWRTE_OFF & _CP_OFF
STATUS equ 03h
TRISA  equ 85h
PORTA  equ 05h
CONTADOR equ 08h
CONTADOR2 equ 09h

Main code
         BSF STATUS,5
         MOVLW b'00000'
         MOVWF TRISA
         BCF STATUS,5

Inicio   MOVLW 02h;Encendemos led
         MOVWF PORTA
        

Etiqueta DECFSZ CONTADOR,1
         goto Etiqueta
         DECFSZ CONTADOR2,1
         goto Etiqueta


;Apagamos LED
         MOVLW 00h
         MOVWF PORTA
Etiqueta2   DECFSZ CONTADOR,1
            goto Etiqueta2
            DECFSZ CONTADOR2,1
            goto Etiqueta2

            goto Inicio

END
Citar
#2
Codigo en ASM, asi de primeras no tiene sentido, con el Bit 5 del registro STATUS te pones en el banco 1 de registros, y luego mueves a W un Byte, que siquiera tiene 8 bits, de ceros....., o me falta algo o ese codigo no tiene sentido ninguno.

No tienes que declarar tampoco los registros como variables arriba

Por que pata quieres que parpadee el led?
Citar
#3
Por la 18, el codigo es de un tuto "Tutorial Programacion de PICs en Ensamblador Asociacion de Robotica y Domotica de Espana A R D E"
Citar
#4
Código:
#include "p16F84A.inc"

; CONFIG
; __config 0xFFFD
__CONFIG _FOSC_XT & _WDTE_ON & _PWRTE_OFF & _CP_OFF
STATUS equ 03h
TRISA  equ 85h
PORTA  equ 05h
CONTADOR equ 0Ch       ;Declaralas en espacio de memoria, la 08-09 son FSR de EEPROM
CONTADOR2 equ 0Dh

org 0x00    ;Vector de reset, ponlo ya que necesitas saber donde ir cuando se resetea el pic
goto Main_code

org 0x04    ;Vector de interrupciones, aqui va cuando salta interrupcion


Main_code
         BSF STATUS,5
         MOVLW b'00000'
         MOVWF TRISA
         BCF STATUS,5

Inicio   MOVLW 02h;Encendemos led
         MOVWF PORTA
        

Etiqueta DECFSZ CONTADOR,1
         goto Etiqueta
         DECFSZ CONTADOR2,1
         goto Etiqueta


;Apagamos LED
         MOVLW 00h
         MOVWF PORTA
Etiqueta2   DECFSZ CONTADOR,1
            goto Etiqueta2
            DECFSZ CONTADOR2,1
            goto Etiqueta2

            goto Inicio

END

Te e apañado unas cosas al principio que son necesarias. Luego la funcion del codigo que es hacer parpadear un LED no?. el tiempo estoy algo espeso para calcularlo ahora por la mañana ya que DECFSZ solo consume un ciclo de instruccion pero el goto consume 2, pero bueno a lo que vamos creo que asi debiera de funcionar. De todas formas los registros que declaras al principio viene ya declarados en la libreria INC que introduces en la cabecera del codigo

El led debiera parpadear cada 200ms aprox, lo he probado en MPLABX y aparentemente asi funciona
Citar
#5
Si lo esscribo así me da error, sin embargo como tu lo tienes no, y veo que es lo mismo sabes por que?

Código:
#include "p16F84A.inc"

__CONFIG _FOSC_XT & _WDTE_ON & _PWRTE_OFF & _CP_OFF
STATUS equ 03h
TRISA  equ 85h
PORTA  equ 05h
CONTADOR equ 0Ch
CONTADOR2 equ 0Dh

org 0x00    ;Vector de reset, ponlo ya que necesitas saber donde ir cuando se resetea el pic
goto Main_code

org 0x04    ;Vector de interrupciones, aqui va cuando salta interrupcion

Main code
         BSF STATUS,5
         MOVLW b'00000'
         MOVWF TRISA
         BCF STATUS,5

Inicio   MOVLW 02h;Encendemos led
         MOVWF PORTA
        
Etiqueta DECFSZ CONTADOR,1
         goto Etiqueta
         DECFSZ CONTADOR2,1
         goto Etiqueta


;Apagamos LED
            MOVLW 00h
            MOVWF PORTA
Etiqueta2   DECFSZ CONTADOR,1
            goto Etiqueta2
            DECFSZ CONTADOR2,1
            goto Etiqueta2

            goto Inicio

END
Citar
#6
Que error te sale? Con que IDE compilas? Pon a principio del codigo antes del include:

list P=16F84A

Enviado desde mi Nexus 4 mediante Tapatalk
Citar
#7
Uso el MPLAB, te pego lo que dice el log al compilar:

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `C:/Users/X/MPLABXProjects/LED.X'
make -f nbproject/Makefile-default.mk dist/default/debug/LED.X.debug.cof
make[2]: Entering directory `C:/Users/X/MPLABXProjects/LED.X'
"C:\Program Files (x86)\Microchip\MPLABX\mpasmx\mpasmx.exe" -d__DEBUG -q -p16f84a -l"build/default/debug/principal.lst" -e"build/default/debug/principal.err" -o"build/default/debug/principal.o" "principal.asm"
make[2]: *** [build/default/debug/principal.o] Error 1
make[1]: *** [.build-conf] Error 2
Warning[205] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 1 : Found directive in column 1. (list)
make: *** [.build-impl] Error 2
Warning[205] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 11 : Found directive in column 1. (org)
Warning[203] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 12 : Found opcode in column 1. (goto)
Error[113] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 12 : Symbol not previously defined (Main_code)
Warning[205] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 14 : Found directive in column 1. (org)
Message[302] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 19 : Register in operand not in bank 0. Ensure that bank bits are correct.
Warning[205] C:\USERS\X\MPLABXPROJECTS\LED.X\PRINCIPAL.ASM 41 : Found directive in column 1. (END)
make[2]: Leaving directory `C:/Users/X/MPLABXProjects/LED.X'
make[1]: Leaving directory `C:/Users/X/MPLABXProjects/LED.X'

BUILD FAILED (exit value 2, total time: 938ms)
Citar
#8
La posicion Main_code si te fijas te falta la barrabaja, procura evitar poner espacios, pon barrabajas en todo caso.

Los warnings son por latabulacion pero no te impiden compilar

Enviado desde mi Nexus 4 mediante Tapatalk
Citar
#9
Comprobado, gracias por todo, esta semana le pegare un ojo a tu tuturial.
Citar
#10
Perfecto!, tengo en mente muchas mas partes pero ando de examenes y no tengo tiempo ahora mismo se seguir, pero para empezar yo creo que van bien. A veces no funcionan las cosas en ASM por pijadas.



Enviado desde mi Nexus 4 mediante Tapatalk
Citar