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

AT89S52 z LCD 4-bit – losowe znaki na wyświetlaczu, czy kod jest poprawny?

djanj 26 Maj 2007 12:44 1355 2
REKLAMA
  • #1 3922680
    djanj
    Poziom 21  
    Posty: 561
    Pomógł: 13
    Ocena: 66
    witam
    czy moglby ktos sprawdzic czy ten program jest poprawny? bo cos mi nie chce zadzialac, co najdziwniejsze jak zaladuje program to po kazdym resecie na lcd pokazuje co innego, raz pokazuje tylko pierwsza litere i pozniej cos bez sensu, czasami calosc jest bez sensu, a czasami pokazuje moj tekst tylko zjada co drugi znak i nie wiem czy program jest bledny czy to cos innego
    lcd jest na 4 bitach, dane od najstarszego, p2(3-0)

    
    rs equ p2.7
    rw equ p2.6
    e equ p2.5
    	acall lcd_init
    	acall lcd_clear
    	mov DPTR, #table
    	mov r0, #0
    wyswietl:
    	mov a, r0
    	movc a, @a+dptr
    	mov r2, a
    	inc r0
    	acall lcd_znak
    	mov a, r0
    	xrl a, #12
    	jnz wyswietl
    	ajmp $		
    		
    enable:
    	setb e
    	clr e
    	
    delay:					;delay= 100ms
    	mov b, #100
    delay2:
    	mov r7, #0ffh
    	djnz r7, $
    	mov r7, #0FFh
    	djnz r7, $
    	djnz b, delay2
    	ret
    lcd_init:
    	clr e
    	acall delay
    	mov p2, #03h
    	acall enable
    	acall enable
    	acall enable
    	mov p2, #02h	;function set 4-bitowy
    	acall enable
    	acall enable	;function set
    	mov p2, #8
    	acall enable
    	mov p2, #0	;display off
    	acall enable	
    	mov p2, #00001100b
    	acall enable
    	mov p2, #0	;display clear
    	acall enable
    	mov p2, #1
    	acall enable
    	mov p2, #0	;entry mode set
    	acall enable
    	mov p2, #00000110b
    	acall enable
    	ret
    lcd_clear:
    	mov p2, #0
    	acall enable
    	mov p2, #01h
    	acall enable
    	ret
    lcd_znak:
    	mov p2, #0
    	setb rs
    	clr rw
    	mov a, r2
    	swap a
    	anl a, #0fh
    	orl p2, a
    	setb e
    	clr e
    	mov a, r2
    	anl p2, #0F0h
    	anl a, #0fh
    	orl p2, a
    	setb e
    	clr e
    	ret
    
    table:
    	DB "123 test lcd"
    end
    	


    edit:
    program pisze w notatniku i kompiluje programem asem.exe do '51 programowalem juz tak 89C4051 i dzialaly, tego chyba tez tak mozna?
    programuje ispprogiem przez stk200/300, ispprog nie zglasza zadnych bledow i verifikuje poprawnie.
    a czy moge sprawdzic dzialanie ukladu, programujac 89s52 z bascoma?
    tzn zrobic tylko hexa w bascomie?
  • REKLAMA
  • Pomocny post
    #2 3928070
    jj
    Poziom 19  
    Posty: 145
    Pomógł: 42
    Za szybko wysyłasz komendy do wyświetlacza. Większość komend sterownik wyswietlacza wykonuje w czasie około 40us, a czyszczenie wyświetlacza i powrót kursora do adresu 00 w czasie około 1.6 ms. Wstaw odpowiednie opóźnienia i powinno działać. Po szczegóły sięgnij do dokumentacji HD44780.

    Jacek
  • #3 3928246
    djanj
    Poziom 21  
    Posty: 561
    Pomógł: 13
    Ocena: 66
    tak dokladnie, dodalem opoznienie 2ms po kazdym wyslaniu do wyswietlacza i zaczelo dzialac, dokladnie wyglada to tak:
    
    lcd_znak:
    	mov p2, #0
    	setb rs
    	clr rw
    	mov a, r2
    	swap a
    	anl a, #0fh
    	orl p2, a
    	setb e
    	clr e
    	mov b, #2
    	acall delay2
    	mov a, r2
    	anl p2, #0F0h
    	anl a, #0fh
    	orl p2, a
    	setb e
    	clr e
    	mov b, #2
    	acall delay2
    	ret
    
REKLAMA