f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - Lekcja 6

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
Lekcja 6
Autor Wiadomość
matciok 

Dołączył: 11 Wrz 2011
Posty: 6
Skąd: Siedlce
Wysłany: Wto Wrz 13, 2011 7:35 pm   Lekcja 6

Witam

mam pytanie co do 6 części kursu - w jej ostatnim etapie tworzymy licznik sekund.
Moją uwagę zwrócił fakt którego nie mogę zrozumieć w żaden sposób
Kod:
If Czekaj <> 0 Then Decr Czekaj
'zmniejszanie licznika będzie się odbywało co 4 przepełnienia licznika

Dlaczego zmniejszanie licznika (chodzi tu zapewne o zmienną czekaj) ma się odbywać co 4 przepełnienia timera? Zgodnie z poprzednią lekcją timer po wykryciu przepełnienia wykonuje przerwanie a kod jaki jest tak umieszczony jest wykonywany każdorazowo. Więc moje pytanie do autora: coś jest nie tak czy tylko mi się tak wydaje? Inną rzeczą jaka mnie ciekawi dlaczego to zmiejszanie miałoby się odbywać co 4 cykle a nie każdorazowo?



ja zrobiłem to "po swojemu" - timer ustawiłem na prescale = 256

Kod:

Do

Incr Sekundy

Czekaj = 244


Wyswietl Sekundy , 4

Do

Loop Until Czekaj = 0

Loop

End

przy czym w moim kodzie nie ma możliwości wyświetlenia części dziesiętnych . . .

zmienilem też nico procedurę wyświetlania cyfr na wyświetlaczu:

Kod:

Sub Wyswietl(byval Liczba As Word , Byval Kropka As Word)

X = 4
Local K As Word

For X = 4 To 1 Step -1
   K = Liczba Mod 10
   Tab(x) = Lookup(k , Liczby)
   Liczba = Liczba / 10

Next X

Tab(kropka).0 = 0

End Sub
_________________
----
pozdrawiam
 
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Wrz 14, 2011 6:15 pm   

Witam, otóż fragment wyjęty z całości rzeczywiście wygląda nielogicznie ale spójrzmy na cały program:
Kod:

$regfile = "m644pdef.dat"
'$regfile = "m32def.dat"
'$regfile = "m16def.dat"

$crystal = 16000000

$hwstack = 32                                               
$swstack = 8                                               
$framesize = 30                                             

Declare Sub Led_dec(byval Liczba As Word , Byval Kropka As Byte)

Config Portb = Output
Dataport Alias Portb

Config Pind.3 = Output
Led1 Alias Portd.3
Config Pind.4 = Output
Led2 Alias Portd.4
Config Pind.5 = Output
Led3 Alias Portd.5
Config Pind.6 = Output
Led4 Alias Portd.6

Config Timer0 = Timer , Prescale = 8
Enable Interrupts
Enable Timer0
On Timer0 Led
Dim Akt_led As Byte
Akt_led = 1
Dim Dane_led(4) As Byte

Dim Licznik As Word
Dim Czekaj As Byte
Licznik = 0
Do
Led_dec Licznik , 3
'wartość dziesiątych części sekundy po przecinku
Incr Licznik
If Licznik > 9999 Then Licznik = 0
Czekaj = 195
'16 000 000 / 8 (preskaler) = 2 000 000
'2 000 000 / 256 (impulsy do przepełnienia) = 7 812,5 przepełnień na sek.
'7812.5 / 4 (licznik zmienjszymy co 4 przepełnienia) = 1 953,125 zmniejszeń licznika na sekundę
'1 953,125 / 10 (zliczamy dziesiąte części sekundy) =~ 195
Do
Loop Until Czekaj = 0
'pętla czekająca na wyzerowanie zmiennej Czekaj
Loop

End

Sub Led_dec(byval Liczba As Word , Byval Kropka As Byte)
Local Reszta As Word
Reszta = Liczba Mod 10
Dane_led(4) = Lookup(reszta , Led_cyfry)
Liczba = Liczba / 10
Reszta = Liczba Mod 10
Dane_led(3) = Lookup(reszta , Led_cyfry)
Liczba = Liczba / 10
Reszta = Liczba Mod 10
Dane_led(2) = Lookup(reszta , Led_cyfry)
Liczba = Liczba / 10
Reszta = Liczba Mod 10
Dane_led(1) = Lookup(reszta , Led_cyfry)
If Kropka <> 0 Then Dane_led(kropka).0 = 0
End Sub

Led:
Set Led4
Set Led3
Set Led2
Set Led1
Dataport = Dane_led(akt_led)
Select Case Akt_led
Case 1 : Reset Led1
Case 2 : Reset Led2
Case 3 : Reset Led3
Case 4 : Reset Led4
End Select
Incr Akt_led
If Akt_led > 4 Then
Akt_led = 1
If Czekaj <> 0 Then Decr Czekaj
'zmniejszanie licznika będzie się odbywało co 4 przepełnienia licznika
End If
Return

Led_cyfry:
Data &B10000001 , &B11110011 , &B01001001 , &B01100001 , &B00110011       '0-4
Data &B00100101 , &B00000101 , &B11110001 , &B00000001 , &B00100001       '5-9



Otóż przytoczony fragment:
Kod:

If Czekaj <> 0 Then Decr Czekaj
'zmniejszanie licznika będzie się odbywało co 4 przepełnienia licznika

znajduje się w instrukcji warunkowej:
Kod:

Incr Akt_led
If Akt_led > 4 Then
Akt_led = 1
If Czekaj <> 0 Then Decr Czekaj
'zmniejszanie licznika będzie się odbywało co 4 przepełnienia licznika
End If

która ma za zadanie przejście spowrotem do 1 wyświetlacza po odświeżeniu 4-tego (zmiana zawartości zmiennej Akt_led) - jak zatem widać taka zmiana następuje co 4 przepełnienia timera i także co 4 przepełnienia będzie wykonana wspomniana instrukcja zmniejszania zmiennej Czekaj.

Poza tym cieszę się, że nie poprzestałeś na moich kodach i modyfikujesz je po swojemu.

Pozdrawiam
Piotr Rzeszut
_________________
http://www.piotr94.net21.pl/
 
     
matciok 

Dołączył: 11 Wrz 2011
Posty: 6
Skąd: Siedlce
Wysłany: Sro Wrz 14, 2011 6:44 pm   

dzięki za pomoc, rzeczywiście niezauważyłem tego gdzie if się kończy ;) teraz jest to logiczne ;-)
_________________
----
pozdrawiam
 
 
     
Piotr04 

Wiek: 33
Dołączył: 01 Cze 2016
Posty: 1
Skąd: Oława
Wysłany: Sro Cze 01, 2016 11:22 am   

Głupie przeoczenie i cały kod nie działa :(
_________________
Jeśli szukasz Oświetlenie awaryjne - to zapraszamy
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group