Elektronika i Telekomunikacja POLSL
Forum Elektroników Wydziału AEI Politechniki Śląskiej
FAQ  ::  Szukaj  ::  Użytkownicy  ::  Grupy  ::  Galerie  ::  Rejestracja  ::  Profil  ::  Zaloguj się, by sprawdzić wiadomości  ::  Zaloguj


Pierwszy termin
Idź do strony 1, 2, 3, 4  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr VIII / uP-lab
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
rodzio
Chuda Jedynka



Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
deeb
PRAWIE elektronik - prawie robi...



Dołączył: 10 Paź 2006
Posty: 294
Przeczytał: 0 tematów

Skąd: z XORa

PostWysł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
Zobacz profil autora
Pablo
PRAWIE elektronik - prawie robi...



Dołączył: 11 Paź 2006
Posty: 228
Przeczytał: 0 tematów

Skąd: Czerwionka-Leszczyny

PostWysł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
Zobacz profil autora
czeladzian
Tłuste zero



Dołączył: 20 Lut 2008
Posty: 35
Przeczytał: 0 tematów


PostWysłany: Śro 15:38, 16 Cze 2010    Temat postu:

potrzebujemy rozwiązania do 2 Smile
Powrót do góry
Zobacz profil autora
KuKocz
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 25 Paź 2006
Posty: 503
Przeczytał: 0 tematów

Skąd: Jastrzębie Zdrój

PostWysł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 Smile
Proszę powiedzcie, że mój program nie ma błedów i działa, bo muszę za niego maksa dostać Confused Wink

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
Zobacz profil autora
noxon
PRAWIE elektronik - prawie robi...



Dołączył: 15 Lis 2006
Posty: 253
Przeczytał: 0 tematów

Skąd: [TK] bytom

PostWysł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
Zobacz profil autora
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów

Skąd: Bytom

PostWysł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
Zobacz profil autora
noxon
PRAWIE elektronik - prawie robi...



Dołączył: 15 Lis 2006
Posty: 253
Przeczytał: 0 tematów

Skąd: [TK] bytom

PostWysłany: Śro 17:06, 16 Cze 2010    Temat postu:

w sumie racja, ja jednak profilaktycznie zrobilem, roznie to bywa Razz
Powrót do góry
Zobacz profil autora
rodzio
Chuda Jedynka



Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
Misiael
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 14 Paź 2006
Posty: 502
Przeczytał: 0 tematów


PostWysłany: Śro 17:13, 16 Cze 2010    Temat postu:

niemiecka moze ?
Powrót do góry
Zobacz profil autora
przemo
Tłuste zero



Dołączył: 08 Sty 2008
Posty: 96
Przeczytał: 0 tematów


PostWysł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 Razz
Powrót do góry
Zobacz profil autora
rob
Chuda Jedynka



Dołączył: 15 Cze 2007
Posty: 145
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
Madafak
PRAWIE elektronik - prawie robi...



Dołączył: 12 Paź 2006
Posty: 290
Przeczytał: 0 tematów

Skąd: stamtąd

PostWysł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
Zobacz profil autora
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów

Skąd: Bytom

PostWysłany: Śro 18:14, 16 Cze 2010    Temat postu:

No właśnie Kukocz Smile
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
Zobacz profil autora
Misiael
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 14 Paź 2006
Posty: 502
Przeczytał: 0 tematów


PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr VIII / uP-lab Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2, 3, 4  Następny
Strona 1 z 4

 
Skocz do:  
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
  ::  
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group   ::   template subEarth by Kisioł. Programosy   ::  
Regulamin