Tak uz jsem prisel na pricinu problemu. Pokud ctu data z cidla 18B20, provede se “reset” po zapisu do EEPROM.
to honza3: diky, zapis funguje, preruseni je lespi mit az na konci
kde je ale problem ?
Zde ctu data z teplotniho cidla
[code]KOM_S_C_1
movlw b’00101000’ ; zakazane všechna přerušení a od přetečení TMR0
movwf INTCON
CALL A0_RESET_C ;PROCEDURA RESET
MOVLW 0xCC ;PRIKAZ ROM - SKIPROM
CALL A0_WR_DO_C ;ZAPIS PRIKAZU DO CIDLA
MOVLW 0x44 ;PRIKAZ ROM - prevod teploty
CALL A0_WR_DO_C ;ZAPIS PRIKAZU DO CIDLA
return
;******************************************************
; TEST UKONČENÍ PŘEVODU *
;*************************
; Pro zjisteni ukonceni prevodu teploty se musi vyslat “cteci casovy usek” (pekne blbej výraz
)
; toto cteni se musi provadet pokazde, kdy chceme cist stav sbernice, protoze cidlo odpovi pouze jednou na
; otazku, zda probiha prevod, takze cekaci smycka se vraci o 10 radku nahoru na nove vyslani
; cteciho casoveho useku. 
namerane
g MOVLW 0X03 ;POMOCNE ZBRZDENI
MOVWF TMP2
banksel TRISC ;BANKA1
BCF ds ;PIN RA0 JAKO VYSTUP
BANKSEL PORTC ;BANKA0
BSF ds ;LOG.1 NA TCK - PRIPRAVA NA START CTENI
BCF ds ;LOG.0 NA TCK - START CTECIHO CASOVAHO USEKU
nop
;-------------------------------
banksel TRISC ;BANKA1
BSF ds ;PIN RA0 JAKO VSTUP
BANKSEL PORTC ;BANKA0
DECFSZ TMP2,F ;DOBRZDENI NA 13us
GOTO $-1
BTFSC ds ;TEST UROVNE SBERNICE - VYSLANI BITU Z CIDLA
GOTO KOM_S_C ;CIDLO POSLALO LOG.1 ukonceny prevod
; CALL BR_60us ;BRZDA 60us
goto g
;******************************************************
KOM_S_C ; TEST KOMUNIKACE (z cidla musi byt nactena hodnota +85st.C. (0550h A PO UPRAVE V TEMP_MSB bit0 =0 A V TEMP_LSB=0xAA));
;******************************************************
CALL A0_RESET_C ;PROCEDURA RESET
MOVLW 0xCC ;PRIKAZ ROM - SKIPROM
CALL A0_WR_DO_C ;ZAPIS PRIKAZU DO CIDLA
MOVLW 0xBE ;FUNKCNI PRIKAZ - READ SCRATCHPAD
CALL A0_WR_DO_C ;ZAPIS PRIKAZU DO CIDLA
CALL A0_CTI_Z_C ;CTENI DAT Z CIDLA - NACTENA DATA JSOU V TMP0 reg.
MOVF TMP0,W
MOVWF TEMP_LSB
CALL A0_CTI_Z_C ;CTENI DAT Z CIDLA - NACTENA DATA JSOU V TMP0 reg.
MOVF TMP0,W
MOVWF TEMP_MSB
;movlw b’10101000’ ; povolena všechna přerušení a od přetečení TMR0
;movwf INTCON
RETURN
;******************************************************
; Ovladaci ROUTINE pro cidlo DS18B20 a DS18S20
; Casovani je pro pouziti krystalu 4MHz
; Casova smycka je 10us, 25us, 60us, 100us, 160us, 490us
; Cidlo je napajeno pres Ucc pin
;…
;PRSENTACNI CAST;
A0_RESET_C
BANKSEL TRISC ;BANKA1
BCF ds ;PIN ds JAKO VYSTUP
BANKSEL PORTC ;BANKA0
BSF ds ;LOG.1 NA TCK
BCF ds ;LOG.0 NA TCK
CALL BR_490us ;CEKEJ CCA 490us
BANKSEL TRISC ;BANKA1
BSF ds ;PIN ds JAKO VSTUP
BANKSEL PORTC ;BANKA0
CALL BR_100us ;CEKEJ CCA 100us
chyba
BTFSC ds ;TEST PRESENTACNIHO PULSU OD CIDLA
goto A0_RESET_C; call chyba
CALL BR_490us ;CEKEJ CCA 490us
RETURN
;------------------------------------------------------
;TEST KOMUNIKACE (z cidla musi byt nactena hodnota +85st.C. (0550h));
;------------------------------------------------------
;VYSLANI 8BITU DO CIDLA (DATA NEBO PRIKAZ)
;ODESILANA DATA (1 BAJT) MUSI BYT V W REGISTRU
A0_WR_DO_C
MOVWF TMP0
BANKSEL TRISC ;BANKA1
BCF ds ;PIN ds JAKO VYSTUP
BANKSEL PORTC ;BANKA0
BSF ds ;LOG.1 NA TCK
MOVLW 0X08 ;POCET BITU DO CIDLA (8)
MOVWF TMP1
A0_ZAPISS
BTFSS TMP0,0 ;TEST BITU 0 REG. TMP0
GOTO A0_ZAPIS0
GOTO A0_ZAPIS1
;-------------------------------
A0_ZAPIS0 ;TAKTO ZAPISUJE LOG.0
BSF ds ;LOG.1 NA TCK
BCF ds ;LOG.0 NA TCK
CALL BR_100us ;BRZDA 100us
BSF ds ;LOG.1 NA TCK
GOTO A0_POSUNN
;-------------------------------
A0_ZAPIS1 ;TAKTO ZAPISUJE LOG.1
BSF ds ;LOG.1 NA TCK
BCF ds ;LOG.0 NA TCK
CALL BR_10us ;BRZDA 10us
BSF ds ;LOG.1 NA TCK
CALL BR_100us ;BRZDA 100us
GOTO A0_POSUNN
;------------------------------------------------------
A0_POSUNN
RRF TMP0,F ;POSUN OBSAHU REGISTRU O JEDEN BIT DOPRAVA
DECFSZ TMP1,F ;TEST POCTU ODESLANYCH BITU
GOTO A0_ZAPISS ;JESTE NEBYLO ODESLANO 8BITU
RETURN ;ODESLANO 8BITU - VYSTUP Z PODPROGRAMU
;------------------------------------------------------
; PRIJMUTI 8BITU Z CIDLA
; (DATA Z CIDLA JSOU V REG.TMP0)
A0_CTI_Z_C
BCF STATUS,RP0 ;BANKA0
MOVLW 0X08 ;POCET BITU PRO PRIKAZ (8)
MOVWF TMP1
CLRF TMP0
A0_CTI_Z_C1
bcf STATUS,C
RRF TMP0,F
MOVLW 0X03 ;POMOCNE ZBRZDENI
MOVWF TMP2
BSF ds
BANKSEL TRISC ;BANKA1
BCF ds ;PIN ds JAKO VYSTUP
BANKSEL PORTC ;BANKA0
BSF ds ;LOG.1 NA TCK - PRIPRAVA NA START CTENI
BCF ds ;LOG.0 NA TCK - START CTECIHO CASOVAHO USEKU
nop
;-------------------------------
BSF STATUS,RP0 ;BANKA1
BSF ds ;PIN RA0 JAKO VSTUP
BCF STATUS,RP0 ;BANKA0
DECFSZ TMP2,F ;DOBRZDENI NA 13us
GOTO $-1
BTFSS ds ;TEST UROVNE SBERNICE - VYSLANI BITU Z CIDLA
GOTO A0_CTI_0 ;CIDLO POSLALO LOG.0
GOTO A0_CTI_1 ;CIDLO POSLALO LOG.1
;-------------------------------
A0_CTI_0
BCF TMP0,7 ;NASTAV BIT7 REG.TMP0 DO LOG.0
CALL BR_60us ;BRZDA 60us
DECFSZ TMP1,F ;TEST POCTU ODESLANYCH BITU
GOTO A0_CTI_Z_C1 ;JESTE NEBYLO ODESLANO/PRIJMUTO 8BITU
RETURN ;ODESLANO 8BITU - VYSTUP Z PODPROGRAMU
;-------------------------------
A0_CTI_1
BSF TMP0,7 ;NASTAV BIT7 REG.TMP0 DO LOG.0
CALL BR_60us ;BRZDA 60us
DECFSZ TMP1,F ;TEST POCTU ODESLANYCH BITU
GOTO A0_CTI_Z_C1 ;JESTE NEBYLO ODESLANO/PRIJMUTO 8BITU
RETURN ;ODESLANO 8BITU - VYSTUP Z PODPROGRAMU
;
[/code]
a pouzivam pro zapis do EEPROM
[code]TEST_WRITE_EEPROM
banksel EEADR
movlw 0x02
movwf EEADR
movlw 0xAA
movwf EEDATA
banksel 0x00
call WRITE_EEPROM
banksel EEADR
movlw 0x01
movwf EEADR
movlw 0xA0
movwf EEDATA
banksel 0x00
call WRITE_EEPROM
return
WRITE_EEPROM
banksel PIR1
bcf PIR1,EEIF
banksel EECON1
bcf EECON1,EEPGD
bsf EECON1,WREN
bcF INTCON,GIE
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
bsf INTCON,GIE
btfsc EECON1,WR
goto $-1
bcf EECON1,EEIF
bcf EECON1,WREN
banksel 0x00
return
[/code]