Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
rodzio
Chuda Jedynka
Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów
|
Wysłany: Śro 13:43, 16 Cze 2010 Temat postu: Pierwszy termin |
|
|
Zad 1
W oparciu o mikrokontroler AVR z wbudowanym przetwornikiem AD zrealizowany został woltomierz cyfrowy pokazany na rysunku. Przetwornik AD został skonfigurowany do pracy w trybie "Free running" (konwersja realizowana jest w sposób ciągły, po zakończeniu pojedynczej konwersji wywoływany jest program obsługi przerwania) z wybranym wewnętrznym źródłem napięcia referencyjnego Vref=2.56V oraz aktywnym wejściem ADC0 (PA0). Napisać program obsługi przerwania (w języku asembler) pochodzącego od przetwornika AD, zadaniem którego jest odczyt wyniku konwersji (dostępnym w postaci 10 bitowej liczby bez znaku w rejestrach ADCH:ADCL z wyrównaniem do lewego najbardziej znaczącego bitu) oraz przedstawienie go w postaci dziesiętnej na dołączinych wyświetlaczach LED. Wynik powinien być wyrażony w woltach z rodzielczością 10mV.
PD - 1V PC - 0.1V PB - 0.01V
ADC=(1024*Vin)/Vref
Kod: | .MACRO zamien
LDI ZH,(SEG<<1)
LDI ZL,(SEG<<1)
ADD ZL,@0
.ENDMACRO
PUSH R1 ;itd R16, R17, R18 ; wysyłamy na stos
CLR R16 ;itd R17, R18
IN R1,ADCH ;pobranie wyniku
TST R1 ;sprawdzamy czy nie jest zerem
BREQ DALEJ ;jak zero to przeskakujemy do konwersji na 7SEG
NEXT: ;rozpisanie na setki/dziesiatki/jednosci
INC R16 ;jednosci
CPI R16,10 ;jak 10 to zerujemy i zwiekszamy dziesiatki
BRNE NX
CLR R16 ;i tak dalej...
INC R17
CPI R17,10
BRNE NX
CLR R17
INC R18
NX:
DEC R1
BREQ DALEJ ;jak 0 to konczymy
RJMP NEXT
DALEJ:
zamien R16 ;zaladowanie adresu potrzebnej tablicy
LPM R16,Z ;wpisanie do r16 skonwertowanego formatu
zamien R17
LPM R17,Z
zamien R18
LPM R18,Z
ANDI R18,0x3F ; kropka
OUT PORTB,R16 ; wysłanie na port
OUT PORTC,R17
OUT PORTD,R18
POP R1 ;itd R16, R17, R18
RETI
SEG:
.DB 0b11100000; 0 (aktywne stanem niskim)
.DB 0b11111001; 1
itd. |
Obniżanie oceny za m.in.
- Brak odłożenia na stos
- Ustawienia portów w przerwaniu
- Brak kropki przy .DB
- Wstawienie tablicy do przerwania
Zad 2
W pamięci operacyjnej systemu 8086 pod symbolicznym adresem TextSeg:TextOffs umieszczony został bufor edytora tekstowego o rozmiarze nie przekraczającym 64KB. Napisać program w języku asembler, który zmodyfikuje znajdujący się w buforze tekst tak, aby wyeliminować z niego znaki powrotu kartki i przejścia do nowej linii (para bajtów 0dh 0ah) - Enter. Znaki te powinny być zastąpione tylko jednym znakiem spacji (bajt 20h). Założyć, że koniec całego tekstu zaznaczono znakiem CtrZ (bajt 00h). Policzyć, o ile bajtów zmniejszy się rozmiar tekstu - wynik ten umieścić w rejestrze DX mikroprocesora.
Kod: | MOV AX,TextSeg
MOV DS,AX
MOV SI,TextOff
NEXT:
LODSB ;zaladowanie do AL bajtu, si++
OR AL,AL ;sprawdzenie czy nie 00h
JE KONIEC ;jesli Z=1 to koniec
CMP AL,0dh ;porownaj do szukanego 0dh
JNE NEXT ;jesli nie znalazl to do poczatku
MOV [SI-1],20h ;jesli znalazl to zamieniamy
INC DX
PRZESUWANIE:
PUSH SI ;odkladamy na stos, bo sie przyda
INC SI ;TUTAJ PRZESUWAMY WSZYSTKO
NX:
LODSB ;ladujemy do AL
MOV [SI-2],AL ;-2 bo zasepujemy znak 0ah
OR AL,AL ;sprawdzanie konca
JNE NX ;jak nie to dalej
POP SI ;jak tak to sciagamy ze stosu
JMP NEXT ;i wracamy
KONIEC: END
|
Oba przetestowane w symulatorze, działają poprawnie.
Ostatnio zmieniony przez rodzio dnia Pią 23:35, 18 Cze 2010, w całości zmieniany 18 razy
|
|
Powrót do góry |
|
|
|
|
deeb
PRAWIE elektronik - prawie robi...
Dołączył: 10 Paź 2006
Posty: 294
Przeczytał: 0 tematów
Skąd: z XORa
|
Wysłany: Śro 14:26, 16 Cze 2010 Temat postu: |
|
|
Czy ktoś wie, od której jutro dr Wyrwoł ma konsultacje?
|
|
Powrót do góry |
|
|
Pablo
PRAWIE elektronik - prawie robi...
Dołączył: 11 Paź 2006
Posty: 228
Przeczytał: 0 tematów
Skąd: Czerwionka-Leszczyny
|
Wysłany: Śro 14:32, 16 Cze 2010 Temat postu: |
|
|
Tu macie treści zadań jakby ktoś potrzebował:
[link widoczny dla zalogowanych]
// pozwoliłem sobie zmniejszyc i obrócić plik - gemis
|
|
Powrót do góry |
|
|
czeladzian
Tłuste zero
Dołączył: 20 Lut 2008
Posty: 35
Przeczytał: 0 tematów
|
Wysłany: Śro 15:38, 16 Cze 2010 Temat postu: |
|
|
potrzebujemy rozwiązania do 2
|
|
Powrót do góry |
|
|
KuKocz
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 25 Paź 2006
Posty: 503
Przeczytał: 0 tematów
Skąd: Jastrzębie Zdrój
|
Wysłany: Śro 16:41, 16 Cze 2010 Temat postu: |
|
|
Ja swój program napisałem w ten oto nieoptymalny sposób, gdzie po każdym znalezieniu entera, przesuwa cała tablicę i zaczyna szukać enterów od początku.
Optymalniej można to było zrobić wykorzystując na raz DI i SI
Proszę powiedzcie, że mój program nie ma błedów i działa, bo muszę za niego maksa dostać
ZAD 2.
Kod: |
LEA SI, TextSeg
XOR DX, DX ; zeruję DX (licznik enterów)
MOV BX,SI ; kopia adresu wskazującego an początek tablicy
NEXT:
MOV AL, [SI] ; załaduj element tablicy
CMP AL, 00h ; sprawdź czy to juz koniec tablicy
JE KONIEC
CMP AL, 0Dh ; sprawdź czy enter
JE DALEJ ; jeśli tak - skocz do DALEJ
INC SI ; jeśli nie, zwiększ adres i wykonaj ponownie
JMP NEXT
DALEJ:
MOV AL, 20h ; zastąp pierwszy bajt entera spacją
MOV [SI], AL
INC SI ; przeskocz o 2 miejsca do przodu
INC SI ; na nastepny element
CALL COPY ; przesun cała tablicę o jedno miejsce
INC DX ; skoro znalazł enter - zwiększ licznik
MOV SI, BX ; przywróc adres początku tablicy,
; aby moc ją przeszukać od nowa
JMP NEXT
KONIEC:
JMP $
COPY:
MOV AL, [SI] ; wrzuc element tablicy do AL
DEC SI ; cofnij się o jedno miejsce w tablicy
MOV [SI], AL ; wklej skopiowany element
CMP AL, 00h ; sprawdź czy skopiowany element to NULL
JE KON ; jeśli tak, to kończ
INC SI ; przeskocz o 2 elementy tablicy
INC SI
JMP COPY
KON:
RET |
Ostatnio zmieniony przez KuKocz dnia Śro 16:42, 16 Cze 2010, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
|
noxon
PRAWIE elektronik - prawie robi...
Dołączył: 15 Lis 2006
Posty: 253
Przeczytał: 0 tematów
Skąd: [TK] bytom
|
Wysłany: Śro 16:57, 16 Cze 2010 Temat postu: |
|
|
wg mnie z pewnoscia brakuje Ci jakiegos licznika, ktory by odliczal czy sprawdziles juz 64kb, w tym przypadku przeleci w "nieskonczonosc" az do konca pamieci.
to tyle na pierwszy rzut oka .
|
|
Powrót do góry |
|
|
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów
Skąd: Bytom
|
Wysłany: Śro 17:03, 16 Cze 2010 Temat postu: |
|
|
Nie nie. On miał sprawdzać, czy nie wystąpiło w buforze 00h i to był koniec. Według mnie to zakładaliśmy, że koniec bufora musi w tym 64kB kiedyś nastąpić, więc też licznika nie robiłem.
|
|
Powrót do góry |
|
|
noxon
PRAWIE elektronik - prawie robi...
Dołączył: 15 Lis 2006
Posty: 253
Przeczytał: 0 tematów
Skąd: [TK] bytom
|
Wysłany: Śro 17:06, 16 Cze 2010 Temat postu: |
|
|
w sumie racja, ja jednak profilaktycznie zrobilem, roznie to bywa
|
|
Powrót do góry |
|
|
rodzio
Chuda Jedynka
Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów
|
Wysłany: Śro 17:10, 16 Cze 2010 Temat postu: |
|
|
Po przekroczeniu adresu FFFFh zacząłbyś od początku, więcej nie ma:)
Ach dlaczego moja instr nie wiedziała, że nie da się robić CPI na niskich rejestrach:>
|
|
Powrót do góry |
|
|
Misiael
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 14 Paź 2006
Posty: 502
Przeczytał: 0 tematów
|
Wysłany: Śro 17:13, 16 Cze 2010 Temat postu: |
|
|
niemiecka moze ?
|
|
Powrót do góry |
|
|
przemo
Tłuste zero
Dołączył: 08 Sty 2008
Posty: 96
Przeczytał: 0 tematów
|
Wysłany: Śro 18:08, 16 Cze 2010 Temat postu: |
|
|
Cytat: | Czy ktoś wie, od której jutro dr Wyrwoł ma konsultacje? |
Wydaje mi sie ze mowil, ze od 10, ale 100% nie wiem
|
|
Powrót do góry |
|
|
rob
Chuda Jedynka
Dołączył: 15 Cze 2007
Posty: 145
Przeczytał: 0 tematów
|
Wysłany: Śro 18:09, 16 Cze 2010 Temat postu: |
|
|
Jak to jest z tym adresowaniem? W zadaniu było napisane, że bufor jest pod adresem symbolicznym TextSeg:TextOffs. W programie powyżej nie widzę w ogóle TextOffs.
Pytanie kto sprawdza które zadania?
|
|
Powrót do góry |
|
|
Madafak
PRAWIE elektronik - prawie robi...
Dołączył: 12 Paź 2006
Posty: 290
Przeczytał: 0 tematów
Skąd: stamtąd
|
Wysłany: Śro 18:11, 16 Cze 2010 Temat postu: |
|
|
rob napisał: | [...]
Pytanie kto sprawdza które zadania? |
Wyrwoł pierwsze, Taborek drugie.
|
|
Powrót do góry |
|
|
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów
Skąd: Bytom
|
Wysłany: Śro 18:14, 16 Cze 2010 Temat postu: |
|
|
No właśnie Kukocz
Nie powinieneś mieć czasami tak, że do SS ładujemy TextSeg a do SI dajemy TextSeg ładowane normalnie za pomocą MOV? Bo jak już się używa rozkazu LEA to raczej powinien być cały adres TextSeg:TextSeg i on wyciąga wtedy sam offset do SI. Tam mi się przynajmniej wydaje.
|
|
Powrót do góry |
|
|
Misiael
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 14 Paź 2006
Posty: 502
Przeczytał: 0 tematów
|
Wysłany: Śro 18:14, 16 Cze 2010 Temat postu: |
|
|
rob napisał: | Jak to jest z tym adresowaniem? W zadaniu było napisane, że bufor jest pod adresem symbolicznym TextSeg:TextOffs. W programie powyżej nie widzę w ogóle TextOffs.
|
na moj nie zbyt mądry leb :
mov ax,seg(textseg)
mov ds,ax
mov si,offset(textoffs)
i potem jak cos mov al,ds:[si] ?
Ostatnio zmieniony przez Misiael dnia Śro 18:16, 16 Cze 2010, w całości zmieniany 2 razy
|
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
|