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

Opóźnienie Bascom, procesor 89c2051. Jak opóźnić pętle?

Van_Gandalf 05 Gru 2004 14:26 2408 6
REKLAMA
  • #1 1038072
    Van_Gandalf
    Poziom 19  
    Posty: 502
    Pomógł: 7
    Ocena: 43
    Witam uruchamiam pierwszy program napisany pod bascomem,
    procek to 89c2051 podlaczony do wyswietlacza lcd
    wszystko dziala lecz zamiast napisy pojawiac sie co sekunde na wyswietlaczu robia to chyba w 1/100 sekundy i nic nie widac na wyswietlaczu tylko ostatni wyraz
    jakimi komedami opóznic w programie poczczegolne pętle?
    bo wait 1 lub wait 100 czy 10000 nie zmienia nic w dzxialaniu programu
  • REKLAMA
  • #2 1038117
    Krzychu ADC
    Poziom 15  
    Posty: 97
    Pomógł: 9
    Ocena: 3
    Ustawiłeś w Options/Compiler/Misc bibliotekę 89c2051.dat ??
    Jeżeli tak to pewnie coś w kodzie pochrzanione..
  • REKLAMA
  • #3 1038128
    Dexter77
    Poziom 28  
    Posty: 889
    Pomógł: 134
    Ocena: 19
    Albo nie masz na poczatku dyrektywy $crystal informujacej jaki masz podlaczony kwarc. Te procedury opieraja sie na tej informacji.
    Pozdro
    Dexter
  • #4 1038133
    Van_Gandalf
    Poziom 19  
    Posty: 502
    Pomógł: 7
    Ocena: 43
    niestety mam...
    oto program
    '--------------------------------------------------------------
    ' (c) 1997-2001 MCS Electronics
    '--------------------------------------------------------------
    ' file: LCD.BAS
    ' demo: LCD, CLS, LOWERLINE, SHIFTLCD, SHIFTCURSOR, HOME
    ' CURSOR, DISPLAY
    '--------------------------------------------------------------
    $sim
    Rem The $sim statement will remove long delays for the simulator
    Rem It is important to remove this statement when compiling the final file
    $crystal = 12000000

    Config Lcdpin = Pin , Db4 = P3.1 , Db5 = P3.2 , Db6 = P3.3 , Db7 = P3.4 , E = P3.5 , Rs = P3.7
    Rem with the config lcdpin statement you can override the compiler settings


    Dim A As Byte
    Config Lcd = 16 * 2 'configure lcd screen
    'other options are 16 * 4 and 20 * 4, 20 * 2 , 16 * 1a
    'When you dont include this option 16 * 2 is assumed
    '16 * 1a is intended for 16 character displays with split addresses over 2 lines

    '$LCD = address will turn LCD into 8-bit databus mode
    ' use this with uP with external RAM and/or ROM
    ' because it aint need the port pins !

    Cls 'clear the LCD display
    Lcd "Hello world." 'display this at the top line
    Wait 9
    Lowerline 'select the lower line
    Wait 9
    Lcd "Shift this." 'display this at the lower line
    Wait 9
    For A = 1 To 10
    Shiftlcd Right 'shift the text to the right
    Wait 100000 'wait a moment
    Next

    For A = 1 To 10
    Shiftlcd Left 'shift the text to the left
    Wait 9 'wait a moment
    Next

    Locate 2 , 1 'set cursor position
    Lcd "*" 'display this
    Wait 9 'wait a moment

    Shiftcursor Right 'shift the cursor
    Lcd "@" 'display this
    Wait 9 'wait a moment

    Home Upper 'select line 1 and return home
    Lcd "Replaced." 'replace the text
    Wait 9 'wait a moment

    Cursor Off Noblink 'hide cursor
    Wait 9 'wait a moment
    Cursor On Blink 'show cursor
    Wait 9 'wait a moment
    Display Off 'turn display off
    Wait 9 'wait a moment
    Display On 'turn display on
    '-----------------NEW support for 4-line LCD------
    Thirdline
    Lcd "Line 3"
    Fourthline
    Lcd "Line 4"
    Home Third 'goto home on line three
    Home Fourth
    Home F 'first letteer also works
    Locate 4 , 1 : Lcd "Line 4"
    Wait 9

    'Now lets build a special character
    'the first number is the characternumber (0-7)
    'The other numbers are the rowvalues
    'Use the LCD tool to insert this line
    Deflcdchar 0 , 31 , 17 , 17 , 17 , 17 , 17 , 31 , 0 ' replace ? with number (0-7)
    Deflcdchar 1 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 31 ' replace ? with number (0-7)
    Cls 'select data RAM
    Rem it is important that a CLS is following the deflcdchar statements because it will set the controller back in datamode
    Lcd Chr(0) ; Chr(1) 'print the special character

    '----------------- Now use an internal routine ------------
    Acc = 1 'value into ACC
    Call Write_lcd 'put it on LCD
    End

    ten programik to demo prezentujace mozliwosci bascoma
  • REKLAMA
  • #5 1038139
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Sprawdź , czy nie masz w kodzie aktywnej dyrektywy "$sim".

    Pozdrawiam
    Piotrek Sz.

    UPDATE:
    No właśnie :(
  • #6 1038145
    Van_Gandalf
    Poziom 19  
    Posty: 502
    Pomógł: 7
    Ocena: 43
    No tak dziekuje za podpowiedz >>>:)
  • REKLAMA
  • #7 1038158
    kaccc
    Poziom 14  
    Posty: 94
    $sim jest niepotrzebne, oczywiście jeśli program siedzi w procesorze a nie jest symulowany.

Podsumowanie tematu

✨ Problem dotyczy opóźnienia w wyświetlaniu tekstu na LCD podłączonym do procesora 89c2051 programowanego w Bascom. Użytkownik zauważa, że napisy pojawiają się zbyt szybko (około 1/100 sekundy), co powoduje wyświetlanie tylko ostatniego słowa. Próby użycia komend wait z różnymi wartościami nie przynoszą efektu. W dyskusji zwrócono uwagę na konieczność poprawnego ustawienia bibliotek procesora (plik 89c2051.dat) w opcjach kompilatora oraz na obecność dyrektywy $crystal określającej częstotliwość kwarcu (w przykładzie 12 MHz). Wskazano również, że obecność dyrektywy $sim (symulator) powoduje pomijanie opóźnień, co może być przyczyną problemu. Usunięcie $sim z kodu jest konieczne, gdy program jest uruchamiany na rzeczywistym procesorze, aby opóźnienia działały prawidłowo.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA