Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj siępierwszy program w assembler, początkujący, edsim51
Moderatorzy:Jacek Bogusz, procesorowiec, Łukasz Krysiewicz, Moderatorzy
Witam, mam mały problem z pisaniem programów w assemblerze, potrzebuje napisać 3 programy:
1) napisz program w assemblerze ,który po wciśniecie dokładnie 2 przycisków z pośród sw0 , sw1 i sw2 powoduje miganie LED 0, inne ustawienie klawiszy dioda nie reaguje
2) napisz program, który po wciśnięciu jednego z przycisków sw0-sw7 powoduje przesuwanie zapalonej diody LED na diodach LED 0-7, w sposób cykliczny, ale jeżeli nie wciśniemy żadnego klawisza LED nie przesuwa się, a jeżeli wciśnięty jest nie parzysty to LED przesuwa sie o 1, a jeżeli parzysty o 2 pozycje, jeśli wciśniemy więcej niż 1 przycisk to nie działa
3)napisz program, który po wciśnięciu przycisku parzystego powoduje przesuniecie LED w prawo, a jeżeli naciśniemy nie parzysty to w lewo, sw0-7, led0-7
programy są testowane na symulatorze edsim51, próbowałem coś pisać ale mi nie działa albo wyskakują błędy, czy mógłby mi ktoś pomruż??
LED p1.0-p1.7 sterowana stanem niskim, sw p2.0-p2.7 po wciśnięciu jest stan niski na porcie. Schemat całego układu: http://www.mytutorialcafe.com/image/logicDiagramBW.gif
Z góry dziękuję za pomoc:)
1) napisz program w assemblerze ,który po wciśniecie dokładnie 2 przycisków z pośród sw0 , sw1 i sw2 powoduje miganie LED 0, inne ustawienie klawiszy dioda nie reaguje
2) napisz program, który po wciśnięciu jednego z przycisków sw0-sw7 powoduje przesuwanie zapalonej diody LED na diodach LED 0-7, w sposób cykliczny, ale jeżeli nie wciśniemy żadnego klawisza LED nie przesuwa się, a jeżeli wciśnięty jest nie parzysty to LED przesuwa sie o 1, a jeżeli parzysty o 2 pozycje, jeśli wciśniemy więcej niż 1 przycisk to nie działa
3)napisz program, który po wciśnięciu przycisku parzystego powoduje przesuniecie LED w prawo, a jeżeli naciśniemy nie parzysty to w lewo, sw0-7, led0-7
programy są testowane na symulatorze edsim51, próbowałem coś pisać ale mi nie działa albo wyskakują błędy, czy mógłby mi ktoś pomruż??
LED p1.0-p1.7 sterowana stanem niskim, sw p2.0-p2.7 po wciśnięciu jest stan niski na porcie. Schemat całego układu: http://www.mytutorialcafe.com/image/logicDiagramBW.gif
Z góry dziękuję za pomoc:)
Re: pierwszy program w assembler, początkujący, edsim51
Na początek pokaż kod i błędy z kompilacji.
Re: pierwszy program w assembler, początkujący, edsim51
mov c,p2.0
mov 00h,c
mov c,p2.1
mov 01h,c
mov c,p2.2
mov 02h,c
mov R1,03h
mov c,p2.0
cpl c
addc a,acc
mov c,p2.1
cpl c
addc a,acc
mov c,p2.3
cpl c
addc a,acc
sw0 equ p1.1
to nie są wszystkie programy które próbowałem pisac, bo nie wszystkie sobie zapisywałem, wie ktos jak napisać te programy??
mov 00h,c
mov c,p2.1
mov 01h,c
mov c,p2.2
mov 02h,c
mov R1,03h
mov c,p2.0
cpl c
addc a,acc
mov c,p2.1
cpl c
addc a,acc
mov c,p2.3
cpl c
addc a,acc
sw0 equ p1.1
to nie są wszystkie programy które próbowałem pisac, bo nie wszystkie sobie zapisywałem, wie ktos jak napisać te programy??
Re: pierwszy program w assembler, początkujący, edsim51
Można wiedzieć co to są za zadania ? Zaliczenia, czy może kolega uczy się podstaw? (trochę dziwny ten kod.)
Zadanie proste do zrobienia. (mogę pomóc w innym języku, o ile zależy ci na tzw. działającej sztuce)
Zadanie proste do zrobienia. (mogę pomóc w innym języku, o ile zależy ci na tzw. działającej sztuce)
Re: pierwszy program w assembler, początkujący, edsim51
Są to zadania na pracownie, miałem te programy napisać w ciągu 4 lekcji, jednak nikt nie dał rady, a teraz mam zrobić z tego sprawozdanie, niestety nie mogę mieć tego w innym języku musi być to assembler, wiem że prościej byłoby napisać te programy w c++
Re: pierwszy program w assembler, początkujący, edsim51
Na forum nikt za nikogo odrabia zadan ale jesli ktos ma problem to mozna naprowadzic gdzie robi blad tu masz kurs radzia z prosta obsluga led oraz klawiszy
Re: pierwszy program w assembler, początkujący, edsim51
dziękuje wszystkim za pomoc jak będę jeszcze pomocy w czymś to napisze
Re: pierwszy program w assembler, początkujący, edsim51
Jak chcesz to ci wyślę kody źródłowe w języku graficznym. (zobaczysz jak to wszystko kręci wirtualny symulator i może wpadnie ci do głowy pomysł na stworzenie sensownego kodu w asm).dziękuje wszystkim za pomoc jak będę jeszcze pomocy w czymś to napisze
Re: pierwszy program w assembler, początkujący, edsim51
przeczytałem kilka jakiś poradników/książek o assemblerze i już napisałem te programy, we wtorek będę musiał napisać kolejne programy wiec jak coś to napisze
Re: pierwszy program w assembler, początkujący, edsim51
pierwszy i trzeci jest prosty.
Ciekaw jestem jak żeś rozwiązał to drugie zadanie, bo tam akurat trzeba pogłówkować nad składnią logiczną, a w asm nie ma drogi na skróty. W języku graficznym też nie jest to aż takie proste zadanie do zrobienia. (nie jeden absolwent dobrej uczelni nie dał by rady)
Ciekaw jestem jak żeś rozwiązał to drugie zadanie, bo tam akurat trzeba pogłówkować nad składnią logiczną, a w asm nie ma drogi na skróty. W języku graficznym też nie jest to aż takie proste zadanie do zrobienia. (nie jeden absolwent dobrej uczelni nie dał by rady)
Re: pierwszy program w assembler, początkujący, edsim51
jak już zrozumiałem o co chodzi to te programy są łatwe, najtrudniej było napisać pierwszy program później było już z górki. funkcje licz sa tylko do testowania programu,
oto 2 program:
Edit Pajączek: tagi.
oto 2 program:
Kod: Zaznacz cały
po:
sw0 equ p2.0 ;przypisanie całego portu
mov r0, sw0
mov a,r0
cjne a,#0FEH,f1 ; skocz jeżeli a nie równe fc
JMP led2 ; skocz jeżeli równe do led
f1:
cjne a,#0FDH,f2 ;
JMP led ;
f2:
cjne a,#0FBH,f3 ;
JMP led2 ;
f3:
cjne a,#0F7H,f4 ;
JMP led ;
f4:
cjne a,#0EFH,f5 ;
JMP led2 ;
f5:
cjne a,#0dfH,f6 ;
JMP led ;
f6:
cjne a,#0bfH,f7 ;
JMP led2 ;
f7:
cjne a,#07FH,po ;
JMP led ;
led:
led0 equ p1.0
mov led0,r2
mov r2,#0ffh
mov a,r2
subb a,#001h
mov r2,a
mov led0,r2
MOV R7,#00H
licz1:
inc r7
cjne r7,#0ffH,licz1
mov r2,#0ffh
mov a,r2
subb a,#002h
mov r2,a
mov led0,r2
MOV R7,#00H
licz2:
inc r7
cjne r7,#0ffH,licz2
mov r2,#0ffh
mov a,r2
subb a,#004h
mov r2,a
mov led0,r2
MOV R7,#00H
licz3:
inc r7
cjne r7,#0ffH,licz3
mov r2,#0ffh
mov a,r2
subb a,#008h
mov r2,a
mov led0,r2
MOV R7,#00H
licz4:
inc r7
cjne r7,#0ffH,licz4
mov r2,#0ffh
mov a,r2
subb a,#010h
mov r2,a
mov led0,r2
MOV R7,#00H
licz5:
inc r7
cjne r7,#0ffH,licz5
mov r2,#0ffh
mov a,r2
subb a,#020h
mov r2,a
mov led0,r2
MOV R7,#00H
licz6:
inc r7
cjne r7,#0ffH,licz6
mov r2,#0ffh
mov a,r2
subb a,#040h
mov r2,a
mov led0,r2
MOV R7,#00H
licz7:
inc r7
cjne r7,#0ffH,licz7
mov r2,#0ffh
mov a,r2
subb a,#080h
mov r2,a
mov led0,r2
MOV R7,#00H
licz8:
inc r7
cjne r7,#0ffH,licz8
mov r2,#000h
led2:
mov r2,#0ffh
mov a,r2
subb a,#001h
mov r2,a
mov led0,r2
MOV R7,#00H
licz9:
inc r7
cjne r7,#0ffH,licz9
mov r2,#0ffh
mov a,r2
subb a,#004h
mov r2,a
mov led0,r2
MOV R7,#00H
licz10:
inc r7
cjne r7,#0ffH,licz10
mov r2,#0ffh
mov a,r2
subb a,#010h
mov r2,a
mov led0,r2
MOV R7,#00H
licz11:
inc r7
cjne r7,#0ffH,licz11
mov r2,#0ffh
mov a,r2
subb a,#040h
mov r2,a
mov led0,r2
MOV R7,#00H
licz12:
inc r7
cjne r7,#0ffH,licz12
mov r2,#000h
jmp po
Re: pierwszy program w assembler, początkujący, edsim51
A jak realizujesz, że po wciśnięciu więcej niż 1 z pośród od 0-7 przycisków układ nie działa?
Re: pierwszy program w assembler, początkujący, edsim51
To zadanie też jest proste, a Ty Rafał nie udawaj że rozumiesz cokolwiek z asemblera.Ciekaw jestem jak żeś rozwiązał to drugie zadanie, bo tam akurat trzeba pogłówkować nad składnią logiczną, a w asm nie ma drogi na skróty.
Btw. Przecież odpowiedź na Twoje pytanie jest w tym listingu, i to na jego początku.
Kicia: zasadniczo do wstawiania kodu służą taki
Kod: Zaznacz cały
, w pierwszym poście zostawiłem bo kod krótki to i nie jest to tak rażące, ale w drugim poprawiłem...
Re: pierwszy program w assembler, początkujący, edsim51
A może też chcę się czegoś nowego nauczyć ? (wszystkie te zadania są proste, o ile wiadomo jak pisać tekst)To zadanie też jest proste, a Ty Rafał nie udawaj że rozumiesz cokolwiek z asemblera.
On jest dobry skoro przeczytał kilka poradników i od razu już klepie takie programy. Raczej nie zaczyna od zera.
Re: pierwszy program w assembler, początkujący, edsim51
No więc: odpowiedź na Twoje pytanie jest w linijce 1 i 28 (razem wziętych). Dokładniej to linijki 6-29 to taki typowy (np. z C) switch z 8 case'ami (8 przycisków wciskanych solo), i defaultem (każda inna kombinacja) ustawionym na powrót do początku (linii 1). Tylko czy to Ci coś wyjaśnia? Bo w graficznym tego rysować nie zamierzam.
Re: pierwszy program w assembler, początkujący, edsim51
Za wiele się nie dowiedziałem.... Zapewne więcej podpowiedzą mi koledzy po fachu. (coś mi się wydaje że to drugie zadanie można zrobić w inny sposób.)
Re: pierwszy program w assembler, początkujący, edsim51
Każde z tych zadań można rozwiązać na kilka sposobów.
Pisze też programy na AVR w C++, głównie na ATmega, i jest znacznie prościej, niestety w szkole piszemy w assemblerze:( , myślałem też na pisaniu na 8051 w c i później otwieraniu pliku HEX w symulatorze, jednak to nie jest to samo ponieważ niektóre obliczenia wykonywane przez procesor są już gotowe....On jest dobry skoro przeczytał kilka poradników i od razu już klepie takie programy. Raczej nie zaczyna od zera.
Re: pierwszy program w assembler, początkujący, edsim51
Przecież każdy kompilator C kompiluje najpierw do assemblera. Można sobie podejrzeć jak realizuje różne funkcje, rozkazy.myślałem też na pisaniu na 8051 w c i później otwieraniu pliku HEX w symulatorze, jednak to nie jest to samo ponieważ niektóre obliczenia wykonywane przez procesor są już gotowe.
Re: pierwszy program w assembler, początkujący, edsim51
Witam, pomoże mi ktoś w napisani dwóch programów w assemblerze?
1.program działa w następujący sposób: po każdorazowym wykonaniu programu zmienia się stan diody na przeciwny, po zmianie stanu diody wywoływany jest podprogram w którym są 2 zagnieżdżone pętle, program główny jest nie skończoną pętlą. Próbowałem coś pisać ale nie wiem jak zrobić z tymi pętlami bo mi się program zawiesza. To co napisałem:
po:
CPOL P0.1
ACALL PETLA
JMP PO
PETLA:
PETLA2:
JMP PETLA
2 PROGRAM działa następująco: po naciśnięciu dowolnego klawisza z klawiatury matrycowej zapala led1 a ponowne wciśniecie dowolnego klawisza gasi ją, w programie mam wykorzystać przerwania ale nie wiem nawet jak się za to zabrać
1.program działa w następujący sposób: po każdorazowym wykonaniu programu zmienia się stan diody na przeciwny, po zmianie stanu diody wywoływany jest podprogram w którym są 2 zagnieżdżone pętle, program główny jest nie skończoną pętlą. Próbowałem coś pisać ale nie wiem jak zrobić z tymi pętlami bo mi się program zawiesza. To co napisałem:
po:
CPOL P0.1
ACALL PETLA
JMP PO
PETLA:
PETLA2:
JMP PETLA
2 PROGRAM działa następująco: po naciśnięciu dowolnego klawisza z klawiatury matrycowej zapala led1 a ponowne wciśniecie dowolnego klawisza gasi ją, w programie mam wykorzystać przerwania ale nie wiem nawet jak się za to zabrać
Re: pierwszy program w assembler, początkujący, edsim51
Pierwszy program się nie "zawiesza" tylko wykonuje dokładnie to, co mu zleciłeś(-aś??). Czyli nieskończoną pętlę na
pomyśl ile razy pętla ma się wykonać, dodaj do tego jakiś licznik (który będziesz porównywać ze wzorcem i inkrementować za każdym przejściem pętli), oraz "warunek powrotu" czyli właśnie ten test z licznikiem i wzorcem oraz instrukcję skoku poza pętlę.
Ps. do zagnieżdzenia pętli to jeszcze będzie troszkę ale jeżeli to zrozumiesz, dalej powinno pójść gładko.
Ad 2. Jak ta klawiatura jest podpięta? Klawiatury matrycowe charakteryzują się tym, że mają x wejść (np. wierszy) i y wyjść (np. kolumn)... od tego na przecięciu którego wiersza z kolumną przyciśniesz przycisk, możesz otrzymać albo jedno z x przerwań, albo 1 przerwanie w którym musisz odczytać który z wierszy zaskoczył.
Kod: Zaznacz cały
petla:
jmp petla
Ps. do zagnieżdzenia pętli to jeszcze będzie troszkę ale jeżeli to zrozumiesz, dalej powinno pójść gładko.
Ad 2. Jak ta klawiatura jest podpięta? Klawiatury matrycowe charakteryzują się tym, że mają x wejść (np. wierszy) i y wyjść (np. kolumn)... od tego na przecięciu którego wiersza z kolumną przyciśniesz przycisk, możesz otrzymać albo jedno z x przerwań, albo 1 przerwanie w którym musisz odczytać który z wierszy zaskoczył.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości