Hola amigo estoy trabajando con el DS18B20 usando la libreria DS18B20.inc el programa hace un muestreo de temperatura casa 2 segundos despues de casi 2 min me da un error en el Proteus, y el error es este
(DS1822) RAM COMMAND UNSUPPORTED
el codigo en asm es este que es un programa que encontre para un 16F84 y lo modifique para un 876, la version para 84 tambien da ese error uso el Proteus 7.4 probe con el 7.7 y pasa lo mismo, lo unico que no es del programa es la interrupcion por el puerto B que es para integrar una rutina de ajuste pero aun anulando esa interrupcion se genera la misma falla, las unicas librerias que nunca e usado son el DS18B20.INC y BUS_1LIN.INC
; ********************************* DS18B20_Term_876.asm ******************************
;
; *************************************************************************************
LIST P=16F876
INCLUDE <P16F876.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
errorlevel -302
CBLOCK 0x20
TemperaturaDeseada
Registro50ms ; Guarda los incrementos cada 50 ms.
Salida
Dire
Eedata
Dato
Temp_E
TMR0_Carga50ms
CARGA_2s
ENDC
; ZONA DE CÓDIGOS ********************************************************************
ORG 00
goto Inicio
ORG 04
goto Ser_Inter
Inicio
call LCD_Inicializa
bsf STATUS, RP0
movlw b'10100000' ; Activa interrupción del TMR0 (T0IE), por cambio de
movwf INTCON
movlw B'00000110' ;
movwf ADCON1
;movlw B'0000000' ;
;movwf TRISA
movlw B'00001111' ;
movwf TRISB
;movlw B'00000000' ;
;movwf TRISC
movlw b'10000111' ; Prescaler de 256 para el TMR0.
movwf OPTION_REG
bcf STATUS, RP0
movlw d'61'
´ movwf TMR0_Carga50ms
movlw d'61'
movwf CARGA_2s
call DS18B20_Inicializa ; Comienza la conversión del termómetro y pone
movlw TMR0_Carga50ms ; Carga el TMR0 en complemento a 2.
movwf TMR0
movlw CARGA_2s ; Y el registro cuyo decremento contará los 2 s.
movwf Registro50ms
movlw .0
call LCD_PosicionLinea1
movlw 'T' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'e' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'm' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'p' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw '.' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw ' ' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'M' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw .9
call LCD_PosicionLinea1
movlw 'T' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'e' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'm' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'p' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw '.' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw ' ' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
movlw 'A' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
Principal
goto Principal
; Subrutina "ServicioInterrupcion" ------------------------------------------------------
Ser_Inter
bcf INTCON, GIE ; lee el termómetro y actualiza termostato.
btfsc INTCON, T0IF
goto Int_Tmro
btfsc INTCON, RBIF ; Chequeo si la int no fue por RB0
goto Int_Pto
goto Fin_Int
Int_Tmro
movlw TMR0_Carga50ms
movwf TMR0 ; Recarga el TMR0.
decfsz Registro50ms,F ; Decrementa el contador.
goto Fin_Int ; No han pasado 2 segundos, por tanto sale.
movlw CARGA_2s ; Repone este contador nuevamente.
movwf Registro50ms
call DS18B20_LeeTemperatura ; Lee la temperatura.
call DS18B20_Inicializa ; Comienza conversión para la siguiente lectura.
call VisualizaTermometro
bcf INTCON, T0IF
goto Fin_Int
Int_Pto
btfsc PORTB, 2
call Bajar
btfsc PORTB, 4
call Subir
Fin_Int
movlw .8
call LCD_PosicionLinea2
movf Temp_E, W
call BIN_a_BCD_8BIT ; La pasa a BCD.
call LCD_Byte ; Visualiza apagando los ceros no significativos.
bsf INTCON, GIE
retfie
VisualizaTermometro
movf Salida, W
xorlw B'00000001'
movwf Salida
iorwf Salida, W
movwf PORTB
movlw .0 ; Se coloca para centrar visualización en la
call LCD_PosicionLinea2 ; segunda línea.
btfss DS18B20_TemperaturaSigno,7 ; ¿Temperatura negativa?
goto TemperaturaPositiva ; No, es positiva.
TemperaturaNegativa:
movlw '-' ; Visualiza el signo "-" de temperatura negativa.
call LCD_Caracter
TemperaturaPositiva
movlw .1 ; Se coloca para centrar visualización en la
call LCD_PosicionLinea2 ; segunda línea.
movf DS18B20_Temperatura,W
call BIN_a_BCD_8BIT ; La pasa a BCD.
call LCD_Byte ; Visualiza apagando los ceros no significativos.
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf DS18B20_TemperaturaDecimal,W ; Visualiza la parte decimal.
call LCD_Nibble
return
;******************************************
; Bajar Temperatura
;******************************************
Bajar
btfss PORTB, 2 ; S1 Presionado
goto $-1
call Retardo_100ms
btfsc PORTB, 2 ; S1 Soltado
goto $-1
decf Temp_E, F
Return
;******************************************
; Bajar Temperatura
;******************************************
Subir
btfss PORTB, 4 ; S1 Presionado
goto $-1
call Retardo_100ms
btfsc PORTB, 4 ; S1 Soltado
goto $-1
incf Temp_E, F
Return
;******************************************
; Lectura de EEPROM
;******************************************
Leer_M:
movf Dire, W ; dirección de EEPROM
bcf STATUS, RP0
bsf STATUS, RP1
movwf EEADR
bsf STATUS, RP0
bcf EECON1, EEPGD
bsf EECON1, RD
nop
nop
nop
bcf STATUS, RP0
movf EEDATA, W
movwf INDF
bcf STATUS, RP0 ; EEADR posee la dirección a leer
bcf STATUS, RP1
incf Dire, F
incf FSR, F
Return
;******************************************
; Grabacion de EEPROM
;******************************************
Grab_M:
movf Dire, W
bsf STATUS, RP1
bcf STATUS, RP0 ; Selecciona el Banco 2
movwf EEADR ; parte baja de la direccion.
bcf STATUS, RP1
bcf STATUS, RP0 ; Selecciona el Banco 2
movf Dato, W
bsf STATUS, RP1
bcf STATUS, RP0 ; Selecciona el Banco 2
movwf EEDATA ; parte baja de la direccion.
bcf STATUS, RP1
bcf STATUS, RP0 ; Selecciona el Banco 2
bsf STATUS, RP0
bsf STATUS, RP1 ; Selecciona banco 3
bcf EECON1, EEPGD ; Acceso a EEPROM de datos
bsf EECON1, WREN ; Permiso de escritura
movlw b'01010101'
movwf EECON2
movlw b'10101010'
movwf EECON2 ; Secuencia establecida por Microchip
bsf EECON1, WR ; Orden de escritura
btfsc EECON1, WR ; Testear flag de fin de escritura
goto $-1
bcf EECON1, WREN ; Desconecta permiso de escritura
bcf EECON1, EEIF ; Reponer flag de fin de escritura
bcf STATUS, RP0
bcf STATUS, RP1 ; Selecciona banco 0
Return
INCLUDE <DS18B20.INC> ; Subrutinas de control del termómetro digital.
INCLUDE <BUS_1LIN.INC> ; Subrutinas de control del bus de 1 línea.
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD_8BIT.INC>
INCLUDE <LCD_4BIT_876.INC>
END