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

[ATmega32][bascom] program i wysył przez RS232

krzysiekk_20 01 Sty 2009 18:36 1710 1
  • #1 5933721
    krzysiekk_20
    Poziom 12  
    Witam,

    Mam taki problem. Chcę wysyłać do PC informację w formie takiego
    temp1;temp2;f1;temp3 i coś jeszcze. Jak wysyłam informację to chcę żeby ona była raz wyświetlana powiedzmy co ok 1-2s a nie tak jak na screenach pod kodem. (to jest losowe). Co może być nie tak. Timera2 używam jako odmierzacz czasu a timer0 do pomiaru częstotliwości (na 555)

    
     $regfile = "m32def.dat"                         ' informuje kompilator o pliku dyrektyw mikrokontrolera
    
    $crystal = 16000000                                         ' informuje kompilator o częstotliwości oscylatora taktującego mikrokontroler
    $baud = 9600
    
    Config Lcd = 24 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2       ' Konfiguracja wyświetlacza LCD
    
    Config Timer0 = Counter , Edge = Rising                     ' ???
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Config Timer2 = Timer , Async = Off , Prescale = 256        ' Zlicza czas, taktuje Timer 0
    
    Config Pinc.2 = Output                                      ' 74HC138A  klawiatura
    Config Pinc.3 = Output                                      ' 74HC138B  klawiatura
    Config Pinc.4 = Output                                      ' 74HC138C  klawiatura
    Config Pinc.5 = Input                                       '   klawiatura
    Config Pinc.6 = Input                                       '   klawiatura
    Config Pind.4 = Output                                      ' wyjście mocy
    Config Pind.5 = Output                                      ' wyjście mocy
    Config Pina.7 = Output                                      ' przekaźnik
    Config 1wire = Portc.7
    
    
    Dim A As Bit                                                '
    Dim Licz1 As Byte                                           ' licznik impulsów od wilgotności
    Dim Temp2 As Byte                                           '
    Dim Temp As Byte                                            '
    Dim N As Single                                             '
    Dim N1 As Single                                            '
    Dim N2 As Single                                            '
    Dim N3 As Single                                            '
    Dim Wys As String * 4
    Dim Znak As Byte                                            '
    Dim I As Byte                                               '
    Przekaznik Alias Porta.7                                    '
    Dim T1 As Single
    Dim T2 As Single
    Dim B1 As Byte , B2 As Byte , R As Byte
    Dim Tmp1 As String * 6
    Dim Tmp2 As String * 6
    Dim Znak1 As String * 1
    Reset Przekaznik
    R = &HFF
    Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32           ' znak stopnia
    
    
    Dim Licz2 As Byte                                           ' Licznik Timera 2 zlicza 250 przerwań ( 1 sek.)
    
    Pwm1b = 0                                                   '
    I = 0                                                       '
    Config Debounce = 25                                        '
    Reset Portc.2                                               '
    Reset Portc.3                                               '
    Reset Portc.4                                               '
    
    Licz1 = 0                                                   '
    Temp = 0                                                    '
    Temp2 = 0                                                   '
    A = 0                                                       '
    N = 0
    
    Enable Interrupts                                           '
    Enable Timer2                                               '
    Enable Timer0
    Enable Timer1                                               '                                                '
    On Timer2 Przekrocz2                                        '
    On Timer0 Przekrocz0                                        '
    Start Timer2
    Cls
    Cursor Off
    '********************************************************************************
    
    
    Do
    Reset Portc.2
    Reset Portc.3
    Reset Portc.4
    Debounce Pinc.5 , 0 , P1 , Sub                              'obsługa klawiatury
    Debounce Pinc.6 , 0 , P5 , Sub
    
    Set Portc.2
    Reset Portc.3
    Reset Portc.4
    Debounce Pinc.5 , 0 , P2 , Sub
    Debounce Pinc.6 , 0 , P6 , Sub
    
    Reset Portc.2
    Set Portc.3
    Reset Portc.4
    Debounce Pinc.5 , 0 , P3 , Sub
    Debounce Pinc.6 , 0 , P7 , Sub
    
    Set Portc.2
    Set Portc.3
    Reset Portc.4
    Debounce Pinc.5 , 0 , P4 , Sub
    Debounce Pinc.6 , 0 , P8 , Sub
    
    '************************* obsługa DS18B20 *************************************
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
       1wreset
       1wwrite &HCC
       1wwrite &HBE                                             'odczytywanie temp.
       B1 = 1wread()                                            'program odczytu podany przez producenta
       B2 = 1wread()
    
       If B1 >= 248 Then
          B1 = R - B1
          B2 = R - B2
          Znak1 = "-"
       Else
          Znak1 = "+"
       End If
       T1 = B1 / 16
       T2 = B2 * 16
       T1 = T1 + T2
    
       Tmp1 = Fusing(t1 , "###.&")
    
    '******************************************************************************
    
    If Licz2 > 249 Then
    Licz2 = 0
    Timer0 = 0
    N = 0
    A = 1
    End If
    
    If Licz2 = 10 Then
    Licz1 = Timer0                                              'przepisanie zliczonych impulsów zewnętrznych do zmiennej
                                                     'przygotowanie timera0 do ponownego liczenia
    End If
    
    If Licz2 = 12 Then                                          'Transmisja co sekundę
    N3 = 0
    N3 = N * 256
    N3 = N3 + Licz1
    
    
    End If
    
    If Licz2 = 50 And A = 1then
    Print Znak1 ; Tmp1 ; Chr(0) ; "C " ;
    A = 0
    End If
    'Znak = Inkey()
    'If Znak = "d" Then
    'Gosub Rs232
    'End If
    
    
    Loop
    
    End
    
    '**************************************************************
    
    Przekrocz0:
    N = N + 1
    Return
    
    Przekrocz2:
    Load Timer2 , 250
    Incr Licz2
       If Licz2 = 2 Then
       Start Timer0
       End If
          If Licz2 = 7 Then
          Stop Timer0
          End If
    Return
    
    P1:
    Cls
    I = I - 5
    If I >= 0 And I <= 255 Then
     Pwm1b = I
    Else
     I = 0
    End If
    Lcd Pwm1b
    Return
    
    P2:
    Cls
    I = I + 5
     If I >= 0 And I <= 255 Then
     Pwm1b = I
    Else
     I = 0
    Lcd Pwm1b
    End If
    Return
    
    P3:
    Cls
    Pwm1b = 255
    I = 255
    Lcd Pwm1b
    Return
    
    P4:
    Cls
    Pwm1b = 0
    I = 0
    Lcd Pwm1b
    Return
    
    P5:
    Set Przekaznik
    Return
    
    P6:
    Reset Przekaznik
    Return
    
    P7:
    Lcd "7"
    Return
    
    P8:
    Lcd "8"
    Return
    


    I screeny:

    [ATmega32][bascom] program i wysył przez RS232

    [ATmega32][bascom] program i wysył przez RS232
    [/img]
  • #2 5934197
    mirekk36
    Poziom 42  
    Luuudzie nie wklejajcie tu kodów tasiemców - nikt nie będzie za was analizował czegoś takiego. Spróbuj wymóżdżyć - co dokładnie sprawia ci problem - dojść do sendna sprawy a wtedy każdy z chęcią spróbuje coś podpowiedzieć.
REKLAMA