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
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