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

[ATmega32] Czemu program staje - bascom - RS232

filip_gd 24 Lut 2009 17:21 1838 4
REKLAMA
  • #1 6198270
    filip_gd
    Poziom 12  
    Witam
    Program ma za zadanie otrzymania 6bajtów przez RS232 i operacje na nich
    Problem w tym że po odebraniu transmisji program staje i trzeba resetować procka

    Pomocy! Siedzę przy przy tym już kilka godzin i nic

    $baud = 2400
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Dim Bufor As String * 6
    
    
    Do
    
    Enable Interrupts
    On Urxc Odebrano
    Enable Urxc
    
    Loop
    End
    
    Odebrano:
    Disable Urxc
    Input Bufor
    Print Bufor
    Enable Urxc
    Return
  • REKLAMA
  • #2 6198407
    mirekk36
    Poziom 42  
    zapomnij w takim prostym przypadku o przerwaniu Urxc (wywal z tego swojego kodu wszystko co masz związane z tym przerwaniem), zamiast tego - to co wpisałeś w przerwaniu - daj w pętli głównej - i wszystko w cudowny sposób ci ruszy. Co więcej - zainteresuj się takim poleceniem jak Config serialin - dzięki czemu włączysz sobie sprzętowy bufor RS232 - który jakby za plecami bedzie już korzystał z tego przerwania ale w prawidłowy sposób a nie taki jaki ty myślałeś że jest prawidłowy.
  • REKLAMA
  • Pomocny post
    #3 6204710
    M. S.
    Poziom 34  
    Przy instrukcji Input "odebranie znaku <CR> (kod 13) kończy wprowadzanie danych dla bieżącej zmiennej."

    A co jeśli znak <CR> nie zostanie nadany?

    Wtedy program stoi i czeka!
  • REKLAMA
  • Pomocny post
    #4 6204976
    dawid512
    Poziom 32  
    Mnie zastanawia jedna rzecz, skoro korzystasz z przerwań to po jakiego grzyba tam input? Zobacz jak mozna to rozwiazac:
    Odebrano:
    Disable Urxc                                                ' wylaczenie przerwania na czas trwania aktualnego
                                                                 'Jesli licznik znakow jest mniejszy od maksymalnego rozmiaru bufora to...
    If Licz_znaki < Max_znakow Then                             '...zwieksz licznik znakow, do buforu transmisji dopisz nastepny znak
       Incr Licz_znaki                                          'Chr(udr) dopisuje znaki z rejestru udr (rejestr transmisji)
       Bufor = Bufor + Chr(udr)
    End If
    
    
    If Licz_znaki = Max_znakow Then
    Print Bufor                                                 'Jesli bufor jest pelny to...
     Bufor = ""                                                 ' wyzeruj bufor i...
     Licz_znaki = 0
     Set Flaga                                                  'wyzeruj licznik znakow
    End If
    
    
    
    Enable Urxc
    Return
  • #5 6208499
    filip_gd
    Poziom 12  
    Dzięki za pomoc
    W między czasie udało mi się odpalić przyzwoitą i stabilną transmisję na przerwaniu urxc
    Co do input to dzięki za pomoc - drugie urządzenie nie nadaje tego sygnału i stąd problem
    Dawid robiłem próby z twoją metodą i też ruszyło , dzięki!
REKLAMA