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


ZADANIA
Idź do strony Poprzedni  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: Pon 16:51, 14 Cze 2010    Temat postu:

To dobrze, tzn z MUL na pewno skorzystam a DIV to tylko niektóre perełki mają więc chyba nie będę ryzykowałSmile

Przetestowałem i śmiga:)

Kod:
.include "m16def.inc"

.def SRD_H=r18
.def SRD_L=r17
.def SRD=r16
.def temp=r20

.MACRO dodaj
ADD SRD_L,@0
BRCC noc
INC SRD_H
noc:
.ENDMACRO

start:
BRTS wpisz
rjmp start

wpisz:
MOV R7,R6
MOV R6,R5
MOV R5,R4
MOV R4,R3
MOV R3,R2
MOV R2,R1
MOV R1,R0
LD R0,X

srednia:
CLR SRD_H
CLR SRD_L
dodaj R0
dodaj R1
dodaj R2
dodaj R3
dodaj R4
dodaj R5
dodaj R6
dodaj R7
LSR SRD_H
ROR SRD_L
LSR SRD_H
ROR SRD_L
LSR SRD_H
ROR SRD_L
MOV SRD,SRD_L
rjmp start


Ostatnio zmieniony przez rodzio dnia Pon 17:06, 14 Cze 2010, w całości zmieniany 1 raz
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: Pon 17:19, 14 Cze 2010    Temat postu:

przemo napisał:
a t0?

[link widoczny dla zalogowanych]

Uploaded with [link widoczny dla zalogowanych][/img]


Jak zwykle nieoptymalne, ale chyba działa. Wink
Co do treści zadania to mam zastrzerzenie, bo jeśli byłoby to FIFO to jak nowa liczba wpada do R0 to powinna zastąpić starą z R0 - a jeśli kierować się rysunkiem to wygląda to na FILO (First Input Last Output).

[link widoczny dla zalogowanych]

//edit:

Hmm ja założyłem, że wektor X jest automatycznie dodawany do tych rejestrów, ale jeśli faktycznie samemu to trzeba zrobić to w mojej wersji brakuje programu od rodzia znajdującego się w etykiecie wpisz:


Ostatnio zmieniony przez KuKocz dnia Pon 17:23, 14 Cze 2010, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
rodzio
Chuda Jedynka



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


PostWysłany: Pon 17:38, 14 Cze 2010    Temat postu:

Ładne rozwiązanie z tym przesuwaniem się po rejestrach:)

Dobrze jest napisane FIFO - To które weszło pierwsze, wychodzi pierwsze:)
FILO to jest stos.
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: Pon 18:26, 14 Cze 2010    Temat postu:

[link widoczny dla zalogowanych]

[link widoczny dla zalogowanych]


Ostatnio zmieniony przez przemo dnia Pon 18:37, 14 Cze 2010, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
rodzio
Chuda Jedynka



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


PostWysłany: Pon 19:53, 14 Cze 2010    Temat postu:

Zadanie 2 (powyżej)

Za długie to, zmęczyłem sięSmile

Kod:
.include "m16def.inc"

.equ DGT2LED=0x60

.def temp=r16
.def temp1=r17
.def temp2=r18
.equ CLK=0
.equ LDN=1
.equ DIN=2

.MACRO load
LDI ZH,high(DGT2LED<<1)
LDI ZL,low(DGT2LED<<1)
ADD ZL,@0
.ENDMACRO

init:
    LDI YH,0
    LDI YL,20        ;tutaj bedziemy przechowywac wynik
    LDI temp,0xFF   
    OUT DDRA,temp    ;ustawienie portu jako wyjscie
    LDI temp,3        ;bo 3 bajty
   

start:
    LD temp1,X        ;ladujemy do temp1 i temp2 to samo
    LD temp2,X+
    ANDI temp1,0x0F    ;tutaj LSB
    ANDI temp2,0xF0    ;tutaj MSB
    SWAP temp2        ;obracamy by miec na pierwszych bitach

    load temp1        ;makro zeby pobrac konkretny bajt z tablicy dgt
    LPM temp1,Z        ;wynik do temp1
    load temp2        ;to samo dla temp2
    LPM temp2,Z
    ST Y+,temp2        ;wynik wrzucamy do Y
    ST Y+,temp1
    DEC temp       
    BRNE start        ;sprawdzamy czy juz 3bajty

wyslij:
    LDI temp1,6        ;w sumie 6 bajtow do wyslania
bajt:
    LDI temp2,8        ;kazdy bajt ma 8bitow
    LD temp,-Y        ;ladujemy do temp najmlodszy
bit:
    LSR temp        ;przesuwamy do carry
    BRCC zero        ;jak C=1 to jeden jak C=0 to zero
    SBI PORTA,DIN
    rjmp send
