logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Timer na pcf8583 proszę o podpowiedz

lanza1 09 Gru 2010 14:24 867 0
REKLAMA
  • #1 8846043
    lanza1
    Poziom 11  
    Witam wszystkich forumowiczów ;)

    Czy można zaprogramować procesor at89c2051 razem z pcf 8583 aby zliczał czas do 60s od momentu wciśnięcia przycisku, a następnie, gdy pojawi się stan wysoki na trzech pinach w różnym czasie ,pokazał w sekundach w ten czas i zapamiętał ?

    P3.0- czas ...s p3.1-czas....s pin3.2-czas...s

    męczę się z tym od kilku dni i jakoś mi nie wychodzi. Po podaniu stanu wysokiego na pin3.2 pokazuje na wyświetlaczu czas w momencie wciśnięcia ,ale gdy ten stan wysoki trwa to przeskakuje dalej,a chodzi aby zapamiętał , pokazał, ale licznik zliczal dalej dla innych pinów.

    oto przykład nie pełny dla jednego pinu
    .Config Lcd = 16 * 2
    Cls
    Cursor Off
    Deflcdchar 1 , 14 , 17 , 17 , 14 , 32 , 32 , 32 , 32
    Dim S As Byte ,
    Dim M As Byte
    Dim H As Byte
    Dim Czas As Byte
    Dim Odczyt(2) As Byte
    'deklaracja dwóch zmiennych typu byte do których będą zapisywane dane z termometru
    Dim T As Integer , Przecinek As Integer
    't jako setki, dziesiątki i jedności temperatury wynikowej
    'natomiast przecinek jako część ulamkowa odczytanej temperatury
    Dim Tspr As Integer
    'zmienna pomocnicza, od niej zależy czy wyświetlacz będzie wskazywal minus przed temperaturą
    Declare Sub Gettime
    Config Sda = P3.5
    Config Scl = P3.7
    Config 1wire = P3.3 'zależy gdzie podpięty jest termometr
    Set P3.2


    Do
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Odczyt(1) = 1wread(2)
    T = Makeint(odczyt(1) , Odczyt(2))
    Tspr = T
    T = Abs(t)
    T = T * 10 : T = T / 16
    Przecinek = T Mod 10
    T = T / 10
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 1000

    I2cstart
    'start transmisji
    I2cwbyte 162
    'zaadresowanie układu PCF8583
    I2cwbyte 1
    'rozpoczęcie odczytu od drugiego
    'rejestru (sekund)
    I2cstart
    I2cwbyte 163
    'powtórna inicjalizacja
    'magistrali i układu PCF8583
    I2crbyte S , Ack
    I2crbyte M , Ack
    I2crbyte H , Nack
    I2cstop

    Call Gettime
    Loop

    Sub Gettime
    If P3.2 = 0 Then

    Czas = Makebcd(m)
    End If

    Home
    Lcd "Timer:" ; Bcd(m) ; ":" ; Bcd(s) ;
    Locate 2 , 1
    Lcd "T=" ; T ; "," ; Przecinek ; Chr(1) ; "C" ; "-" ; Czas

    Home

    End Sub
  • REKLAMA
REKLAMA