Hola a todos!
Espero que me echeis una mano, ya que llegue a un punto que no veo la luz. Estoy realizando un circuito basado en el pic 16f84, para controlar el riego, la alarma,... Esto lo controlo desde un servidor en Linux a traves del puerto serie. He realizado un sistema repetidor del puerto con un Max232, para poder conectar hasta 128 m�dulos. En estos momentos estoy realizando las rutinas de asignaci�n de n�mero de modulo (Hasta ahora todo el desarrollo lo he realizado con un m�dulo). El n�mero de m�dulo se deber�a grabar en la direcci�n 0 de la memoria Eprom, algo que ocurre si la llamada a la rutina la hago en la rutina MAIN, pero si lo hago desde donde debo hacerlo, la memoria no se graba.
No consigo enviar el fichero adjunto. Lo dejo en
http://www.lucus.org/test/main.asm por si le quereis echar un vistazo.
Aqui transcribo un par de rutinas.
;************** PROGRAMA PRINCIPAL **************
MAIN
clrf INTCON ; reset interrupts (disable all)
RS232init ; RS232 initialization
clrf FLAGreg ; initialize all flags
BANK1
movlw B"11110" ;RA0 = salida, resto= entradas
movwf PORTA
movlw B"00000001" ;RB0 = entrada, resto= salidas
movwf PORTB
BANK0
movlw B"10000000" ;Todas las salidas apagadas
movwf PORTB
movlw B"00000000" ;Desactiva el latch
movwf PORTB
BANK0 ; CARGAMOS EN REGISTRO EL NUMERO DE MODULO
movlw 0x00
movwf EEADR
BANK1
bsf EECON1, RD
BANK0
movf EEDATA, W
movwf MODULO ; Modulo contiene el numero de modulo
; call _WRE1 ; Graba la eprom !!AQUI FUNCIONA!!
DDD
movlw 0x00 ; Por defecto no estamos en modo comando
movwf MODO
movlw 0x04 ; Nombre empieza en la cuarta posicion
movwf N_CONT ; Por defecto contador de nombre a 0
LOOP btfsc RSflag ; Mira si hay datos en la entrada RS-232
call Recibe_byte ; Si hay datos, llama a la rutina
goto LOOP
; Rutina de grabacion
_WRE1 movlw d"167"
movwf EEDATA ; Nuevo numero de modulo en W
; movwf MODULO ; Modulo contiene el numero de modulo
movlw E_MOD
movwf EEADR ; Direccion en EEADR
loopl
bcf INTCON , GIE
btfsc INTCON , GIE
goto loopl
bsf STATUS , RP0
bcf EECON1,EEIF
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1 , WR
bcf EECON1,WREN
bsf INTCON , GIE
bcf STATUS , RP0
return
La rutina Recibe_byte, comprueba la petici�n y si todo es corecto llama a c_numero desde donde ejecuta la rutina de grabaci�n, sin �xito:
c_numero ; Cambia el numero de modulo
;
;
call _WRE1
; ESTA LLAMADA NO FUNCIONA!!!!
; Enciendo la salida 1 como comprobacion
bsf PORTB,7 ; Activa el latch
bsf PORTB,6 ;Activa la salida 1
bcf PORTB,7
movlw 0x00 ; Entramos en modo normal
movwf MODO
goto NO_DATA
Un saludo a todos y gracias por vuestro tiempo.