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

Wężyk LEDów na AT89C2051 - jak dodać kilka funkcji do programu

Jogesh 27 Paź 2005 12:55 1548 16
REKLAMA
  • #1 1932123
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Witam
    Chciałbym zrobić wąż świetlny 6 LED na procku 89C2051. Jak narazie zmieniłem pewien program, żeby dziłał tak jak chcę. Teraz program wygląda tak:

    CPU atmel.def

    start:
    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz

    mov P1, #11110111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #00111111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #00011111b
    acall opz
    mov P1, #11100011b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #11100011b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10111011b
    acall opz
    mov P1, #11011011b
    acall opz
    mov P1, #11101011b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #01110011b
    acall opz
    mov P1, #10110011b
    acall opz
    mov P1, #11010011b
    acall opz
    mov P1, #11100011b
    acall opz
    mov P1, #01100011b
    acall opz
    mov P1, #10100011b
    acall opz
    mov P1, #11000011b
    acall opz
    mov P1, #01000011b
    acall opz
    mov P1, #10000011b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #11001111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111111b
    acall opz


    ajmp start

    opz:
    mov A, #FFh
    op: mov B, #FFh
    o: djnz B, o
    djnz A, op
    ret


    END




    Chciałbym do programu dodać kilka funkcji, ale ponieważ w programowaniu jestem zero {-10}, to prosiłbym o pomoc.

    Mianowicie chodzi mi o to, żeby układ miał fuckcję zmieniania prędkości. Ma byś realizowana z pomocą dwóch przycisków. Jednym będzie się zwiększać prędkość mrugania LEDów, a drugim zmniejszać.


    Pozatym przydatna byłaby funkcja Lock, czyli po jednym naciśnięciu tego prczycisku program by pozostawał przy danym trybie świecenia.

    Może niezbyt jasno się wyraziłem, bo jest to mój drugi program, a nigdzie nie uczyłem się programowania :cry:

    Załączam schemat.

    Pozdr.
    Załączniki:
    • Migacz LED.pdf (11.05 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 1932231
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Masz błąd na schemacie. Klawisze "C" powinny być podpięte do masy a nie do +5V, do pina 12 musisz podpiąć opornik około 10k do +5V ponieważ między innymi to wyjście niema opornika podciągającego.
    Co do czasów to możesz zrobić ja na timerze. Poprostu trzeba by napisać kawałek programu.
  • REKLAMA
  • #3 1932250
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Dzięki zmienię troszkę chcemat.

    Napisać kawałek programu.... Może ktoś mi łopatologicznie wyjaśni jak się obsługuje przyciski? Jak zrobić zmienna prędkość??
    Może jest w necie jakaś tronka traktująca o PODSTAWACH programowania? Szukałem, znalazłem kilka, ale jakoś nie zrozumiałem o co tam chodzi. :cry:


    Żeby zrobić zmienna pedkość, to chyba trzeba by zmieniać pętlę opóźnienia. A żeby zrealizować "lock" to trzeba by każdy układ kolejności zapalania LED umiścić osobno, i po kazdym powinno być, że jeżel przycisko zastał naciśnięty, to powrót do poczatku funkcji, a jeżeli nie, o dalej. Czy dobrz myślę?

    Pozdr.
  • REKLAMA
  • #4 1932640
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    No i już łapiesz. Może być.
    Co do klawiatury to też prostota. wiadomo że te wejścia od przycisków musisz czytać w programie i odpowiednio modyfikujesz zmienną czasu albo na plus albo na minus.
  • #5 1932890
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Tylko jak to zrobić? Może jest gdzieś w Internecie jakiś kurs programowania? Albo jakieś gotowe rozwiązanie?

    Pozdr.
  • #6 1944510
    hki
    Poziom 20  
    Posty: 480
    Pomógł: 6
    Ocena: 7
    zeby wydluzac i skracac petle robisz tak:

    jesli w petle wpisujesz np w Twoim przypadku mow a, ffh i teraz zamiast tego wpisz mov a, r0 i po przycisnieciu przycisku dodawaj do r0 np 20h wtedy petla sie wydluzy.

    musisz do tego wykorzystac skoki warunkowe od bitu. czyli jezeli np na porcie p3.0 jest 0 (pin zwarty do masy) wtedy skocz do procedury zwiekszenia wartosci rejestru)
  • #7 1945294
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Dzięki. Spróbuję coś wykombinować. TEoretycznie rozumiem, ale nie wiem jak to napisać w ASM.

    Pozdr
  • #8 1951349
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Jeszcze jedno. Jak zmniejscyć czas pętli? teraz jest FFh. Jak chciałbym 1000 razy szybciej? Jak się to wpisuje? Chce po prostu podłaczyć niższą czestotliwosc oscylatora.

    Pozdr.
  • #9 1952245
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    opz: 
    mov A, #FFh 
    op: mov B, #FFh 
    o: djnz B, o 
    djnz A, op 
    ret 
    
    Zamiast mov A,#FFh wpisujesz mniejszą wartość ale to musisz policzyć albo zmierzyć na symulatorze.
  • #10 1952274
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Dzięki. A jak to się liczy? Co to jest za liczba FFh? Nie musi byc dokładnie 1000 razy, cos w przybliżeniu...

    {sorry za laickie pytania}
  • #11 1952378
    hki
    Poziom 20  
    Posty: 480
    Pomógł: 6
    Ocena: 7
    ffh to jest 256 dziesietnie a dokladniej 255 bo procek liczy od 0

    w twojej petli opozniajacej sa dwie wartosci ffh czyli wychodzi 256x256=35536 - tyle masz opoznienia (tyle krokow procek wykonuje ) teraz aby obliczyc opoznienie bierzesz czestotliwosc kwarcu dzielisz przez 12 i wychodzi Ci ilosc krokow procka wykonywanych w ciagu sekundy. czyli jesli kwarc ma 12mhz to jest milion krokow na sekunde ;]

    i reszta juz jest prosta jak chcesz 0.5 sekundy opoznienia to musisz zrobic petle ktora ma 500 000 krokow ;]
  • REKLAMA
  • #12 1953299
    bolek
    Poziom 35  
    Posty: 4098
    Pomógł: 86
    Ocena: 298
    jeśli chodzi o obsługe timera to przed etykietą START wpisz:

    		MOV IE, #10000010B	;AKTYWACJA PRZERWAN OD T0 + GLOBALNE ZEZWOLENIE 
    	MOV TMOD, #0001B	;TIMER MODE=1  (16 BITOW)
    	MOV TH0, #0H 		; TIMERA odlicza 65535 cykli zegara
    	MOV TL0, #0H		; 	
    	SETB TR0


    To spowoduje uruchomienie timera T0. Jest to dobre miejsce do sprawdzenia klawiatury...
    Ale trzeba jeszcze coś zrobić, musisz wskazać w którym miejscu ma zacząć sie obsługa przerwania od T0, tak więć przed MOV IE, #10000010B musisz napisać:

    ORG 0BH
    JMP TIMER_INT


    to sie zwie wektor przerwań, jeśli procesor wykryje przerwanie to leci do tego adresu co jest za "ORG", w tym przypadku jest to wartość 0Bh i odpowiada przerwaniu od T0. Następnym krokiem jaki poczyni procek jest skok ("JMP") do etykiety co sie zwie "TIMER_INT". Jako ciekawostka powiem ci że nie zawsze trzeba tam pisać skok do etykiety, jesli twoja procedura przerwania jest odpwoiednio krótka (kilka bajtów) to możesz to od razu napisać pod ORG 0Bh- ale tym sie na razie nie przejmuj.
    Teraz trzeba zrobić etykiete od tego przerwania. Ja robie to gdzieś na końcu programu. Możesz ją wstawić np: pomniędzy koniec etykiety OPZ a polecenie END. Tu jest prosta procedurka która sprawdza ci klawisze i odpowienio zmieni wartosc w R0 od 0 do 255, zwróć uwage jak jest zrobiona, bo samo polecenie INC nie tylko zwiększy ci wartość, ale także spowoduje wiele zamieszania jesli ów wartość osiągnie 255. Kolejne polecenie INC spowoduje w tym przypadku iż ta wartość będzie równa 0!. to samo tyczy sie DEC

    TIMER_INT:
    	PUSH ACC		;AKUMULATOR NA STOS
    	
    	SETB P3.2
    	JB P3.2, TIM1		;JESLI KLAWISZ NIE NCISNIETY TO SKOCZ
    	MOV A, R1
    	CJNE A, #0, TIM2 	;JESLI WARTOSC =0 TO NIE ZMNIEJSZAJ DALEJ, BO WYSKOCZY NA 255
    	JMP TIM1
    TIM2:	DEC R1			;ZMNIEJSZ O 1 WARTOSĆ W R0
    
    TIM1:	SETB P3.2		;TO SAMO, TYLE ZE DLA DRUGIEGO KLAWISZA
    	JB P3.2, TIM3
    	MOV A, R1		
    	CJNE A, #255, TIM4
    	JMP TIM3
    TIM4:	INC R1
    TIM3:
    	POP ACC			;ODZYSKAJ WARTOSC ACC Z PRZED SKOKU DO PRZERWANIA
    	RETI			;POWROT Z PRZERWNIA

    Przerwania będzie wywoływane co 65535 cykli zegara, timer po przepełnieniu automatycznie zaczyna zliczać od zera, do twojego celu moze to być nieco za szybko, ale na razie wystarczy...
    Wartość zwłoki czasowej masz teraz w R1, i na początku procedury w której robisz zwłoke czasową muszisz sobie ją przepisać do właściwej zmiennej względem której ta zwłoka jest wykonywana!

    przykładzik:

    opz: 
    	MOV A, R1
    op: 
    	MOV B, FFh 
    o: 	DJNZ B, o 
    	DJNZ A, op 
    ret  

    Jeśli bedzie to za szybko migać to "sklej" kilka podobnych procedur.

    Na razie tyle z mojej strony, zobacz co z tego wyjdzie
  • #13 1953603
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    Wielkie dzięki. Jak zrobiłem tak jak napisąłeś, to przy konwetowaniu na BIN pojawił się bład w 4 lini. "Nieznany mnemonik ORG 0Bh". Co jest nie tak?
    zamieszczam programik.




    CPU atmel.def

    org 0Bh
    JMP TIMER_INT

    MOV IE, #10000010B ;AKTYWACJA PRZERWAN OD T0 + GLOBALNE ZEZWOLENIE
    MOV TMOD, #0001B ;TIMER MODE=1 (16 BITOW)
    MOV TH0, #0H ; TIMERA odlicza 65535 cykli zegara
    MOV TL0, #0H ;
    SETB TR0



    start:

    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz

    mov P1, #11110111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #00111111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #00011111b
    acall opz
    mov P1, #11100011b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #11100011b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10110111b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #01111011b
    acall opz
    mov P1, #10111011b
    acall opz
    mov P1, #11011011b
    acall opz
    mov P1, #11101011b
    acall opz
    mov P1, #11110011b
    acall opz
    mov P1, #01110011b
    acall opz
    mov P1, #10110011b
    acall opz
    mov P1, #11010011b
    acall opz
    mov P1, #11100011b
    acall opz
    mov P1, #01100011b
    acall opz
    mov P1, #10100011b
    acall opz
    mov P1, #11000011b
    acall opz
    mov P1, #01000011b
    acall opz
    mov P1, #10000011b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111011b
    acall opz
    mov P1, #10111111b
    acall opz
    mov P1, #11110111b
    acall opz
    mov P1, #11011111b
    acall opz
    mov P1, #11101111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #11001111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #10000111b
    acall opz
    mov P1, #11001111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111111b
    acall opz

    mov P1, #01111111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00000011b
    acall opz
    mov P1, #00000111b
    acall opz
    mov P1, #00001111b
    acall opz
    mov P1, #00011111b
    acall opz
    mov P1, #00111111b
    acall opz
    mov P1, #01111111b
    acall opz
    mov P1, #11111111b
    acall opz


    ajmp start

    opz:
    MOV A, R1
    op:
    MOV B, FFh
    o: DJNZ B, o
    DJNZ A, op
    ret


    TIMER_INT:
    PUSH ACC ;AKUMULATOR NA STOS

    SETB P3.2
    JB P3.2, TIM1 ;JESLI KLAWISZ NIE NCISNIETY TO SKOCZ
    MOV A, R1
    CJNE A, #0, TIM2 ;JESLI WARTOSC =0 TO NIE ZMNIEJSZAJ DALEJ, BO

    WYSKOCZY NA 255
    JMP TIM1
    TIM2: DEC R1 ;ZMNIEJSZ O 1 WARTOSĆ W R0

    TIM1: SETB P3.2 ;TO SAMO, TYLE ZE DLA DRUGIEGO KLAWISZA
    JB P3.2, TIM3
    MOV A, R1
    CJNE A, #255, TIM4
    JMP TIM3
    TIM4: INC R1
    TIM3:
    POP ACC ;ODZYSKAJ WARTOSC ACC Z PRZED SKOKU DO PRZERWANIA
    RETI ;POWROT Z PRZERWNIA


    END



    Na razie regulację prędkości rozwiąząłem analogowo. Zamiast Kwarca połaczyłem układ 555 z regulacją częstotliwości. W programie opóźninie zaś zmieniłem na 101b. Ale wolałbym regulację za pomocą przycisków, wygląda wtedy nowoczesniej.

    Pozdr.


    Pozdr.
  • #14 1953848
    bolek
    Poziom 35  
    Posty: 4098
    Pomógł: 86
    Ocena: 298
    ...101b :D
    Z tym mnemonikiem to wina kompilatora, jakiego urzywasz programu? Nie wiem czy problem lezy w samym poleceniu ORG, czy też gdzieś dalej...
  • #15 1954213
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    To raczej nie wina ORG. Bo jak jest coś innego, to nie robi problemów. Ale jak komilowąłem ten program podany w pierwszym poście, to nie było żadnego problemu. Używam programu PASM51 razem z prog.

    Pozdr.
  • #16 1955000
    olekewaagata
    Poziom 25  
    Posty: 638
    Pomógł: 64
    Ocena: 28
    Bolek i Kociątko, literatura do ręki i czytać, bo zwalanie winy na kompilator to już lekka przesada, zwłaszcza jeśli sygnalizuje i ma rację (kompilator)
    Popraw tak jak tu podaję

    ORG 0
    AJMP NOWA_ETYKIETA

    org 0Bh
    JMP TIMER_INT

    NOWA_ETYKIETA:
    MOV IE, #10000010B ;AKTYWACJA PRZERWAN OD T0 + GLOBALNE ZEZWOLENIE

    ORG jest dyrektywą dla kompilatora
    poczytajcie o ORG-u i będziecie wiedzieć dlaczego tak jest
    I jeszcze jedna sprawa, w SFR jest taki bajt co się nazywa SP, o nim też proponuję poczytać w związku ze stosowaniem podprogramów.
    W przeciwnym razie gwarantuję niespodzianki w działaniu programu.
  • #17 1955247
    Jogesh
    Poziom 28  
    Posty: 3676
    Pomógł: 33
    Ocena: 680
    olekewaagata napisał:
    Bolek i Kociątko, literatura do ręki i czytać,

    ORG 0
    AJMP NOWA_ETYKIETA



    Gdybym miał dostęp, to bym poczytał :cry:

    Teraz wywala bład w ORG 0. Cos chyba nie tak... Jak dla sprawdzenia usunę ORG 0 to bład w AJMP NOWA_ETYKIETA. Co może byc?

    Pozdr.

