Buenas, este es mi primer post aquí y les pido paciencia, ya que aun soy novato.
Utilizo Linux como S.O y ahora estoy embarcado en un proyecto con el manejo de microcontroladores (PIC16F84A). Es decir lo hago todo desde linux:
- Creacion de código ASM --> gedit, vim, ..etc
- Compilacion del ASM --> gpasm
- Grabación del PIC --> picprog
Pues bien, el problemas es que al grabar el pic con el picprog no consigo que me configure los fuses y esl oscilador como yo quiero.
Anexo les pongo un código muy simple como ejemplo y que funciona al grabarlo con IcProg en WindowsXP pero no consigo que funcione desde linux y ya me está desesperando.
;==========================================================================================================================
;
; NOMBRE: LED_1S
;
; AUTOR: LONGINOS RECUERO BUSTOS
; EMAIL: lrecuero1@alumno.uned.es
; FECHA; 12/10/2006
;
; MICRO: 16F84A
; FUSES: TODOS OFF
; OSC: XT
;
; LICENCIA: GPL
;
; DEFINICION: JUEGO DE LUCES QUE SE MUEVEN
; IZQUIERDA A DERCHA
;
;==========================================================================================================================
LIST P=16F84A
#include <p16f84a.inc> ; ESPECIFICACIÓN DEL MICRO
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_OFF ; CONFIGURACIÓN DEL OSCILADOR Y FUSES
;------ DEFINICION DE VARIABLES -------------------------------------------------------------------------------------------
reg1 EQU 0x0C ;NECESARIAS PARA EL DELAY
reg2 EQU 0X0D
reg3 EQU 0x0E
;------ CUERPO DEL PROGRAMA -----------------------------------------------------------------------------------------------
RESET ORG 0x00 ;DIRECCION DE INICIO APLICACION
BSF STATUS,RP0 ;PASO AL BANCO 1
MOVLW 0x00
MOVWF TRISB ;CONFIGURO EL PUERTO B COMO SALIDA
BCF STATUS,RP0 ;VUELVO AL BANCO 0;
;------ JUEGO DE LUCES DESDE RBO A RB7 ------------------------------------------------------------------------------------
INICIO MOVLW B'00000001'
MOVWF PORTB ;ON EN RB0
CALL DELAY ;RETARDO
MOVLW B'00000010'
MOVWF PORTB ;OFF RB0, ON RB1
CALL DELAY
MOVLW B'00000100'
MOVWF PORTB ;OFF RB1, ON RB2
CALL DELAY
MOVLW B'00001000'
MOVWF PORTB ;OFF RB2, ON RB3
CALL DELAY
MOVLW B'00010000'
MOVWF PORTB ;OFF RB3, ON RB4
CALL DELAY
MOVLW B'00100000'
MOVWF PORTB ;OFF RB4, ON RB5
CALL DELAY
MOVLW B'01000000'
MOVWF PORTB ;OFF RB5, ON RB6
CALL DELAY
MOVLW B'10000000'
MOVWF PORTB ;OFF RB6, ON RB7
CALL DELAY
GOTO INICIO ;REPETCION DE TODO EL PROCESO
;------ SUBRUTINAS DE LA APICACION ---------------------------------------------------------------------------------------
;DELAY PRODUCE UN RETARDO CUANDO ES LLAMADO, CREADO POR R_LUIS
DELAY 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 quitare 1 a reg2
goto dos ; cuando reg2 llegue a 0
decfsz reg1,1 ; le quitare 1 a reg1
goto tres ; cuando reg1 llegue a 0
RETURN
END
Si alguien sabe como puedo solucionarlo o conoce alguna otra alternativa le estaría muy agradecido.
Tambien me gustará si es posible que me digesen si se pueden configurar el oscilador y los fuses sin tener que recurrir al #include <p16f84a.inc> o sea directamente de esta forma, suponiendo que según dice el datasheet del 16f84a en la página 21, que la dirección de la configuracion de los bist es 0X2007:
S_FEATURES EQU 0x2007
.
.
.
BSF S_FEATURES,0 ; OSCILADOR
BCF S_FEATURES,1 ; XT
BCF S_FEATURES,2 ; WDT OFF
BSF S_FEATURS,3 ; PWRTE OFF
.
.
.
END
Grácias por su amabilidad y tengan paciencia y verán como soy un alumno muy aplicado.
Saludos.