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: 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ł
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 |
|
 |
|
 |
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: 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.
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 |
|
 |
rodzio
Chuda Jedynka
Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów
|
Wysł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 |
|
 |
przemo
Tłuste zero
Dołączył: 08 Sty 2008
Posty: 96
Przeczytał: 0 tematów
|
Wysł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 |
|
 |
rodzio
Chuda Jedynka
Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów
|
Wysłany: Pon 19:53, 14 Cze 2010 Temat postu: |
|
|
Zadanie 2 (powyżej)
Za długie to, zmęczyłem się
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 |
|
 |
przemo
Tłuste zero
Dołączył: 08 Sty 2008
Posty: 96
Przeczytał: 0 tematów
|
Wysł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 |
|
 |
rodzio
Chuda Jedynka
Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów
|
Wysł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 |
|
 |
Misiael
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 14 Paź 2006
Posty: 502
Przeczytał: 0 tematów
|
Wysłany: Pon 21:33, 14 Cze 2010 Temat postu: |
|
|
rodzio = terminator ;D
|
|
Powrót do góry |
|
 |
przemo
Tłuste zero
Dołączył: 08 Sty 2008
Posty: 96
Przeczytał: 0 tematów
|
Wysł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
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 |
|
 |
YeLLoW
Chuda Jedynka
Dołączył: 23 Maj 2007
Posty: 146
Przeczytał: 0 tematów
|
Wysł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 |
|
 |
shymoon
Tłuste zero
Dołączył: 05 Kwi 2008
Posty: 58
Przeczytał: 0 tematów
|
Wysłany: Wto 11:23, 15 Cze 2010 Temat postu: |
|
|
jest rozwiązane przeze mnie na poprzedniej stronie...
|
|
Powrót do góry |
|
 |
Staszin z Bażin
PRAWIE elektronik - prawie robi...
Dołączył: 10 Paź 2006
Posty: 169
Przeczytał: 0 tematów
Skąd: gliwice
|
Wysł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 |
|
 |
rodzio
Chuda Jedynka
Dołączył: 11 Sty 2007
Posty: 127
Przeczytał: 0 tematów
|
Wysłany: Wto 14:41, 15 Cze 2010 Temat postu: |
|
|
Można wpisywać większą niż 1
$ to hex przy AVR na pewno. Haszcza nie kojarzę.
|
|
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: 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 |
|
 |
Gzeho
Chuda Jedynka
Dołączył: 05 Paź 2008
Posty: 107
Przeczytał: 0 tematów
Skąd: z wyższego roku
|
Wysł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
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 |
|
 |
|
|
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
|
|