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

Jak dostosować licznik sekund dla AT89S8252 z kwarcem 16 MHz w Bascom?

Katowiczanin 22 Mar 2006 21:26 1717 2
REKLAMA
  • #1 2445721
    Katowiczanin
    Poziom 12  
    Posty: 86
    Pomógł: 3
    Ocena: 2
    Witam

    Znalazlem taki program dla procesora AT89S8252. Jest on napisany dla kwarcu 11 Mhz a ja mam 16 Mhz, jak wyliczyc wartosci dla mojego kwarcu ??

    byc moze sa w nim jakies bledy jakby ktos mial chwile czasu zeby zerknac to z gory wielkie dzieki :)

    Oto on:

    $crystal = 11059200
    '$default Xram
    $large
    Dim Cyfra(12) As Byte
    Dim Jedn_sekund As Byte
    Dim Tempo As Byte
    
    
    
    Config Timer0 = Timer , Gate = Internal , Mode = 1
    Th0 = &H4C                                                    ' 19508
    Tl0 = &H34                                                    ' 46080/(11.0592/12)= 50,00 mSec.
    Enable Timer0
    Enable Interrupts
    On Timer0 1s
    Start Timer0
    
    '-------------definiowanie cyfr-------------------
    
    Cyfra(0) = 20
    Cyfra(1) = 215
    Cyfra(2) = 76
    Cyfra(3) = 69
    Cyfra(4) = 135
    Cyfra(5) = 37
    Cyfra(6) = 36
    Cyfra(7) = 87
    Cyfra(8) = 4
    Cyfra(9) = 5
    '-------------------------------------------------
    Declare Sub Program_glowny
    
    Jedn_sekund = 0
    
    '-----------------program glowny-----------------
    
    Start Timer0
    Program_glowny
    End
    
    Sub Program_glowny
      Do
    Waitms 200
    P2.1 = 0
    P0 = Cyfra(jedn_sekund)
    Waitms 200
    P2.1 = 1
                    Goto 1s
      Loop
    End Sub
    '------------------------------------------------
    
    1s:
      Th0 = &H4C
      Tl0 = &H34
      Incr Tempo
      Program_glowny
      If Tempo = 20 Then                                          '20 x 50 mSecs = 1 Second
         Incr Jedn_sekund
         If Jedn_sekund > 9 Then
         Jedn_sekund = 0
         End If
         Tempo = 0
      End If
    Return

    Jak narazie na wyswietlaczu miga caly czas cyfra 0
  • REKLAMA
  • Pomocny post
    #2 2446297
    nadmiszcz
    Poziom 16  
    Posty: 126
    Pomógł: 15
    Ocena: 5
    nie wiem czy o to chodziło bo nie mam na czym uruchomić tego programu (tzn. mam Bascom ale nie mam zestawu '51), ale wg mnie dopiero ten program zadziała:

    $crystal = 16000000
    '$default Xram
    $large
    Dim Cyfra(12) As Byte
    Dim Jedn_sekund As Byte
    Dim Tempo As Byte



    Config Timer0 = Timer , Gate = Internal , Mode = 1
    Th0 = &Hd8 '
    Tl0 = &Hd7 ' =10025 cykli *133 (tempo) = 1333325 *12 = 15,999900 MHz
    Enable Timer0
    Enable Interrupts
    On Timer0 1s
    Start Timer0

    '-------------definiowanie cyfr-------------------

    Cyfra(0) = 20
    Cyfra(1) = 215
    Cyfra(2) = 76
    Cyfra(3) = 69
    Cyfra(4) = 135
    Cyfra(5) = 37
    Cyfra(6) = 36
    Cyfra(7) = 87
    Cyfra(8) = 4
    Cyfra(9) = 5
    '-------------------------------------------------
    Declare Sub Program_glowny

    Jedn_sekund = 0

    '-----------------program glowny-----------------

    Start Timer0
    Program_glowny
    End

    Sub Program_glowny
    Do
    Waitms 200
    P2.1 = 0
    P0 = Cyfra(jedn_sekund)
    Waitms 200
    P2.1 = 1
    ' Goto 1s
    Loop
    End Sub
    '------------------------------------------------

    1s:
    Th0 = &Hd8
    Tl0 = &Hd7
    Incr Tempo
    'Program_glowny
    If Tempo = 133 Then '20 x 50 mSecs = 1 Second
    Incr Jedn_sekund
    If Jedn_sekund > 9 Then
    Jedn_sekund = 0
    End If
    Tempo = 0
    End If
    Return

    problem polega na tym, że "1s:" to przerwanie i nie można z programu głównego wchodzić tak sobie do przerwania instrukcją skoku call bo wszystko się "nakićka":) . -ono samo będzie się uruchamiać po każdym przepełnieniu licznika T0.

    nową wartość dla T0 wybrałem "na oko" i nie jest dokładna, ale programowe "autoładowanie" też powoduje błąd.

    no i przy 16MHz (/ 12) chyba nie da się odliczyć dokładnie 1s co do cykla zegarowego.
    aha i co to jest P2.1 - jeżeli wspólna anoda to te waitms 200 to trochę za dużo.....
  • #3 2447949
    Katowiczanin
    Poziom 12  
    Posty: 86
    Pomógł: 3
    Ocena: 2
    Dziala super!!! wielkie dzieki :]]]]] oczywiscie zapunkcikuje Ci to pozdrawiam <piwo>
REKLAMA