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

Bascom multpilex i odwracanie wszystkich sygnałów na porcie.

TheWiktus 28 Lis 2006 19:20 1569 3
REKLAMA
  • #1 3273181
    TheWiktus
    Poziom 19  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    
    'C012a      Bardzo prosty stoper 0,1-sekundowy
    Dim Dziesek As Byte , Sekjed As Byte , Sekdzies As Byte , Minjed As Byte
    Dim 100ms As Byte , Ktorywysw As Byte , Licz As Bit
    Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B1111111
    Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
    Dziesek = 0 : Sekjed = 0 : Sekdzies = 0 : Minjed = 0
    On Timer0 Co4ms
    
    Do : Loop : End                                             'to jest główny program - pusta nieskończona pętla
    
    Co4ms:                                                      'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms
    Timer0 = 6                                                  'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów
    If Pind.0 = 0 Then Licz = 1                                 'sprawdź stan S1 i ewentualnie rozpocznij zliczanie czasu
    If Pind.1 = 0 Then Licz = 0                                 'sprawdź stan S2 i ewentualnie zakończ zliczanie czasu
    If Licz = 1 Then                                            'tylko wtedy, gdy stoper ma liczyć czas
       Incr 100ms                                               'co 4ms zwiększ wartość licznika o nazwie 100ms
       If 100ms = 25 Then                                       'skróc cykl licznika 100ms właśnie do 100ms
          100ms = 0                                             'czyli 0,1 sekundy
          Incr Dziesek                                          'co 0,1s zwiększ stan licznika dziesiatych części sekundy
          If Dziesek = 10 Then                                  'ten licznik liczy do dziesieciu
             Dziesek = 0                                        'czyli cykl trwa 1 sekundę
             Incr Sekjed                                        'co 1 sekundę  zwiększ licznik jednostek sekund
             If Sekjed = 10 Then
                Sekjed = 0                                      'co 10 sekund
                Incr Sekdzies                                   'zwiększ stan licznika dziesiatek sekund
                   If Sekdzies = 6 Then                         'liczy do 6 bo minuta ma 60 sekund
                      Sekdzies = 0
                      Incr Minjed                               'co 60 sekund zwiększ stan licznika minut
                         If Minjed = 10 Then Minjed = 0         '0...9 minut
                   End If                                       'więc maksymalny stan licznika to:
             End If                                             '9 minut, 59 sekund i 9 dziesiatych sekundy
          End If
       End If
    End If
    Incr Ktorywysw : If Ktorywysw = 4 Then Ktorywysw = 0        'skróć cykl: 0...3
    Portd = &B1111111                                           ' wygaś wyświetlacze
    Select Case Ktorywysw                                       ' obsługa wyświetlacza
    Case 0:                                                     'wyświetl zawartość licznika jednostek
       Portb = Lookup(dziesek , Tabela)                         'najpierw przepisz do PortB kody
       Portd.3 = 0                                              'potem włącz T3 - wyświetlacz jednostek
    Case 1:                                                     'wyświetl zawartość licznika dziesiątek
       Portb = Lookup(sekjed , Tabela)                          'najpierw przepisz do PortB kody
       Portb.7 = 0                                              'włącz punkt dziesiętny
       Portd.4 = 0                                              'potem włącz T4 - wyświetlacz dziesiątek
    Case 2:                                                     'wyświetl zawartość licznika setek
       Portb = Lookup(sekdzies , Tabela)                        'przepisz do PortB kody
       Portd.5 = 0                                              'włącz T5 - wyświetlacz setek
    Case 3:                                                     'wyświetl zawartość licznika tysięcy
       Portb = Lookup(minjed , Tabela)                          'przepisz do PortB kody
       Portb.7 = 0                                              'włącz punkt dziesiętny
       Portd.6 = 0                                              'włącz T6 - wyświetlacz tysięcy
    End Select
    Return                                                      'koniec procedury obsługi przerwania
    
    Tabela:                                                     'potrzebna do wyświetlenia cyfr 0...9
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
    


    Da się jakoś odwrócić wszystkie sygnały na porcie B ktoś pomoze ??
  • REKLAMA
  • #2 3273209
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    TheWiktus napisał:
    Da się jakoś odwrócić wszystkie sygnały na porcie B ktoś pomoze ??[/color]

    Po pierwsze , po co odwracać , a po drugie XOR &HFF :D

    Piotrek
  • REKLAMA
  • #3 3273679
    TheWiktus
    Poziom 19  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Ponieważ ja mam inne wyświetlacze niż w tym programie po odwróceniu wszystkiego powinno być dobrze ;]
    @Edit
    Mam jeszcze jedno pytanie gdzie to wstawić ;]
    Aha zapomniałem dodać używam uC Mega 16
  • #4 3276272
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Co to znaczy inne wyświetlacze ?.
    Wróżką nie jestem, ale bez schematu mogę się domyśleć, ze sterujesz kluczami załączającymi poszczególne wyświetlacze poprzez port D, a dane wysyłasz na port B. W takim wypadku zamiast zmieniać wartości na porcie B pozmieniaj dane w tablicy Tabela. No i nie zapomnij o przecinku dziesiętnym ;)
REKLAMA