Tak jsem si to upravil ponechávám tam emulaci usartu bude stačit změna GPIO na PORTB? nebo jak to mám upravit ?přikládám upravený zdroják díky
[code];**************************************************************************
; PIC12F629 + DS18B20 (C)Pandatron.cz, 2008
;--------------------------------------------------------------------------
;
; Processor : PIC12F629
; Clock : INTOSC (4MHz)
;
;**************************************************************************
LIST P=16F628, R=DEC
INCLUDE<P16F628.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
UARTREG equ 0x20 ; odesilani dat do PC
UARTCNT equ 0x21
UARTROT equ 0x22
PAUS1 equ 0x23 ; 10s pauza
PAUS2 equ 0x24
PAUS3 equ 0x25
DSDL1 equ 0x26 ; komunikace s DS18B20
DSREG1 equ 0x27
DSREG2 equ 0x28
TEMPL equ 0x29
TEMPH equ 0x2A
TEMPNM equ 0x2B ; ???, °C
TEMPDP equ 0x2C ; ,? °C
#define UART PORTB,0 ; UART pin
#define DSPIN PORTB,2 ; DS18B20 pin
D550US equ 200 ; 550us
D90US equ 25 ; 90us
D1US equ 1 ; 3us
SPEED equ 34 ; SPEED - Baud
; 145 - 2400
; 71 - 4800
; 34 - 9600
; 21 - 14400
; 15 - 19200
; 5 - 38400
; ========================================================================
; Start procesoru
;
org 0x00
goto INIT
INIT MOVLW 0x7 ; komparator off
MOVWF CMCON
GOTO START
START CALL DSSTART ; start prevodu teploty v cidlu
CALL PAUSE ; 10s
CALL DSREAD ; vyčtení teploty z cidla
CALL TMPCNV ; prevod binarni teploty na hodnotu
CALL TEMPSND ; odeslani teploty do PC
GOTO START
; ========================================================================
; DS18B20 rutiny
;
DSSTART CALL DSPINL ; start prevodu teploty
MOVLW D550US ; reset pulse
CALL DSDEL
CALL DSPINH
MOVLW D90US
CALL DSDEL
BTFSC DSPIN
RETURN ; bez odpovedi - konec
MOVLW D550US
CALL DSDEL
MOVLW 0xCC
CALL DSSEND
MOVLW 0x44
CALL DSSEND
RETURN
;---------------------
DSREAD CLRF TEMPL ; vycteni teploty z cidla
CLRF TEMPH
CALL DSPINL
MOVLW D550US ; reset pulse
CALL DSDEL
CALL DSPINH
MOVLW D90US
CALL DSDEL
BTFSC DSPIN
RETURN ; bez odpovedi - konec
MOVLW D550US
CALL DSDEL
MOVLW 0xCC
CALL DSSEND
MOVLW 0xBE
CALL DSSEND
CALL DSREC
MOVWF TEMPL
CALL DSREC
MOVWF TEMPH
RETURN
;---------------------
DSPINL BSF STATUS,RP0 ; pin DSPIN do L
BCF DSPIN
BCF STATUS,RP0
BCF DSPIN
RETURN
;---------------------
DSPINH BSF STATUS,RP0 ; pin DSPIN do H (pull-up)
BSF DSPIN
BCF STATUS,RP0
RETURN
;---------------------
DSDEL MOVWF DSDL1 ; prodleva pro komunikaci
DECFSZ DSDL1,1
GOTO $-1
RETURN
;---------------------
DSSEND MOVWF DSREG1 ; odeslani jednoho bytu z W do DS18B20
MOVLW 8
MOVWF DSREG2
DSSND1 CALL DSPINL
BTFSC DSREG1,0
CALL DSPINH
MOVLW D90US
CALL DSDEL
CALL DSPINH
RRF DSREG1,1
DECFSZ DSREG2,1
GOTO DSSND1
MOVLW D90US
CALL DSDEL
RETURN
;---------------------
DSREC CLRF DSREG1 ; vycteni jednoho bytu z DS18B20 do W
MOVLW 8
MOVWF DSREG2
DSREC1 RRF DSREG1,1
CALL DSPINL
CALL DSPINH
MOVLW D1US
CALL DSDEL
BCF DSREG1,7
BTFSC DSPIN
BSF DSREG1,7
MOVLW D90US
CALL DSDEL
DECFSZ DSREG2,1
GOTO DSREC1
MOVLW D90US
CALL DSDEL
MOVF DSREG1,0
RETURN
; ========================================================================
; Prevod binarni hodnoty ziskane z cidla na velikost teploty
TMPCNV CLRF TEMPNM
CLRF TEMPDP
BTFSS TEMPH,7
GOTO $+5
COMF TEMPH,1
COMF TEMPL,1
MOVLW 200
MOVWF TEMPNM
MOVF TEMPDP,0
BTFSC TEMPL,1
ADDLW 1
BTFSC TEMPL,2
ADDLW 2
BTFSC TEMPL,3
ADDLW 5
MOVWF TEMPDP
MOVF TEMPNM,0
BTFSC TEMPL,4
ADDLW 1
BTFSC TEMPL,5
ADDLW 2
BTFSC TEMPL,6
ADDLW 4
BTFSC TEMPL,7
ADDLW 8
BTFSC TEMPH,0
ADDLW 16
BTFSC TEMPH,1
ADDLW 32
BTFSC TEMPH,2
ADDLW 64
MOVWF TEMPNM
RETURN
; ========================================================================
; Odeslani jednoho bytu z W do UARTU
;
USEND MOVWF UARTREG
BSF STATUS,RP0
BCF UART
BCF STATUS,RP0
BSF UART
CALL UARTDEL
NOP
NOP
NOP
MOVLW 8
MOVWF UARTROT
BTFSS UARTREG,0
GOTO $+3
BCF UART
GOTO $+3
BSF UART
NOP
CALL UARTDEL
RRF UARTREG,1
DECFSZ UARTROT,1
GOTO $-9
BCF UART
CALL UARTDEL
BSF STATUS,RP0
BSF UART
BCF STATUS,RP0
RETURN
UARTDEL MOVLW SPEED
MOVWF UARTCNT
DECFSZ UARTCNT,1
GOTO $-1
RETURN
; ========================================================================
; Odeslani textu a teploty do PC
;
TEMPSND MOVLW ‘T’ ; T
CALL USEND
MOVLW ‘e’ ; e
CALL USEND
MOVLW ‘p’ ; p
CALL USEND
MOVLW ‘l’ ; l
CALL USEND
MOVLW ‘o’ ; o
CALL USEND
MOVLW ‘t’ ; t
CALL USEND
MOVLW ‘a’ ; a
CALL USEND
MOVLW ‘:’ ; :
CALL USEND
MOVLW ’ ’ ;
CALL USEND
MOVLW 200
SUBWF TEMPNM,1
BTFSS STATUS,C
GOTO $+4
MOVLW '-' ; -
CALL USEND
GOTO $+2
ADDWF TEMPNM,1
MOVLW 100
SUBWF TEMPNM,1
BTFSS STATUS,C
GOTO $+4
MOVLW '1' ; 100°C
CALL USEND
GOTO $+2
ADDWF TEMPNM,1
CLRF TEMPH
MOVLW 10
SUBWF TEMPNM,1
BTFSS STATUS,C
GOTO $+3
INCF TEMPH,1
GOTO $-4
ADDWF TEMPNM,1
MOVF TEMPH,0
ADDLW 0x30
CALL USEND ; 10°C
CLRF TEMPH
MOVLW 1
SUBWF TEMPNM,1
BTFSS STATUS,C
GOTO $+3
INCF TEMPH,1
GOTO $-4
ADDWF TEMPNM,1
MOVF TEMPH,0
ADDLW 0x30
CALL USEND ; 1°C
MOVLW ',' ; ,
CALL USEND
CLRF TEMPH
MOVLW 1
SUBWF TEMPDP,1
BTFSS STATUS,C
GOTO $+3
INCF TEMPH,1
GOTO $-4
ADDWF TEMPDP,1
MOVF TEMPH,0
ADDLW 0x30
CALL USEND ; 0,1°C
MOVLW '°' ; °
CALL USEND
MOVLW 'C' ; C
CALL USEND
MOVLW 0x0A
CALL USEND ; Enter
MOVLW 0x0D
CALL USEND
RETURN
; ========================================================================
; Prodleva cca. 10s
; ------------------------------------------------------------------------
PAUSE MOVLW 50
MOVWF PAUS3
CLRF PAUS2
CLRF PAUS1
DECFSZ PAUS1,1
GOTO $-1
DECFSZ PAUS2,1
GOTO $-3
DECFSZ PAUS3,1
GOTO $-5
RETURN
END
[/code]