zero:
    CBI PORTA,DIN
send:
    SBI PORTA,CLK    ;sygnal taktujacy
    CBI PORTA,CLK
    DEC temp2        ;kolejny bit
    BRNE bit
    DEC temp1        ;kolejny bajt
    BRNE bajt

    SBI PORTA,LDN    ;na koniec sygnal LD
    CBI PORTA,LDN


Dopisałem komentarze:)

Zad 3

Kod:
.def licz1=r17
.def licz2=r18
.def bajt=r20

    BRTS trwa
    SBIC RX,0
    ret
    SET
    lDI licz1,9
    LDI    licz2,8
trwa:
    DEC licz2
    BRNE end
    LDI    licz2,8
    DEC licz1
    BREQ wpisz
    LSL bajt
    SBIS RX,0
    SBR bajt,1
    rjmp end   

wpisz:
    LDI YH,high(RX_BUF)
    LDI YL,low(RX_BUF)
    ST Y,bajt
    LDI YH,high(MSG)
    LDI YL,low(MSG)
    LD bajt,Y
    SBR bajt,0x10
    ST Y,bajt

    CLT
end:
    ret


Teraz doczytałem, że nie można nic trzymać w rejestrach, więc jeszcze każdorazowo musimy ST i LD ale to już mi się nie chce.


Ostatnio zmieniony przez rodzio dnia Wto 17:20, 15 Cze 2010, w całości zmieniany 7 razy
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: Pon 21:20, 14 Cze 2010    Temat postu:

LDI ZH,high(DGT2LED<<1)
LDI ZL,low(DGT2LED<<1)

co to znaczy
Powrót do góry
Zobacz profil autora
rodzio
Chuda Jedynka



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


PostWysłany: Pon 21:29, 14 Cze 2010    Temat postu:

Przesunięcie o jeden bit w lewo.
Przy odczycie z pamięci programu najmłodszy bit rejestru Z jest wykorzystywany do wyboru między MSB i LSB, także adres zaczyna się dopiero od bitu pierwszego.
W sumie można by założyć, ze to uwzględnili i olać.


Ostatnio zmieniony przez rodzio dnia Pon 21:34, 14 Cze 2010, w całości zmieniany 1 raz
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: Pon 21:33, 14 Cze 2010    Temat postu:

rodzio = terminator ;D
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: Pon 23:52, 14 Cze 2010    Temat postu:

jeszcze do tego zadania o liczbach dziewiatkowych. Zrobilem tak ze w jednym bajcie sa 2 cyfry, nie bylo jeszcze takiego rozw wiec wrzucam Smile


Kod:
zakładam ze cyfry sa po 2 w bajcie

2008-t2-z2:

   LDI R26,LOW(NUMBER1)
   LDI R27,HIGH(NUMBER1)   ;X = NUMBER1
   LDI R28,LOW(NUMBER2)
   LDI R29,HIGH(NUMBER2)   ;Y = NUMBER2
   LDI R25,0      ;JESLI R25=0 TO NIEPARZYSTA CYFRA
   CLT               ;T = KOPIA CARRY
   CLC

PETLA:
   LD R17,X
   LD R18,Y
   AND R25,R25      ;USTAWIENIE FLAGI Z
   BREQ OMIN        ;|
   SWAP R17          ;|
   SWAP R18          ;+ JESLI PARZYSTA ZAMIEN TETRADY   
OMIN:
   ANDI R17,$0F      ;|
   ANDI R18,$0F      ;+ MLODSZA TETRADA
   CLC
   BRTC NO_CARRY      ;JESLI T=1 TO USTAW C
   SEC
NO_CARRY:
   ADC R17,R18
   CLT         
   CPI R17,9      ;|
   BRLO MN_9      ;|
   SUBI R17,9      ;|
   SET         ;+ JESLI SUMA>9 TO WPISZ 0 I USTAW CARRY
MN_9:
   LD R19,X
   AND R25,R25
   BREQ NPARZ      ;|
   SWAP R17      ;|
   ANDI R19,$0F      ;|
   OR R17,R19      ;|
   ST X,R17      ;| JESLI PARZYSTA CYFRA TO
   ADIW X,1      ;| WSTAW DO STARSZEJ TETRADY I USTAW
   ADIW Y,1      ;+ SIE NA NASTEPNY BAJT
   RJMP ENDIF
NPARZ:
   ANDI R19,$F0      ;|
   OR R17,R19      ;| JESLI NIEPARZYSTA CYFRA TO
   ST X,R17      ;+ WSTAW DO MLODSZEJ TETRADY
