eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaPłytka z MOS6502 niestabilna do czasu dotknięcia masy › Re: Płytka z MOS6502 niestabilna do czasu dotknięcia masy
  • Data: 2018-08-12 21:43:37
    Temat: Re: Płytka z MOS6502 niestabilna do czasu dotknięcia masy
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 12.08.2018 21:19, Sebastian Biały wrote:

    > Która była ładowana z czego?

    Pętla opóźniająca była osobnym podprogramem, który był wywoływany po
    każdym zmianie stanu diody. Wewnątrz tego podprogramu znajdowały się
    właściwie tylko dwie pętle, jedna zagnieżdżona w drugiej. Pierwsza
    operowała na rejestrze X, druga na Y. Każdy z nich był inicjowany
    wartością 0xFF i po każdym przejściu zmniejszany o jeden.


    > Ponadto jednak w tego typu projekcie wykluczyłbym najpierw hardware.
    > 6502 można solidnie przetaktować przez zniekształcony sygnał zegarowy,
    > wtedy częśc funkcjonalności nie działa a takim małym programie czasem
    > nie widać że np. się sam resetuje. Jak wygląda generator zegara?

    To była moja pierwsza myśl. Na oscyloskopie wszystko wygląda ok. To
    znaczy sygnał zegarowy bezpośrednio na wyjściu generatora SG51P jest
    minimalnie "postrzępiony" na górze, jednak po przejściu przez dzienlnik
    na 74HCT74 robi się z tego całkiem ładny sygnał, niemalże kwadrat z
    lekko zaokrąglonymi krawędziami.


    > Niezainicjowania zmienna/rejestr, błąd w sofcie. Mozliwe, choć watpliwe
    > że wina asemblera/kompilatora. Czego używasz?
    >
    > Pokaż źródła jednego i drugiego. Jeszcze coś pamiętam z asm 6502.

    Przy większych projektach używam cc65, ale tutaj posłużyłem się prostym
    webowym narzędziem asm80.com.

    Pierwszy program - ten, z któ(C)ym były problemy:

    CTRL EQU $0BC00

    .ORG $0C000
    CLD
    LDX #$FF
    TXS

    LOOP:
    LDA #$04
    STA CTRL

    JSR DELAY

    LDA #$80
    STA CTRL

    JSR DELAY

    JMP LOOP

    DELAY:
    LDX $FF
    DELAY_LOOP1:
    LDY $FF
    DELAY_LOOP2:
    NOP
    DEY
    BNE DELAY_LOOP2
    DEX
    BNE DELAY_LOOP1
    RTS

    .ORG $FFFE
    DW $0C000


    Drugi program - ten, który teraz zdaje się działać prawidłowo:

    TRL EQU $0BC00

    .ORG $C000
    INIT:
    LDX #$FF
    TXS
    LDA #$80
    STA CTRL
    LDA #$01
    STA DIODE
    LDA #$FF
    STA TIMER
    LDA #$FF
    STA TIMER+1
    LOOP:
    JSR HANDLE_TIMER
    JMP LOOP


    HANDLE_TIMER:
    DEC TIMER
    BNE HT_RET
    LDA #$FF
    STA TIMER
    DEC TIMER+1
    BNE HT_RET
    LDA #$FF
    STA TIMER+1
    ; tutaj wykonujemy nasz kod
    LDA DIODE
    BEQ SET_DIODE
    LDA #$04
    STA CTRL
    LDA #$00
    STA DIODE
    JMP HT_RET
    SET_DIODE:
    LDA #$80
    STA CTRL
    LDA #$01
    STA DIODE
    HT_RET:
    RTS


    IRQ:
    RTI

    NMI:
    RTI

    .ORG $0200
    TIMER: DS 2
    DIODE: DS 1

    .ORG $FFFA
    DW NMI
    DW INIT
    DW IRQ

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: