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
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