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
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?
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"
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
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
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
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)
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
Comprobado, gracias por todo, esta semana le pegare un ojo a tu tuturial.
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
|