TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: 5GTT en 07 de Abril de 2005, 15:14:00
-
Pues estoy liado con el tema de configurar los fuses, he leido ya algunos post en este foro sobre ello donde indican que se configura al principio del programa en ASM de la siguiente forma:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Poniendo OFF u ON segun queramos, mi problema es que en MPLAB me da este fallo:
*****************************************************************
Building LED.HEX...
Compiling LED.ASM:
Command line: "D:MPLABMPASMWIN.EXE /e+ /l+ /x- /c+ /rhex /p16F84 /q D:MPLABLED.ASM"
Error[113] D:MPLABLED.ASM 1 : Symbol not previously defined (_CP_OFF)
Error[113] D:MPLABLED.ASM 1 : Symbol not previously defined (_WDT_OFF)
Error[113] D:MPLABLED.ASM 1 : Symbol not previously defined (_PWRTE_ON)
Error[113] D:MPLABLED.ASM 1 : Symbol not previously defined (_XT_OSC)
Warning[215] D:MPLABLED.ASM 2 : Processor superceded by command line. Verify processor symbol.
MPLAB is unable to find output file "LED.HEX". This may be due to a compile, assemble, or link process failure.
Build failed.
Y mi codigo es este:
*****************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
STATUS equ 0x03
TRISB equ 0x06
PTOB equ 0x06
REG1 equ 0x0C
REG2 equ 0x0D
REG3 equ 0x0E
reset org 0x00 ; origen del programa, aquí comenzará
; siempre que ocurra un reset
goto inicio ; salta a "inicio"
org 0x05
inicio bsf STATUS,5 ; pone rp0 a 1 y pasa al banco1
movlw b"00000000" ; carga W con 00000000
movwf TRISB ; y pasa el valor a trisb
bcf STATUS,5 ; pone rp0 a 0 y regresa al banco0
ahora bsf PTOB,0 ; pone un 1 en RB0 (enciende el LED)
call retardo ; llama al retardo
bcf PTOB,0 ; pone a 0 RB0 (apaga el LED)
call retardo ; llama al retardo
goto ahora ; repite todo de nuevo
retardo movlw 10 ; Aquí se cargan los registros
movwf REG1 ; reg1, reg2 y reg3
; con los valores 10, 20 y 30
tres movlw 20 ; respectivamente
movwf REG2
dos movlw 30
movwf REG3
uno decfsz REG3,1 ; Aquí se comienza a decrementar
goto uno ; Cuando reg3 llegue a 0
decfsz REG2,1 ; le quita 1 a reg2
goto dos ; cuando reg2 llegue a 0
decfsz REG1,1 ; le quita 1 a reg1
goto tres ; cuando reg1 llegue a 0
retlw 00 ; regresa al lugar
; de donde se hizo la llamada
end
*****************************************************************
A parte tengo una duda, aun no tengo un cristal para probar y estoy impaciente, asi que como el programilla solo sirve para encender y apagar un led no creo que tenga problemas empleando un oscilador RC. Mi duda viene por quye no se si seria la config asi:
__CONFIG _RC_OSC
Muchas gracias por las respuestas y un saludo a todos.
-
Hola, tienes que poner: #INCLUDE "p16f84a.inc"
debajo de la linea:
LIST P=16F84A
Respecto a lo del oscilador, lo que pones es corrcto.
-
Bueno esas dudas las tenia yo tambien, parece ser que te hace falta la linea donde cargas la libreria p16f84a.inc dado que en ella estan definidos _XT_OSC, _WDT_ON, _CP_ON, _PWRTE_ON, etc.
asi que en tu codigo:
.......
__CONFIG......
.......
LIST P=16F84A
INCLUDE <P16F84A.INC>
.......
.......
Respecto al RC, la configuracion como tu la escribiste es la correcta.
Saludos y espero haber ayudado.
-
Me has ayudado si, pero ademas me has quitado el sueño, voy a probarlo ya! jaja. Luego os cuento como fue el asunto y si funciona el LED.
Un Saludo y muchas gracias a los dos.