Skocz do zawartości

[Kurs] Programowanie mikrokontrolerów AVR w języku assembler - część 1


kermit

Pomocna odpowiedź

wziąść
teraz pora na drugą wersje programu który będzie który rówież zapali diodę naszą diodę LED
Ze względu ,że mikrokontrolery nasze mikrokontrolery AVR są 8-bitowe
ldi R20,0x01

out DDRC, R16

out PORTC, R16

Nie bardzo rozumiem ten fragment. Wrzucamy do rejestru R20 jakąś wartość i co z nią? Potem odwołujemy się do R16. Jak to się ma do R20?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

-Teraz UWAGA ,bardzo ważna zaleta asemblera – ucząc się tego języka, tak naprawdę uczymy się nie tylko języka, ale też architektury samego mikrokotnrolera ,co w przyszłości może baaardzo nam sie przydać np. Przy programowaniu w innych językach czy nawet przy programowaniu innych mikrokontrolerów.

Od której należałoby zacząć. Bez przedstawienia architektury danego procesora, nauka ASMa mija się z celem. Same rzucenie paroma przykładami i troszką instrukcji to za mało. ASM wbrew pozorom nie jest taż taki prosty, dla tego powstały języki wysokiego poziomu, O ile zapamiętanie samych instrukcji nie jest jakim niesamowitym wyzwaniem, to wykonywanie operacji złożonych już tak, szczególnie obliczeniowo.

No i trzymaj się jakiś zasad pisania. Jak już przyjołeś że stałą do rejestru ładujesz takim sposobem:

LDI R16, 0b00000001

to potem nie rób tak

LDI R16, 0x01 bez wyjaśnienia tych zapisów, bo początkujący się załamią po pierwszych 2 listingach.

Ogólnie wziąłeś sobie na tapetę, bardzo, ale to bardzo trudny do zrobienia dobrze temat.

Link do komentarza
Share on other sites

i tu jeszcze jedna sprawa, użyłem w tym wypadku zapisu binarnego stałej ładowanej do rejestru ,aby było widać dokładnie który bit ustawiamy, ale równie dobrze moglibyśmi użyć zapisu szesnastkowego, wyglądało by to tak:

Więc chyba wszystko wyjaśnione? 😉

kermit, poprawisz w końcu te R20? ; D

Link do komentarza
Share on other sites

Dziękuję za informacje 🙂. Pozdrawiam.

Edit: Mam jeszcze pytanie przekazuje do funkcji SPIInt napisanej w asm wartość 8-bitową jako argument z pliku napisanego w c. Z tego co rozumiem adres tej wartości powinien wylądować w rejestrze X ale tak się nie dzieje. Co robię źle?

#include <avr/io.h>
extern void init (void);
extern void SPIInt (uint8_t edata);

int main (void)
{
       init();
       SPIInt(0xAB);
       while(1){

       }
       return 0;
}
#define __SFR_OFFSET 0
#include <avr/io.h>

.global init
.global SPIInt

init:
sbi DDRD, 0

; Set SPI out pin
ldi r16,(1<<PB4)|(1<<PB5)|(1<<PB7)
out DDRB,r16

; Enable SPI, enable SPI Interrupt, set Master Mode and set clock rate fck/16
ldi r16,(1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r16
ret

SPIInt:
ld r17,x
cpi r17,0xAB
breq on
reti

on:
sbi PORTD,0
reti

Edit 2: Znalazłem że kompilator wartość podaną jako argument wkłada do rejestru r24. Dla argumentów zawsze ten rejestr obowiązuje?

Link do komentarza
Share on other sites

Witam

Jak  wyglądał by ten kod  C w j.ASM 

 kwarc 16 MHz ,Attiny 2313A

--------------------------------------------------------------------------------------

#include <avr/io.h>
#include <util/delay.h>
main()
{
DDRB = (1<<PB3)|(1<<PB4);
PORTB|=(1<<PB3);
while(1)
{
PORTB ^= (1<<PB3)|(1<<PB4);
_delay_us(128000000);
  }   
}  

 

Link do komentarza
Share on other sites

@Anek40 witam na forum 🙂 Na czym dokładnie utknąłeś, próbowałeś zdziałać coś samodzielnie w tej kwestii?

PS Kody programów należy umieszczać za pomocą odpowiedniego narzędzia dostępnego w edytorze (przycisk "Wstaw kod"). Programy są wtedy prezentowane w czytelny sposób, a ich składania jest kolorowana. Tym razem poprawiłem to za Ciebie, ale pamiętaj o tej opcji w przyszłości. Z góry dziękuję za zrozumienie i pomoc w utrzymaniu porządku 😉

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.