 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 04 10, 12:27. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » Ar kas bandet prie PIC prijungti DS1820 termometra
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
Re: Ar kas bandet prie PIC prijungti DS1820 termometra |
Parašytas: 2005 05 18, 17:50 |
|
|
|
automatikas rašo: |
na turiu keleta tokiu termometru ir galvoju reikia juos pasijungti, radau internete pora pic rutinu, bet jos neveikia, tai gal kas gali pasidalinti idejomis? |
Kas gi tau neveikia. Atsmenu kai reikėjo ant ryt kursinį priduoti, tai per porą valandų užkūriau. Matyt nelabai reikia  |
|
|
|
|
 |
 |
 |
Ar kas bandet prie PIC prijungti DS1820 termometra |
Parašytas: 2005 05 18, 23:14 |
|
|
|
automatikas rašo: |
imesk pavizdziu savo kodo jei negala  |
Metu. Turėtų veikti. Čia šiap dariau tempratūros nuskaityma is DS1820 su PIC16F84, duomenu ismetimas i softwarini uarta. Kompo puseje duomenis priimdavo LabView. Atsimenu kai jau viskas buvo padaryta, PICas numire. Kito neturejau ir teko 12 nakties perdarineti ant AT90S1200, kad tureciau ryte ka pademonstruoti destytojui
Kodas: |
;**********************************************************************
; This file is a basic code template for assembly code generation *
; on the PICmicro PIC16F84. This file contains the basic code *
; building blocks to build upon. *
; *
; If interrupts are not used all code presented between the ORG *
; 0x004 directive and the label main can be removed. In addition *
; the variable assignments for 'w_temp' and 'status_temp' can *
; be removed. *
; *
; Refer to the MPASM User's Guide for additional information on *
; features of the assembler (Document DS33014). *
; *
; Refer to the respective PICmicro data sheet for additional *
; information on the instruction set. *
; *
; Template file assembled with MPLAB V3.99.18 and MPASM V2.15.06. *
; *
;**********************************************************************
; *
; Filename: xxx.asm *
; Date: *
; File Version: *
; *
; Author: *
; Company: *
; *
; *
;**********************************************************************
; *
; Files required: *
; *
; *
; *
;**********************************************************************
; *
; Notes: naudosime 4MHz kvarca, 4800bps greiti. Bito trukme - 208us. *
; *
; *
; *
; *
;**********************************************************************
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
CNTMSEC EQU 0x0C
MSGPTR EQU 0x0D
CNTSEC EQU 0x0E
TEMP EQU 0x0F
TXREG EQU 0x10
BITS EQU 0x11
RXREG EQU 0x12
TENS EQU 0X13
VALUE EQU 0x14
SIGN EQU 0x15
;**********************************************************************
ORG 0x000 ; processor reset vector
goto MAIN ; go to beginning of program
ORG 0x004 ; interrupt vector location
; movwf w_temp ; save off current W register contents
; movf STATUS,w ; move status register into W register
; movwf status_temp ; save off contents of STATUS register
; isr code can go here or be located as a call subroutine elsewhere
; movf status_temp,w ; retrieve copy of STATUS register
; movwf STATUS ; restore pre-isr STATUS register contents
; swapf w_temp,f
; swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
;*********************Ivairios paprogrames*****************************
;*** Program reads temperature ***
;*** with a DS1820 thermometer ***
;*** and puts out PC COM port. ***
;*** delay for N (in W) msec ***
NMSEC MOVWF CNTMSEC ;delay for N (in W) milliseconds
MSECLOOP MOVLW 0xF8 ;(248) allow for 8 micro overhead
CALL MICRO4 ;248*4+2=994 microsec here
NOP ;make up additional 6...
NOP ;microseconds in loop
DECFSZ CNTMSEC,f ;decrement count, skip when zero
GOTO MSECLOOP
RETURN
NOP ;*** 1 millisec delay routine ***
MSEC MOVLW 0xF9 ;allow for 4 microsec overhead
NOP ;( 2 accounted for in call )
MICRO4 ADDLW 0xFF ;subtract 1 from 'W'
BTFSS STATUS,Z ;skip when you reach zero
GOTO MICRO4 ;more loops
RETURN
;*** Delay N seconds ***
NSEC MOVWF CNTSEC ;number of seconds delay
QUARTER MOVLW 0x04 ;4 x 250 msec = 1 second
MOVWF TEMP ;temp will count quarters
SECLOOP MOVLW 0xFA ;250 decimal
CALL NMSEC ;delay for quarter of a second
DECFSZ TEMP,f ;more 1/4 seconds?
GOTO SECLOOP ;yes, loop
DECFSZ CNTSEC,f ;more seconds to delay?
GOTO QUARTER ;yes, reset 1/4 sec cnt
RETURN ;finished
;*** Character in W out RS232 ***
OUTCH MOVWF TXREG ;put W into transmit register
MOVLW 0x08 ;eight bits of data
MOVWF BITS ;a counter for bits
BSF PORTA,.3 ;start bit (flipped remember) RA2
TXLOOP MOVLW 0x31 ;49 decimal, delay time
CALL MICRO4 ;wait 49 x 4 = 196 microseconds
RRF TXREG,f ;roll rightmost bit into carry
BTFSC STATUS,C ;if carry 0, want to set bit (low)
GOTO CLRBIT ;else clear bit, (a high)
BSF PORTA,.3 ;+5V on pin 1 ( RA2 )
GOTO TESTDONE ;are we finished?
CLRBIT BCF PORTA,.3 ;0 Volts on pin 1 ( RA2 )
NOP ;to make both options 12 microsec
TESTDONE DECFSZ BITS,f ;one less data bit, skip when zero
GOTO TXLOOP ;more bits left, delay for this one
MOVLW 0x34 ;full 208 microsec delay this time
CALL MICRO4 ;delay for last data bit
BCF PORTA,.3 ;0V, ( a high ) for stop bits
MOVLW 0x68 ;decimal 104 delay, 2 stop bits
CALL MICRO4
RETURN
;*** PIC sets I/O line high ***
M1HI BSF STATUS,RP0 ;goto to page 1
BSF TRISB,.1 ;RB1
; BSF TRISA,3 ;make RA3 an input
BCF STATUS,RP0 ;back to page 0
RETURN ;master 1 wire line hi
;*** Master sets I/O line low ***
M1LO BCF PORTB,.1 ;Port B bit 1
;M1LO BCF PORTA,3 ;Port A bit 3 low
BSF STATUS,RP0 ;goto to page 1
BCF TRISB,.1
; BCF TRISA,3 ;make RA3 an output
BCF STATUS,RP0 ;back to page 0
RETURN ;master 1 wire line low
;*** PIC sends low bit ***
SLOTLO CALL M1LO ;begin by taking RA3 low
GOTO DLY80 ;and remain low
SLOTHI CALL M1LO ;a quick low on RA3
CALL M1HI ;return high right away
DLY80 MOVLW 0x14 ;20 x 4 = 80 microseconds
CALL MICRO4 ;delay
CALL M1HI
RETURN
;*** PIC outputs byte in W ***
TXBYTE1 MOVWF TXREG ;put W into transmit register
MOVLW 0x08 ;eight bits of data
MOVWF BITS ;a counter for bits
TX1LOOP RRF TXREG,f ;roll rightmost bit into carry
BTFSC STATUS,C ;if carry 0 want low bit output
GOTO HIBIT1 ;else send a 1
CALL SLOTLO ;output a low bit ( RA3 )
GOTO DONE1 ;are we finished?
HIBIT1 CALL SLOTHI ;output a high bit ( RA3 )
DONE1 DECFSZ BITS,f ;1 less data bit, skip when 0
GOTO TX1LOOP ;more bits left
RETURN
;*** PIC gets byte from 1820 ***
RXBYTE1 MOVLW 0x08 ;eight bits of data
MOVWF BITS ;a counter for bits
RX1LOOP CALL M1LO ;a quick low pulse
CALL M1HI ;and back high
NOP ;waiting for about ...
NOP ;14 microseconds ...
NOP ;to elapse ...
NOP ;before reading RA3
NOP ;
MOVF PORTB,W
; MOVF PORTA,W ;get port into W
ANDLW 0x01
; ANDLW 0x08 ;W > 0 if RA3 high
ADDLW 0xFF ;C set if W > 0
RRF RXREG,f ;roll carry into RXREG MSB
MOVLW 0x14 ;delay 80 microseconds
CALL MICRO4
DECFSZ BITS,f ;1 less data bit, skip when zero
GOTO RX1LOOP ;more bits left
MOVF RXREG,W ;routine return value in W
RETURN
;*** Send a reset pulse ***
RESET CALL M1LO ;make I/O line low
MOVLW 0x96 ;150 x 4 = 600 microseconds
CALL MICRO4 ;delay
CALL M1HI ;and back high
MOVLW 0x64 ;100 x 4 = 400 microseconds
CALL MICRO4 ;delay
RETURN
;*** Output binary as decimal ***
BIN2DEC MOVWF TEMP ;put binary number in reg TEMP
CLRF TENS ;clear the tens register
MOVLW 0x64 ;decimal 100
SUBWF TEMP,W ;greater than 100?
BTFSS STATUS,C ;W >= 0 send a '1' out
GOTO TENSLOOP ;no, forget the '1'
MOVWF TEMP ;change TEMP
MOVLW 0x31 ;'1' in 'W'
CALL OUTCH ;send out RS232
TENSLOOP MOVLW 0x0A ;decimal 10
SUBWF TEMP,W ;greater or equal to 10?
BTFSS STATUS,C ;yes, process tens
GOTO UNITS ;no, finish with 10's
MOVWF TEMP ;update TEMP
INCF TENS,f ;add 1 to tens digit
GOTO TENSLOOP ;try subtracting 10 again
UNITS MOVF TENS,W ;get tens digit into W
ADDLW 0x30 ;change to ascii
CALL OUTCH ;send 10's out RS232
MOVF TEMP,W ;get remainder
ADDLW 0x30 ;change to ascii
CALL OUTCH ;and ouput units character
RETURN
;*************Perduodame komandas DS18S20**********************
MEASURE CALL RESET
MOVLW 0xCC ;skip address
CALL TXBYTE1
MOVLW 0x44 ;start conversion
CALL TXBYTE1
MOVLW 0xFA ;delay 250 milliseconds
CALL NMSEC
MOVLW 0xFA ;and another 250 msec
CALL NMSEC
CALL RESET ;reset pulse
MOVLW 0xCC ;skip address
CALL TXBYTE1
MOVLW 0xBE ;read scratchpad memory
CALL TXBYTE1
;**********************Nuskaitinėjame DS18S20*******************
CALL RXBYTE1 ;read value byte from scratchpad
MOVWF VALUE ;transfer to value register
CALL RESET ;stop collecting data
RETURN
;***************************************************************
;*** The Main routine ***
MAIN MOVLW 0x00 ;all port bits to output
BSF STATUS,RP0
MOVWF TRISA ;on port A
MOVWF TRISB ;and port B
BCF STATUS,RP0
CLRF PORTA ;RA2 is 0 ( RS232 high )
MOVLW 0xff ;delay
CALL MICRO4 ;so no glitches interfere
MATUOK CALL MEASURE
MOVF VALUE,0 ;VALUE i W irasome
CALL OUTCH ;Issiunciame
;VEL MOVLW 0x21 ;this is offset of the message
; CALL OUTCH ;output '!'
MOVLW 0x2 ;2 sekundes laukiame
CALL NSEC
; GOTO VEL
GOTO MATUOK ;go into an endless loop
; CALL RXBYTE1 ;read sign byte from scratchpad
; MOVWF SIGN ;transfer to sign register
; CALL RESET ;stop collecting data
; MOVLW 0xFF ;compare sign to 0xFF
; SUBWF SIGN,W ;test for zero
; BTFSS STATUS,Z ;skip if it is zero (negative #)
; GOTO MAGBYTE ;don't output anything
; MOVLW 0x2D ;minus sign
; CALL OUTCH ;out RS232
; BSF STATUS,C ;bit 7 to be complimented
; RRF VALUE,W ;get high 7 bits
; MOVWF TEMP ;put in another register
; COMF TEMP,W ;take 2's compliment
; ADDLW 0x01
; GOTO DECOUT ;and send it out
;MAGBYTE BCF STATUS,C ;clear carry
; RRF VALUE,W ;high 7 bits into W
;DECOUT CALL BIN2DEC ;output in decimal
; MOVLW 0x2E ;a period
; CALL OUTCH ;output it RS232
; MOVLW 0x30 ;ASCII '0'
; BTFSC VALUE,0 ;skip if bit 0 is 0
; MOVLW 0x35 ;an ASCII '5'
; CALL OUTCH ;output fraction
; MOVLW 0x0D ;a carriage return
; CALL OUTCH ;output RS232
; MOVLW 0x0A ;a line feed
; CALL OUTCH
END ; directive 'end of program'
|
|
|
|
|
|
 |
 |
Ar kas bandet prie PIC prijungti DS1820 termometra |
Parašytas: 2005 05 18, 23:29 |
|
|
|
BLASTER rašo: |
Ir komentarus angliškai rašai ... |
Šiap tai rasau paprastai angliskai ir kintamuosius ir komentarus, globalizacija visgi O šiuo konkrečiu atveju tai pats beveik nieko nerasiau, gal gatava susiradau programa, gal funkcijas atskiras susiradau ir sau pritaikiau. Sakau, prisedau nieko neturedamas ir per porą valandų jau turėjau veikiantį daiktą. Jei būčiau viską nuo 0 , būčiau nespėjęs. Ašku kas tai yra PIC ir DS1820 žinojau. |
|
|
|
|
 |
 |
 |
Ar kas bandet prie PIC prijungti DS1820 termometra |
Parašytas: 2005 05 18, 23:31 |
|
|
|
Va dar imkit kodas for AT90S1200:
Kodas: |
.include "1200def.inc"
;*******************************Iejimai ir isejimai***********************************
.equ TxD =5 ;Siustuvas - PB5
.equ b =135 ;4800 bps @ 4MHz
.equ sb =1 ;Vienas STOP bitas
;*********************************Registrai*******************************************
.def laikinas =r16
.def skaitiklis =r17
.def priimtas_baitas =r18
.def siunciamas_baitas =r19
.def velinimas1 =r20
.def skaitiklis_baitu =r22
.def skaitiklis1 =r23
.def skaitiklis2 =r24
.def skaitiklis3 =r25
.def wire_baitas =r26
.def convert =r27
;*************************************************************************************
.equ wire_line =4 ; 1Wire linija - PD4
.equ convert_t =0x44 ; T-ros konversijos komanda
.equ read_scratchpad =0xBE ; Read scratchpad komanda.Nuskaitome DS18S20.Duomenys siunciami pradedant 0
; baito jauniausiu bitu.Jei nereikia visko, siuntima nutraukiame RESET komanda.
.equ skip_rom =0xCC ; Skip rom komanda.I sekancia komanda reaguos visi 1Wire irenginiai
;*************************************************************************************
;
.cseg
.org 0
rjmp RESET
reti ;Nenaudojamas isorinis pertraukimas
reti ;Nenaudojamas taimerio pertraukimas
reti ;Nenaudojamas komparatoriaus pertraukimas
RESET:
ldi laikinas,0 ;00001111
out WDTCR,laikinas ;WDR po 2048K ciklu 1.9sek. prie +5V
sbi ACSR,ACD ;Isjungiame komparatoriaus maitinima
ldi laikinas,0b11111111 ;PORTD - OUT
out DDRD,laikinas ;
ldi laikinas,0b00000000 ;
out PORTD, laikinas ; ;Ijungiame PULL-UP rezistorius ant iejimu,ISEJIMAI - "1"
ldi laikinas,0b00000001 ;PBO - OUT,KITI -IN
out DDRB,laikinas ;Visi PORTB - IN
ldi laikinas,0b11111110
out PORTB,laikinas ;Ijungiame PULL-UP rezistorius ant iejimu, ISEJIME - "0"
ldi skaitiklis_baitu, 0
ldi laikinas,0
sei ;Leisti pertraukimus
;*******************************PAGRINDINE PROGRAMA******************************
main:
rcall sekundes_velinimas
rcall WIRE_LINE_RESET
ldi wire_baitas,skip_rom
rcall WIRE_LINE_SIUNTIMAS
rcall VELINIMAS600us
ldi wire_baitas,convert_t
rcall WIRE_LINE_SIUNTIMAS
rcall VELINIMAS600us
rcall WIRE_LINE_RESET
ldi wire_baitas,skip_rom
rcall WIRE_LINE_SIUNTIMAS
rcall VELINIMAS600us
ldi wire_baitas,read_scratchpad
rcall WIRE_LINE_SIUNTIMAS
rcall VELINIMAS600us
rcall WIRE_LINE_NUSKAITYMAS
rcall WIRE_LINE_RESET
mov siunciamas_baitas,wire_baitas
lsr siunciamas_baitas
rcall putchar
rjmp main
;*********************************SIUNTIMAS******************************************
putchar: ldi skaitiklis,9+sb ; uzkrauname skaitikli (1 START + 8 DATA + sb)
com siunciamas_baitas ; invertuojame siunciama baita
sec ; nustatome carry(START bitas)
putchar0: brcc putchar1 ; Jei carry nustatytas
sbi PORTD,TxD
; cbi PORTD,TxD ; siunciame "0"
rjmp putchar2 ; jei nenustatytas
putchar1: cbi PORTD,TxD
; putchar1: sbi PORTD,TxD ; siunciame "1"
nop
putchar2: rcall UART_delay
rcall UART_delay
lsr siunciamas_baitas ; istumiame i carry duomenu bita
dec skaitiklis
brne putchar0 ; siunciame jei ne visi issiusti
ret ; jei visi issiusti, iseiname is paprogrames
;*******************************UART VELINIMAS********************************************
UART_delay: ldi laikinas,b
UART_delay1: dec laikinas
brne UART_delay1
ret
;******************************1-Wire RESET******************************
; 1. 600us palaiko 0
; 2. Laukia atsakymo
WIRE_LINE_RESET:
clt ;Isvalome T bita
rcall OUTMOD ;wire_line isejimas ir "1"
cbi PORTD,wire_line ;wire_line "0" .Norint , kad butu RESET, reikia palaikyti 500us.
rcall VELINIMAS600us ;Palaikome linijoje "0" 600us
rcall INMOD ;1 wire linija padarome iejimu ir isjungiame pull-up
;DS18S20 uzfiksuoja kylanti fronta, palaukia 15-60us ir palaiko "0" 60-240us
;60us prie 4MHz uzima 240 komandu
atsistatymas:
sbis PIND,wire_line
rjmp atsistatymas ;Laukiame kol ant linijos bus aukstas lygis.Auksta lygi turi padaryti pull-up
;rezistorius, jei linijos nelaiko ant "0" kontroleris ar DS18S20.
;Kontroleris laikyti "0"
;neturetu, nes ka tik tik buvo komanda INMOD, o DS18S20 laukia 15-60us ir tada
;daro "0"
ldi skaitiklis1,49 ;Sulauke "1" , laukiame DS18S20 atsakymo (15-60us laikotarpyje turetu atsakyti)
laukiu_atsakymo:
dec skaitiklis1 ;Pradedu skaiciuoti laika skirta atsakymui
breq NEATSILIEPIA ;Jei laikas baigesi ir niekas neatsiliepia,pereinu i paprograme "NEATSILIEPIA"
sbic PIND,wire_line ;Jei linijoje "0", reiskia atsilepe.Baigiame skaiciuoti atsiliepimui skirta laika
rjmp laukiu_atsakymo ;Jei laikas nesibaige ir neatsiliepe, laukiu toliau
rcall VELINIMAS600us ;Jei atsiliepe, pdarome pauze, pries duodami kita komanda
set
ret ;Iseiname is paprogrames
;************************************************************************
;*****************************1-WIRE LINE IN/OUT*************************
OUTMOD:
sbi PORTD,wire_line
sbi DDRD,wire_line ;1 wire linija padarome isejimu ir "1" iejime
ret ;4 ciklus uzima
INMOD:
cbi PORTD,wire_line
cbi DDRD,wire_line ;1 wire linija padarome iejimu ir isjungiame pull-up
ret ;4 ciklus uzima
;************************************************************************
;*****************************600us velinimas****************************
VELINIMAS600us:
wdr
ldi skaitiklis1,200 ;Uzkrauname i registra 200
ldi skaitiklis2,4 ;Uzkrauname i registra 10
ciklas1_600us:
dec skaitiklis1 ;Sumaziname pirma skaitikli 1
;dec komanda 1 ciklas
brne ciklas1_600us ;Jei ne nulis, vel maziname
;brne komanda 1 ciklas, jei lygu nuliui, 2 ciklai - jei nelygu nuliui
ldi skaitiklis1,200 ;Jei nulis, vel uzkrauname 200
dec skaitiklis2 ;Sumaziname antra skaitikli 1
brne ciklas1_600us ;Jei skaitiklis2 nelygu 0, vel maziname skaitiklis1
ret ;Jei skaitiklis2 lygu 0, laikas baigesi, iseiname is paprogrames
;ret komanda uzima 4 ciklus
;************************************************************************
;*****************Jei DS18S20 neatsiliepia i RESET komanda***************
NEATSILIEPIA:
; sei ;leisti pertraukimus
; ldi ISEJIMAI1,0b00000000
; ldi ISEJIMAI2,0b00000000
; ldi ISEJIMAI3,0b00000000
; rcall ISEJIMU_NUSTATYMAS
rjmp MAIN
;************************************************************************
;*********************1 Wire komandos siuntimas**************************
WIRE_LINE_SIUNTIMAS:
; cli ; Uzdrausti pertraukimus
rcall OUTMOD ;
ldi skaitiklis1,8 ; 8 bitus siunciame
next:
cbi PORTD,wire_line ; Start bitas
ldi skaitiklis2,3 ; Po start bito palaikome linijoje "0" pora mikrosekundziu
start_bit:
dec skaitiklis2
brne start_bit ; Jei dar neparaejo 2us, laukiame
lsr wire_baitas ; Istumiame i carry jauniausia komandos bita
brcs siusk_1 ; Jei carry bite "1", persokame
rjmp siusk_0 ; Jei carry bite "0"
siusk_1:
sbi PORTD,wire_line ; Jei siunciamas bitas "1", pdarome linijoje auksta lygi
siusk_0:
ldi skaitiklis2,120 ; Reikiama lygi reika palaikyti minimum 60us.Palaikysime 90
vel_80us:
dec skaitiklis2
brne vel_80us
sbi PORTD,wire_line ; Jei praejo 90us, vel i linija auksta lygi
; Pasiuntus bita reikia palaukti minimum 1us pries siunciant kita.Palauksime 2us
ldi skaitiklis2,3
vel_2us:
dec skaitiklis2
brne vel_2us
dec skaitiklis1 ; Sumaziname issiustu bitu skaitikli
brne next ; Jei dar ne visus issiunteme, siunciame sekanti
; sei
rcall OUTMOD
ret ; Jei visus isiunteme, iseiname is paprogrames
;************************************************************************
;***************************SEKUNDES VELINIMAS***************************
; Laukiame temperarturos konversijos pabaigos
sekundes_velinimas:
ldi skaitiklis1,255
ldi skaitiklis2,255
ldi skaitiklis3,64
maz1:
dec skaitiklis1
brne maz1
ldi skaitiklis1,255
dec skaitiklis2
brne maz1
ldi skaitiklis2,255
wdr
dec skaitiklis3
brne maz1
ret
;************************************************************************
;**********************1WIRE baito nuskaitymas*****************************
;Nuskaito DS18S20 siunciama baita.Nuskaites baita padeda ji i registra "wire_baitas"
WIRE_LINE_NUSKAITYMAS:
rcall OUTMOD
clc ;Isvalyti carry bita.I ji desime priimamus bitus
ldi skaitiklis1,8 ;Priimsime po 8 bitus
st_bit1:
cbi PORTD,wire_line ;Start bitas.READ TAIME SLOT pradzia ; 0us
ldi skaitiklis2,3
veli_2us1:
;Palaikome "0" 2us
dec skaitiklis2
brne veli_2us1
rcall INMOD ;Perjungiame i iejima; 2.75us
ldi skaitiklis2,10 ; 5.50us
veli_7us1:
dec skaitiklis2
brne veli_7us1
sbic PIND,wire_line ;Nuskaitome .Nuo READ TIME SLOT pradzios praejo 13us
sec ;Nustatome carry bita, jei linijoje "1"
ror wire_baitas ;carry bita istumiame i registro temperatura vyriausia bita
dec skaitiklis1 ;Sumaziname priimtu bitu skaitikli
breq ROM_baitas_nuskaitytas ;Jei priemiau visus bitus
clc ;Isvalome carry bita 14.25us
;READ TIME SLOT turi buti ne maziau kaip 60us.Padarome 80us
ldi skaitiklis2,87
vel_read_time_slot1:
dec skaitiklis2
brne vel_read_time_slot1
rcall OUTMOD ;Pasibaigus READ TIME SLOT , perjungiame i iejima 79.75us
ldi skaitiklis2,3
vel_atsistatymas1: ;Padarome 2us pauze
dec skaitiklis2
brne vel_atsistatymas1
rjmp st_bit1 ;Nuskaitome sekanti bita 2.25
ROM_baitas_nuskaitytas:
ldi skaitiklis1,30 ;
palaukiame:
dec skaitiklis1
brne palaukiame
ret
;*************************************************************************************
|
|
|
|
|
|
 |
 |
Ar kas bandet prie PIC prijungti DS1820 termometra |
Parašytas: 2005 05 25, 00:38 |
|
|
|
Labai idomus listingai...
Nezinau kaip jie veiks .
Taciau nieko nematau apie tavo temperaturoros konvertavima
i zmogiskus C...
Del to ir klausiu ,kaip tavo destytojas suprato tavo :ALE SAMPLE ?
Kiek ten tos C ? |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
 |
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
GTA 6 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|

|
 |