ENDIF:   
   COM R25         ;PARZYSTA/NIEPARZYSTA
   DEC R16
   BRNE PETLA
   CLC         ;|
   BRTC KONIEC      ;|
   SEC         ;+ USTAW CARRY JESLI TRZEBA

KONIEC:
   RET


przetestowane, na pewno działa ;]


Ostatnio zmieniony przez przemo dnia Pon 23:53, 14 Cze 2010, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
YeLLoW
Chuda Jedynka



Dołączył: 23 Maj 2007
Posty: 146
Przeczytał: 0 tematów


PostWysłany: Wto 11:06, 15 Cze 2010    Temat postu:

ma ktoś pomysł na to zadanie. Jest to termin 2 z 2009.

zad.2
napisac program dla AVR do konwersji liczb w kodzie osemkowym (oktalnym) zapisanych w formacie spakowanym (po dwie cyfry na jeden bajt) na liczbe zapisana w naturalnym kodzie binarnym. Pojedyncza cyfra ma postac 0xxx, gdzie x oznacza 0 lub 1. Najstarszy bajt tej liczby wskazywany jest przez adres symboliczny OCT, a jej dlugosc (liczba cyfr) jest podana w rejestrze r16. Jesli liczba cyfr w tej liczbie jest nieparzysta, to najstarszy bajt jest uzupelniony zerami. Wynik konwersji umiescic w pamieci SRAM poczawszy od adresu BIN.

specjalnie na prośbę rodzia zadanie z 86, żeby miał co robić:
zad.3
W pamieci operacyjnej systemu 8086 pod symbolicznym adresem KOLOR znajduje sie lancuch ASCIIZ (lancuch znakow ASCII zakonczony bajtem o wartosci 00h) zawierajacy nazwe dowolnego koloru. Napisac podprogram CzyKolorPodstawowy sprawdzajacy, czy lancuch ten okresla nazwe jednego z trzech kolorow podstawowych tzn. posiada jedna z trzech postaci: "zielony", "czerwony", "niebieski" (wielkosc znakow w podanym lancuchu moze byc dowolna). Zalozyc, ze adres lancucha oraz wynik sprawdzenia przekazywane sa do/z podprogramu za posrednictwem wybranych rejestrow. W rozwiazaniu zamiescic kod zrodlowy z czytelnymi komentarzami.

i jeszcze jedno:
[link widoczny dla zalogowanych]

Uploaded with [link widoczny dla zalogowanych]


Ostatnio zmieniony przez YeLLoW dnia Wto 11:32, 15 Cze 2010, w całości zmieniany 2 razy
Powrót do góry
Zobacz profil autora
shymoon
Tłuste zero



Dołączył: 05 Kwi 2008
Posty: 58
Przeczytał: 0 tematów


PostWysłany: Wto 11:23, 15 Cze 2010    Temat postu:

jest rozwiązane przeze mnie na poprzedniej stronie...
Powrót do góry
Zobacz profil autora
Staszin z Bażin
PRAWIE elektronik - prawie robi...



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

Skąd: gliwice

PostWysłany: Wto 14:31, 15 Cze 2010    Temat postu:

Mam do was pytanko o procek 8086 a dokladnie o rozkaz rcr(albo jakiekolwiek inne przesuwanie). Bo tam jest forma rcr rd,imd
i czy to imd to moze byc dowolna liczba bo taborek cos mowil ze jesli chcemy przesunac o wiecej niz 1 to trzeba wrzucic to do Cl i wpisac rcr rd,Cl??

Drugie pytanko przy czym i w ktorym procesorze uzywa sie # i $ bo nie pamietam
Powrót do góry
Zobacz profil autora
rodzio
Chuda Jedynka



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


PostWysłany: Wto 14:41, 15 Cze 2010    Temat postu:

Można wpisywać większą niż 1Smile

$ to hex przy AVR na pewno. Haszcza nie kojarzę.
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: Wto 14:44, 15 Cze 2010    Temat postu:

# był z tego co kojarzę tylko przy zadawaniu wartości liczbowej (adresowanie natychmiastowe) w 8051.
Powrót do góry
Zobacz profil autora
Gzeho
Chuda Jedynka



Dołączył: 05 Paź 2008
Posty: 107
Przeczytał: 0 tematów

Skąd: z wyższego roku

PostWysłany: Wto 15:28, 15 Cze 2010    Temat postu:

Jesteś rodziu pewny? Bo ja nawet tak mam napisane na liście, że jeśli IMD to 1, a jak nie to licznik Neutral

Dobra to odnośnie tych liczb bo też mi się to smoli, jak wpisać do procków liczbę binarnie(w avr chyba 0bxxxxxxxx) hex(w avr $xx) i liczba cyframi (np. 55) ??
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 Poprzedni  1, 2, 3, 4  Następny
Strona 2 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