Podsumowanie tematu

✨ Dyskusja dotyczy programowania węża świetlnego z 6 diod LED sterowanego mikrokontrolerem AT89C2051. Autor zmodyfikował program ASM, który steruje kolejnością zapalania LED, i pyta o dodanie funkcji takich jak obsługa przycisków do zmiany prędkości efektu oraz implementację zmiennego opóźnienia. Uczestnicy wyjaśniają, że przyciski powinny być podłączone do masy, a wejścia z przycisków odczytywane w programie w celu modyfikacji zmiennej sterującej czasem opóźnienia. Proponują użycie rejestru (np. R0) do dynamicznej zmiany długości pętli opóźniającej oraz wykorzystanie skoków warunkowych do detekcji stanu przycisków. Podano przykładową pętlę opóźniającą z rejestrami A i B oraz wyjaśniono, jak obliczać czas opóźnienia na podstawie częstotliwości kwarcu i liczby iteracji pętli. Wskazano także na możliwość użycia timera 0 mikrokontrolera z przerwaniami do bardziej precyzyjnego odmierzania czasu i obsługi klawiatury. Autor napotkał problemy z dyrektywą ORG w assemblerze PASM51, co zostało wyjaśnione jako kwestia składni i konieczności poprawnego umieszczenia wektorów przerwań oraz etykiet. Podkreślono znaczenie znajomości dyrektyw assemblera i rejestru SP dla poprawnego działania programu i podprogramów.
Wygenerowane przez model językowy.
REKLAMA