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

[asm] Prośba o sprawdzenie programu

Leszek_ 20 Cze 2009 11:38 1583 10
REKLAMA
  • #1 6679847
    Leszek_
    Poziom 11  
    PD.0 ---- E
    PD.1 ---- RS
    PD.2 ---- R/W

    Do portu B podpięta jest szyna danych

    Napisałem część programu jednak nie jestem pewny czy tędy droga.

    ;-----LCD--------------------
    .notlist
    .include "tiny2313"
    .list
    .listmac
    ;-----Code Segment--------
    .cseg
    .org 0
    .rjmp ResetProcessor
    ;......................................
    Reset Processor
    cli                          ; zablokuj przerwania
    ldi r16,LOW            ;inicjacja stosu
    out SPL,r16            ; 
    
    ldi r16,0xFF
    out DDRB,r16         ;cały port B jako wyjście
    out DDRD,r16         ;cały port D jako wyjście
    
    ldi r16,0x00
    out PORTB,r16        ;cały port B w stanie niskim
    out PORTD,r16        ;cały port D w stanie niskim
    ;---------------------------------
    ldi PINB,0x30          ;transmisja 8 bitowa, 2 linie
    sbi PORTD,0            ;ustawia stan wysoki na E
    cbi PORTD,0            ;ustawia stan niski na E
    ldi PINB,0xE            ;włącza wyświetlacz i wyświetla kursor
    sbi PORTD,0            
    cbi PORTD,0
    ldi PINB,0x6            ;przesuwanie kursora w prawo
    sbi PORTD,0            
    cbi PORTD,0
    sbi PORTD,1           ;stan wysoki na RS
    ;-----------------------------------
    ldi PINB,0x45          ;litera T
    sbi PORTD,0            
    cbi PORTD,0
  • REKLAMA
  • REKLAMA
  • #3 6690836
    Leszek_
    Poziom 11  
    Jak to zmienie to wyswietli mi literkę t czy program jest kompletnie nic warty?
  • REKLAMA
  • #5 6691986
    Leszek_
    Poziom 11  
    To gdzie jest w takim razie problem?
  • REKLAMA
  • #6 6693546
    adamwesola
    Poziom 24  
    Przeanalizuj program który załączam i poczytaj datasheet. Na elektrodzie jest także https://www.elektroda.pl/rtvforum/topic1077556.html#5440284 symulator lcd, warto sie z nim zapoznać ; zrozumiesz jak sterować wyswietlaczem lcd.
  • #7 6703309
    Leszek_
    Poziom 11  
    Nie do końca rozumiem co robi podprogram lcd_busy. Ładujemy stała do r24 i każemy czekać?

    Gdyby nie lcd_busy to ten program jest praktycznie taki sam jak mój. ( nieskończony)

    Wydawało mi się że powinno się czekać na wykonanie rozkazu gdy E=1 i tam widziałem błąd u siebie jednak Ty również nie czekasz gdy E-1 tylko wcześniej przed ta procedurą i po E=1 od razu przychodzi e=0

    Dodano po 6 [minuty]:

    Zauważyłem że w moim programie są złe komendy ładowane zapomniałem o jednej jedynce ale przyjmijmy że są poprawne i ładowane poprzez rejestr r16. Czy wtedy litera T wyświetliła by się?

    Dodano po 18 [minuty]:

    
    ;-----LCD--------------------
    .notlist
    .include "tiny2313"
    .list
    .listmac
    ;-----Code Segment--------
    .cseg
    .org 0
    .rjmp ResetProcessor
    ;......................................
    ResetProcessor
    cli                          ; zablokuj przerwania
    ldi r16,LOW(RAMEND)	  ;inicjacja stosu
    out SPL,r16            ;
    
    ldi r16,0xFF
    out DDRB,r16         ;cały port B jako wyjście
    out DDRD,r16         ;cały port D jako wyjście
    
    ldi r16,0x00
    out PORTB,r16        ;cały port B w stanie niskim
    out PORTD,r16        ;cały port D w stanie niskim
    ;---------------------------------
    ldi r16,0x38          ;transmisja 8 bitowa, 2 linie
    out PORTB,r16   
    sbi PORTD,0            ;ustawia stan wysoki na E
    cbi PORTD,0            ;ustawia stan niski na E
    ldi r16,0x0c          ;włącza wyświetlacz i wyświetla kursor
    out PORTB,r16   
    sbi PORTD,0           
    cbi PORTD,0
    ldi r16,0x1            ;clear
    out PORTB,r16   
    sbi PORTD,0           
    cbi PORTD,0
    sbi PORTD,1           ;stan wysoki na RS
    ;-----------------------------------
    ldi r16,0x45          ;litera T
    out PORTB,r16   
    sbi PORTD,0           
    cbi PORTD,0
    tu:		rjmp	tu


    Troszkę pozmieniałem czy teraz zadziała?
  • #8 6703793
    adamwesola
    Poziom 24  
    Lcd_busy sprawdza znacznik BF w wyświetlaczu, oznaczający gotowość wyświetlacza do wykonania polecenia, czeka w pętli na stan niski na D7.
    Sekwencja - sbi PORTD,lin_e i cbi PORTD,lin_e - daje wystarczający czasowo impuls na wejście E

    Czy Twoj zadziala ? - przy niskiej częstotliwości (np.32768Hz) procesora tak, przy 6 czy więcej MHz, wyświetlacz nie będzie osiągał stanu gotowości , ja dałem Ci gotowca, działajacego
  • #9 6703936
    Leszek_
    Poziom 11  
    Czyli pierwszy rozkaz obył by się bez tego podprogramu ale za to drugi już nie bo musi czekać aż skończy się pierwszy tak?

    Wygląda na to że ja źle interpretowałem obsługę LCD bo wydawało mi się że stan E=1 musi chwile potrwać, a z tego co widze u Ciebie trzeba czekać aż wykona operacje po zmianie e=0

    Czyli:
    ustawiamy odpowiedznio rs rw i szynę dajemy stan wysoki na E co zezwala LCD na wykonanie operacji następnie dajemy stan niski na E i czekamy aż wyświetlacz skończy wykonywac operację i jedziemy dalej tak?

    Dodano po 1 [godziny] 51 [minuty]:

    Dzięki za pomoc, już rozumiem w pełni działanie programu :)
  • #11 6706357
    Leszek_
    Poziom 11  
    Możliwość sprawdzenia na żywo będę miał dopiero po niedzieli ;/ Nie mam programatora na usb a został mi tylko laptop
REKLAMA