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

Problem z programowym uart'em

crawe 02 Gru 2010 11:29 1026 1
REKLAMA
  • #1 8815932
    crawe
    Poziom 11  
    Witam,
    Czy ktoś mógł by rzucić okiem na kod, coś nie może zadziałać.
    Na sprzętowym działa ok przerobiony pod programowy uart już nie za bardzo :(

    
    Dim Dlugosc As String * 11
    Dim Szerokosc As String * 11
    Dim Satelity As String * 2
    Dim Godziny As String * 2
    Dim Minuty As String * 2
    Dim Sekundy As String * 2
    
    Dim Run As Byte
    Dim Gprmc As Byte
    Dim Cntr As Byte
    Dim Tudr As Byte
    Dim Ok As Bit
    
    Run = 1 : Reset Ok
    
    
    Open "comd.2:9600,8,n,1" For Input As #1
    
    Config Timer1 = Timer , Prescale = 1024
    Enable Timer1
    On Timer1
    Enable Interrupts
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portc.4 , Rs = Portc.5
    
    Cls
    
    Do
      While Ok = 0 : Wend                                       'czekaj na wczytanie danych
      Reset Ok
      Locate 1 , 1
      Lcd Szerokosc
      Locate 2 , 1
      Lcd Dlugosc
        Cursor Off
    
    Loop
    End
    
    
    Przerwanie_uart:
    If Run <> 0 Then
       Run = Inkey(#1) Xor 36                                   'jeśli w udr jest asc("$"), to run=0
       If Run = 0 Then
          Cntr = 0                                              'licznik=0 po wczytaniu "$"
          Szerokosc = ""
          Dlugosc = ""
    
       End If
    
       Else
       Select Case Cntr
          Case 0 To 4
             Tudr = Lookup(cntr , Gga)                          'odczyt GGA
             Run = Inkey(#1) Xor Tudr                           'powrot do znaku $
          Case 7 To 8                                           'znaki selekcja
             Godziny = Godziny + Chr(run)
          Case 8 To 9                                           'znaki selekcja
                Minuty = Minuty + Chr(run)
          Case 10 To 11                                         'znaki selekcja
             Sekundy = Sekundy + Chr(run)
          Case 17 To 27                                         'znaki selekcja
             Szerokosc = Szerokosc + Chr(run)
          Case 30 To 40                                         'znaki selekcja
                Dlugosc = Dlugosc + Chr(run)
          Case 46
            Set Ok : Run = 1                                    'odebrano dane,czekaj na kolejny znak "$"
          Case Else
             Tudr = Run
       End Select
       Incr Cntr
    End If
       Return
    
    Gga:
    Data 71 , 80 , 71 , 71 , 65                                 'GPGGA
    
    '$GPGGA,105357.000,5106.5487,N,01703.5382,E,1,3,3.68,107.4,M,42.6,M,,*50
    '$GPGGA,105358.000,5106.5490,N,01703.5371,E,1,3,3.69,107.4,M,42.6,M,,*54
    '$GPGGA,105359.000,5106.5483,N,01703.5363,E,1,3,3.69,107.4,M,42.6,M,,*54
    '$GPGGA,105400.000,5106.5480,N,01703.5363,E,1,3,3.69,107.4,M,42.6,M,,*5C
  • REKLAMA
  • #2 8815965
    mirekk36
    Poziom 42  
    No a skąd ci przyszło do głowy, żeby programowy UART chcieć z przerwaniem od sprzętowego używać ??? Ta wersja programowego UART'a w ogóle nie generuje żadnego przerwania.
REKLAMA