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

Błąd w obsłudze wyświetlacza LCD w zadaniu 3 - co poprawić?

marekkiek 10 Maj 2007 13:10 932 0
REKLAMA
  • #1 3869229
    marekkiek
    Poziom 14  
    Posty: 141
    Pomógł: 4
    Ocena: 2
    Cytat:
    Temat 4 — TIMERY!LICZNIKI — obsłtwa w trybie przełądania
    Cel — poznanie zasad konfigurowania Timerów Liczników (CTC) i umiejętność wykorzystywania podstawowych fuiteji układów łiczników
    Zadania: (Opracować i uruchomić)
    1. Procedury odmierzania zadanych odcinków czasu: ił  65 ms i i2  65ms z wykorzystaniem liczników TO Tł
    2. Procedury generowania (jednocześnie) N asyucłuoniczuycłf i periodyczuych syguałów, każdy o zadanej sekwencji czasów trwania „1” i „O”: TIIIGII(i), TLo(i) ; i 1, 2 N
    3. Program pomiaru zadanej wielkości, np. a) czasu trwania impulsu HIGH lub okresu przebiegu periodycznego generowanego przez NE555 (ZD-537) lub b) czasu pomiędzy kolejnymi zwarciami przycisków klawiszy


    Tak wygląda temat 4 z laborki.

    Zadanie 1 i 2 działa.
    Problest jest z zadaniem nr 3.
    Zamieszam również archiwum w którym to jest.
    Problem jest że obsługa wyśletlacza lcd jest chyba niedopracowana. Co tam zmienić?

    $NOMOD51
    $INCLUDE(REG517.INC)
    $INCLUDE(BibLCD.inc)
    CSEG AT 0
    
    START:
    ; STALE ODPOWIADAJACE KOLEJNYM WIERSZA
    WIERSZ1 EQU 07FH
    
    	MOV P5,#WIERSZ1		 
    	MOV A,P7
    	MOV R4,A	
    	MOV A,R4		;A<-R4
    	MOV R5,#02H	    ;R5 PRZECHOWYWUJE MASKE, KTORA WYLAPUJE JENDA 'JEDYNKE'
    	XRL A,#07BH		;FUNKCJA XOR ZERUJE WSZYSTKIE POZYCJE OPROCZ JEDNEJ 'JEDYNKI'
    
    	CJNE A,#080H,START
    STCZAS:
    
    
    MOV TMOD,#001H	 ;ustawienie trubu pracy nr 1 (16 bitowy licznik)
    MOV TL0,#017H    ;ustaw mlodsza czesc licnika T0 (8 bit)
    MOV TH0,#0FCH	 ;ustaw starsza czesc licnika T0 (8 bit)
    
    
    SETB TR0		 ; startuj licznik
    
    LOP:
    JNB TF0,$       	;jesli 1 (przepelnienie T0) przerwij petle, jak zero to skok
    	CLR TF0			;zeruj flage przniesienia T0
    	INC R3          ; 
    
    ;/////////////////////////////////////////////////////////////
    	MOV P5,#WIERSZ1		 
    	MOV A,P7
    	MOV R4,A	
    	MOV A,R4		;A<-R4
    	MOV R5,#01H	    ;R5 PRZECHOWYWUJE MASKE, KTORA WYLAPUJE JENDA 'JEDYNKE'
    	XRL A,#077H		;FUNKCJA XOR ZERUJE WSZYSTKIE POZYCJE OPROCZ JEDNEJ 'JEDYNKI'
    
    	CJNE A,#080H,START3
    	LJMP LOP
    ;////////////////////////////////////////////////////////////	
    START3:
    
    CLR TR0			;zatrzymaj licznik 
    
    MOV P1,#055H ;zgaszenie diod
    
    
    LCALL INITIATE_LCD
    LCALL LCDClear
    MOV A,R3
    LCALL PutChar
    MOV A,#'0'
    LCALL PutChar
    
    
    			
    JMP $
    END


    Dołanczany plik:
    lcdcode segment code
    rseg lcdcode
    
    ;Podprogram czyszczacy LCD, kursor na poczatek
    LCDClear:
    
    zajetosc6:
    MOV DPTR,#0FF2EH
    MOVX A,@DPTR
    JB ACC.7,zajetosc6
    
    MOV DPTR,#0FF2CH ;DPTR <- adres wpisu rozkazow dla LCD
    MOV A,#01H	 ;A <- kod rozkazu czysc LCD, kursor ustaw na poczatek
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
    RET		 ;powrót z podprogramu
    
    
    
    ;Podprogram przesuwajacy kursor w prawo
    MoveRight:
    
    zajetosc4:
    MOV DPTR,#0FF2EH
    MOVX A,@DPTR
    JB ACC.7,zajetosc4
    
    
    MOV DPTR,#0FF2CH ;DPTR <- adres wpisu rozkazow dla LCD
    MOV A,#20H	 ;A <- kod rozkazu przesun kursor w prawo
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
    RET		 ;powrót z podprogramu
    
    
    
    ;Podprogram przesuwajacy kursor w lewo
    MoveLeft:
    
    zajetosc34:
    MOV DPTR,#0FF2EH
    MOVX A,@DPTR
    JB ACC.7,zajetosc34
    
    MOV DPTR,#0FF2CH ;DPTR <- adres wpisu rozkazow dla LCD
    MOV A,#16H	 ;A <- kod rozkazu przesun kursor w lewo
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
    RET		 ;powrót z podprogramu
    
    
    
    ;Podprogram wyswietlajacy na LCD znak, ktorego kod jest w akumulatorze
    PutChar:
    
    zajetosc3:
    MOV DPTR,#0FF2EH
    MOVX A,@DPTR
    JB ACC.7,zajetosc3
    
    MOV DPTR,#0FF2DH ;DPTR <- adres wpisu danych na LCD
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
    RET		 ;powrót z podprogramu
    
    
    
    
    ;/////////////////////////////////////////////////////////
    INITIATE_LCD:
    MOV DPTR,#0FF2CH ;DPTR <- adres wpisu rozkazow dla LCD
    MOV A,#38H	 ;A <- kod rozkazu resetuj LCD
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
     
    zajetosc:
    MOV DPTR,#0FF2EH
    MOVX A,@DPTR
    JB ACC.7,zajetosc
    
    MOV DPTR,#0FF2DH ;DPTR <- adres wpisu danych na LCD
    MOV A,#2AH	 ;A <- znak *, ktory bedzie wyswietlony na LCD mozna rowniez tak: MOV A,#'*'
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
    
    zajetosc2:
    MOV DPTR,#0FF2EH
    MOVX A,@DPTR
    JB ACC.7,zajetosc2
    
    MOV DPTR,#0FF2DH ;DPTR <- adres wpisu danych na LCD
    MOV A,#23H	 ;A <- znak *, ktory bedzie wyswietlony na LCD mozna rowniez tak: MOV A,#'*'
    MOVX@DPTR,A	 ;komorka pamieci, ktorej adres w DPTR <- A
    RET		 ;powrót z podprogramu



    Dzieki i pozdrawiam.
    Załączniki:
    • Od_4.zip (34.25 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
REKLAMA