1 Zad
1 Minuta :
2,55 - 255
1 - x
X= 100
2 minuta :
2,55 - 255
2 - x
X=200
Czyli wartości rejestru dla 1 min: 01100100
Dla 2 min: 11001000
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 = 11111111
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
Procesor A wysyła: 1000 1111 -> czyli adres slave to 1000 111
Procesor B wysyła: 0001 1111 -> czyli adres slave to 0001 111
Oba urządzenia będą czytać z urządzenia Slave (1 na 8 miejscu)
Decyzję o tym który z procesor osiągnie połączenie z magistralą, podejmuje magistrala, korzystając z funkcji galwaniczne-AND, która wynika ze sposobu podłączenia wszystkich układów do szyny I2C. Arbitraż straci urządzenie, które jako pierwsze wygeneruje bit o poziomie „1”, podczas gdy reszta wyśle „0”. A więc wysyłając bajty od najstarszego, otrzymujemy:
Procesor A wysyła 1
procesor B wysyła 0
procesor A traci Arbitraż
A więc połączenie nawiąże procesor B. Adres urządzenia z którym nawiąże kontakt: 0001 111, będzie z tego urządzenia czytał dane, a więc następny bajt będzie do procesora.
4. zad
Stos Data 0Fh
Bufor Data 50h
Licz Data 22h
Buforend Data BFh ; deklaracja zmiennych
CSEG
ORG 0
AJMP start
ORG 80h
Start :
MOV SP, #stos
(wypelnianie bufora)
MOV Licz, #00 ; licznik tych bajtów o nieparzystej liczbie jedynek
MOV R0, #Bufor ; przeniesienie liczby do R0
MOV A,@R0 ; przeniesienie do akumulatora tego co w bufor(adresowanie pośrednie)
JNB PSW, dalej ; sprawdzenie PSW, czy jest = 0, jeżeli tak, to skocz do dalej
INC Licz ; inkrementacja licznika
dalej:
INC R0
CJNE R0, Buforend ; sprawdzenie czy adres w R0 jest rowny z tym co w Buforend
END
5. zad
PIEC DATA 30h ;zadeklarowanie zmienne
….
Start:
MOV PIEC, #00 ; zapisanie do zmiennej wart 0
PUSH ACC
PUSH PSW
INC PIEC ;PIEC + 1
MOV A,PIEC ; przeniesienie wartości z piec do akumulatora
CJNE A,#05, dalej ; sprawdzenie czy w akumulatorze jest 5, jeśli nie to skok
CLR TR1 ;wyczyszczenie
MOV R7,#FF ; przenieś do R7 wartosc FF hex
Dalej:
POP PSW ;
POP ACC ; zdjecie ze stosu wart psw i acc
RETI ;powrot do początku programu, kiedy wystapi przerwanie
6. zad
BLAD DATA 30h
Start:
…
MOV A, SBUF
JNB PSW, dalej
MOV A, TB8
CJNE A, #01, jest
JMP kont
dalej:
MOV A, TB8
CJNE A, #00, jest
JMP kont
jest:
CLR BLAD
Kont:
MOV BLAD, #01
…
7. zad
;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. zad
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