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

Zadania z mikroprocesorów: ADC, opóźnienie 1s, kolizja na magistrali I2C

Pati22 16 Sty 2012 15:18 1972 5
REKLAMA
  • #1 10405306
    Pati22
    Poziom 1  
    Posty: 1
    Proszę o pomoc w rozwiązaniu zadań niżej moje rozwiązania:
    1. Na wejście 8-mio bitowego przetwornika ADC podawane jest napięcie wzrastające liniowo od zera do
    wartości 10V z szybkością wzrostu 1 V / minutę. Proszę przyjąć, że ADC „próbkuje” sygnał co minutę i
    podać wartości rejestru odczytu ADC (binarnie, lub szesnastkowo) w kolejnych 10 minutach, Napięcie
    referencyjne ADC wynosi 2.55 V.
    2. Potrzebujemy, by w programie dla 8-mio bitowego mikro-kontrolera, o cyklu maszynowym wynoszącym
    500ns nastąpiło opóźnienie pomiędzy wykonaniem dwóch instrukcji.
    a: ---- instrukcja
    opóźnienie
    b: ----- instrukcja
    Opóźnienie ma wynosić 1 sekundę. Przy rozwiązaniu można podać/założyć które z użytych komend są
    jedno, a które dwu-cyklowe.
    3. Do magistrali I2C przyłączonych jest wiele procesorów. W pewnym momencie dwa z nich rozpoczynają
    równocześnie transmisję (, która, jak wiadomo, po sekwencji „start” rozpoczyna się od wysyłania adresu
    „slave'a”, z którym ma być nawiązane połączenie). Procesor A wysyła bajt o zawartości 0x8F, a procesor
    B bajt o treści 0x1F. Który procesor uzyska dostęp do magistrali. Jaki jest adres urządzenia, z którym
    „zwycięski” procesor nawiąże kontakt? Czy kolejny bajt wysyłany będzie od czy do procesora, który
    uzyskał dostęp?
    4. Rejestr PSW (Program Status Word) na pozycji 0 ma bit parzystości. Jest on ustawiany (na 1) jeśli
    aktualnie liczba jedynek w ACC jest nieparzysta, zerowany w przeciwnym, wypadku. W obszarze
    pamięci danych od adresu 0x50 do adresu 0xAF znajdują się bajty o różnych wartościach. Napisz
    program zliczający liczbę bajtów o nieparzystej liczbie jedynek.
    5. Mikroprocesor wyposażony jest w 8-bitowy „timer”, który skonfigurowany jest tak, że przepełnienie
    powoduje przerwanie programowe. Timer zlicza cykle gdy ustawiony jest bit o nazwie TR1 (jeśli ten bit
    jest 0, to timer nie zlicza cykli). Należy napisać podprogram obsługi przerwania od tego Timer'a tak, by
    po piątym przepełnieniu ustawił rejestr R7 na wartość 0xFF oraz przestał zliczać cykle maszynowe.
    6. Załóżmy, że interfejs USART procesora skonfigurowany jest tak, że przesyła i odbiera 9 bitów danych (8
    bitów, pełny bajt odbierany jest do rejestru SBUF, a bit dziewiąty do bitu o nazwie TB8). Zmienna BLAD
    ma być wyzerowana, gdy odczytany bajt z SBUF ma nieparzystą liczbę jedynek i równocześnie TB8 jest
    ustawione na 1 lub gdy SBUF ma parzystą liczbę jedynek i TB8 jest zerem. W przeciwnych wypadkach
    BLAD ma być różny od zera. Napisz fragment programu ustawiający właściwą wartość BLAD.
    7. Rozpoznaj funkcję poniższego programu i opisz sens każdej linii kodu:
    ;SUBROUTINE TOINT
    TOINT:
    CLR C
    JZ toend
    MOV R4,#00H
    toi1:
    RRC A
    INC R4
    JNC toi1
    MOV A,R4
    toend:
    RET
    ;------------------------------------------------------------------------------
    8. Napisz podprogram, który wywołany zastaje w akumulatorze liczbę całkowitą z zakresu 0-7,
    a w wyniku zmienia ACC tak że ma on ustawiony jeden bit na pozycji odpowiadającej tej liczbie
    całkowitej.

    Moje rozwiązania:

    1 Zad
    1 Minuta : 2,55 – 4095
    1 – x
    X= 1605

    2 minuta : 2,55 – 4095
    2 - x
    X=3211
    Czyli wartości rejestru dla 1 min: 11001000101
    Dla 2 min: 110010001011
    Dla 3 min i więcej jest już osiągnięty maksymalny sygnał który może być przetworzony czyli wartości rejestru odczytu ADC =1
    2 zad

    z obliczen wyszlo że potrzebujemy 2000000 cykli;

    1 s – 1000000000 ns
    Xs – 500 ns

    X= 0,0000005 s

    1 cykl – 0,0000005 s
    X cykli – 1s
    X = 2000000

    program:

    stala EQU 999 999

    start:
    mov R3, #stala // dwa cykle

    petla:
    DJNZ R3, petla //dwa cykle za każdym razem – petla przechodzi 999 999 , 999 999*2 +2 = 2000 000

    3. zad

    A – 0E = 0000 1110
    B – 1F = 0001 1111

    Procesor A uzyska dostęp do magistrali dlatego że bit zerowy jest rowny 0 a wiec master będzie pisać
    Adres urządzenia z którym nawiąże kontakt to : 0000 111

    Pytanie co w przypadku gdy zawartośc bajtow wysylanych przez procesory to:
    A - 8F = 1000 1111
    B-1F= 0001 1111

    4.
    Stos Data 0Fh
    Bufor Data 50h
    Licz Data 22h
    Buforend Data BFh

    CSEG
    ORG 0

    AJMP start
    ORG 80h

    Start
    MOV SP, #stos
    (wypelnianie bufora)

    MOV Licz, #00
    MOV R0, #Bufor
    MOV A,@R0
    JNB PSW, dalej
    INC Licz

    dalej:

    INC R0
    CJNE R0, Bufend, ..

    END

    5.

    DO PIEC DATA 30h
    ….
    Start:

    MOV DO PIEC, #00

    PUSH ACC
    PUSH PSW

    INC DO PIEC
    MOV A,DO PIEC
    CJNE A,#05, dalej
    CLR TR1
    MOV R7,#FF

    Dalej:
    POP PSW
    POP
    ACC
    RETI

    6. zad nie mam pojęcia :(

    7.
    ;SUBROUTINE TOINT
    TOINT:
    CLR C - zerowanie znacznika przeniesienia C
    JZ toend - spr wartosc akumulatora, jeśli =0 to do PC jest dodawane przesunięcie toend ??
    MOV R4,#00H – zerowany jest rejestr R4
    toi1:
    RRC A - zawartosc a przesuwana w prawo o 1 bit z uwzględnieniem C
    INC R4 – dodajemy 1 do wartosci w R4
    JNC toi1 – spr jest bit przeniesienia C jesli =0 to do rejestru PC dodajemy ?
    MOV A,R4 - R4 wpisujemy do akumulatora
    toend:
    RET – adres powrotu z podprogramu wpisywany do licznika PC

    8.
    CJNE A,#00, JEDEN
    MOV A, #0000 0001B
    SJMP KONIEC
    JEDEN:
    CJNE A,#01,DWA
    MOV A,#0000 0010B
    SJMP KONIEC
    DWA

    KONIEC:
    NOP
    END
  • REKLAMA
  • #2 10405471
    korrus666
    Poziom 40  
    Posty: 5219
    Pomógł: 584
    Ocena: 476
    Ad1. Nie wiem jak ty liczysz pierwsze zadanie ale twoje wyniki są jakieś bezsensowne. Samo zadanie również jest bez sensu bo napięcie referencyjne ma 2,55 V a napięcie na wejściu rośnie do 10 V. Chyba że jest jakiś dzielnika ale w treści zadanie nie ma na ten temat nic.
    Po minucie masz 1V czyli liczymy tak
    2,55 V = 255 (bo to jest maks do zapisania na 8 bitach) a 1V = x zatem:
    x = 255/2,55 = 100 zatem binarnie to jest 01100100
    Po drugiej minucie 2V to x = 2x255/2,55 = 200 to binarnie 11001000
    ITD..


    Ad2 . N ma szansy działać bo to maszyna 8 bitowa maks do rejestru możesz zapisać 255.
    Ad3. Coś namieszałeś z danymi bo ja tam nie widzę dwóch wariantów danych. W magistrali I2C linie podciągnięte są do 1 zewnętrznymi rezystorami. Zakładając że przy wystawianiu 1 procesor nie ustawia piny na logiczną jedynkę tylko w stan wysokiej impedancji wszystko co jest 1 w jednym procesorze i 0 w drugim będzie w efekcie zerem. Wystawiony zostanie bajt 0000 1111 ale co się stanie potem to już chyba loteria. Chociaż uważam że żaden z procesorów nie będzie kontynuował komunikacji bo oba szukały innego adresu.
    Reszty nie podejmuje się analizować.
  • REKLAMA
  • #3 10408497
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 10408563
    korrus666
    Poziom 40  
    Posty: 5219
    Pomógł: 584
    Ocena: 476
    albertb napisał:
    korrus666 napisał:

    ...
    Po minucie masz 1V czyli 2,55 V = 254 (bo to jest maks do zapisania na 8 bitach)
    ...
    Ad2 . N ma szansy działać bo to maszyna 8 bitowa maks do rejestru możesz zapisać 254.


    ???
    Można prosić o źródło tych rewelacji?

    Albert

    To nie rewelacje tylko źle mnie zrozumiałeś po czyli są obliczenia.

    Nie powiesz mi przecież że przy 8 bitowym rejestrze to ma szanse działać:
    stala EQU 999 999
    start:
    mov R3, #stala // dwa cykle
    petla:
    DJNZ R3, petla
  • REKLAMA
  • #5 10408674
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA