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

89c2051 na symulatorze baskom działa po zaprogramowaniu nie

jurekpl 07 Gru 2004 01:44 1396 3
REKLAMA
  • #1 1042348
    jurekpl
    Poziom 11  
    Posty: 20
    Ocena: 15
    POMOCY
    Męcze sie już kilka dni z tematem przerwań w 89c2051
    procek ma sterować silnikiem krokowym 4 różne prędkości wybierane przyciskiem INT.
    Na symulatorze chodzi a po za programowaniu nie działają INT
    poniżej
    program:
    Config Timer0 = Counter = Internal , Mode = 1
    Enable Interrupts
    Dim S As Integer

    Dim Count As Integer

    On Int1 Int1_int Nosave
    Reset P1.2
    Reset P1.3
    Reset P1.7
    Enable Interrupts
    Enable Int1
    Count = 1
    S = 5000

    On Timer0 40khz

    40khz:
    Load Timer0 , S
    Do
    P1.3 = Not P1.3 : P1.2 = Not P1.3

    Do
    Loop

    Int1_int:

    Incr Count
    'Print Count
    If Count = 1 Then
    S = 5000 : Reset P1.7 : Set P1.6 : Set P1.5 : Set P1.4
    Elseif Count = 2 Then
    S = 4500 : Set P1.7 : Reset P1.6 : Set P1.5 : Set P1.4
    Elseif Count = 3 Then
    S = 4000 : Set P1.7 : Set P1.6 : Reset P1.5 : Set P1.4

    Elseif Count > 3 Then
    S = 2500 : Set P1.7 : Set P1.6 : Set P1.5 : Reset P1.4 : Count = 0
    End If
    Gosub 40khz
    INT1 ma steować wybranym zakresem , ale nie działa,
    sprawdzałem na różnych seriach atmela i nic.
    Pomóżcie gdzie jest błąd?
  • REKLAMA
  • Pomocny post
    #2 1042353
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    SET P3.3 po "Enable Int1" ?
    gdzie masz instrukcje powrotu z przerwań ?
    LightI
  • REKLAMA
  • Pomocny post
    #3 1043517
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Witam.
    I przystępuję do rzeczy :wink:
    
    Config Timer0 = Counter = Internal , Mode = 1 
    

    Co to jest za tryb :?:
    Chcesz zliczać impulsy na P3.4 czy cykle maszynowe :?:
    
     Load Timer0 , S 
    

    Ta instrukcja nie spowoduje przepełnienia sie T0 po 5000 taktach ale po 34696 ,ponieważ załaduje rejestry TL0 i TH0 wartością 120(Hex 78 ) gdyż stosowana jest tylko w trybie 2 Timerów, a w trybach 0,1 używamy "Counter=X" z tym , że X jest wartościa ładowaną bezpośrednio do rejestrów timera czyli licznik w trybie 1 przepełni sie po 65536-x taktach.A co najwazniejsze ,to zapomniałeś włączyć Timera (Start Timer0)

    To tyle jeśli chodzi o timer.

    Nieprawidłowa budowa programu ,o czym wspomniał LightHouser,brak zakończenia procedur przerwań i nie "skacz po kodzie" jak koza po łące :wink: ,a program główny(u Ciebie DO... LOOP) powinien rozpocząć pracę zaraz po ustawieniu niezbędnych parametrów czyli w Twoim przypadku po "On Timer0 40khz".

    Tyle najważniejszych spostrzeżeń.Popraw i wrzuć na FORUM.

    Pozdrawiam
    Piotrek Sz.
  • #4 1055000
    jurekpl
    Poziom 11  
    Posty: 20
    Ocena: 15
    Dzięki LIGHTI i zumek.
    Po waszych wskazówkach wszystko działa.
    ostateczną wersję wrzucę lada moment na frum
REKLAMA