1 / 24

Asembler AVR

Asembler AVR. Budowa programu w asemblerze W ogólnym przypadku linia programu w asemblerze ma następującą budowę: < pole etykiety > < pole mnemonika > < pole argumentów > < pole komentarza > na przykład: tuskocz: add r1,r0 ;dodanie do r1 liczby z R0 mov r6,r1 ;odeslanie sumy do R6.

parley
Télécharger la présentation

Asembler AVR

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Asembler AVR

  2. Budowa programu w asemblerze W ogólnym przypadku linia programu w asemblerze ma następującą budowę: <pole etykiety> <pole mnemonika> <pole argumentów><pole komentarza> na przykład: tuskocz: add r1,r0;dodanie do r1 liczby z R0 mov r6,r1;odeslanie sumy do R6

  3. gdzie: <pole etykiety> - obszar o szerokości min. 1 znaku, przeznaczony na wpisywanie identyfikatorów tzw. etykiet po etykiecie musi występować dwukropek, oddziela on wtedy etykietę od pozostałej zawartości linii i zwiększa czytelność programu; w polu tym wpisuje się także większość dyrektyw asemblera <pole mnemonika> - obszar przeznaczony na wpisanie symbolicznej nazwy rozkazu; w polu tym wpisuje się także niektóre dyrektywy asemblera (patrz dalej);

  4. gdzie-c.d.: <pole argumentów> - obszar, którego wypełnienie jest opcjonalne - zależne od wymagań wpisanego w <polu mnemonika> rozkazu, pole to jest przeznaczone na listę argumentów rozkazu;

  5. gdzie-c.d.: <pole komentarza> - opcjonalny obszar, którego początek jest identyfikowany przez znak średnika (‘;’) lub parę ‘//’; jest on przeznaczony do wpisywania dowolnego tekstu objaśniającego działania realizowane przy pomocy użytych rozkazów mikroprocesora; w szczególnym przypadku komentarz może zaczynać w dowolnym miejscu linii programu, także od pierwszej kolumny (z pominięciem pozostałych pól). AVRStudio dopuszcza ujęcie komentarza w nawiasy: /* ...... */ komentarz taki może rozciągać się na wiele linii

  6. Przeznaczenie etykiet: 1. Identyfikatory adresów w przestrzeni adresowej procesora - wskazują: adresy skoków, np:tutaj: in r7,portb adresy początkowe wywoływanych procedur, np:call dod3B ;dodaj liczby 3-bajtowe adresy początkowe struktur danych, np:tablica1: .db 12,234,0,11 //tablica liczb 1-bajtowych

  7. Przeznaczenie etykiet: • 2. Identyfikatory stałych programowych, - ułatwia to ich użycie w tekście programie - zwiększenie czytelności programu, np: • .equ CR =13 ;definicja znaku ASCII • 3. Identyfikowanie zmiennych programowych, poprzez przypisanie im np. dyrektywą EQU adresu początkowego, np:.equ data =0x70 ;zmienna przechowujaca dzien mies. • .... • ldi r28,low(data) ;Y:=adres zmiennej ‘data’ • ldi r29,high(data)

  8. Stałe: są to wartości liczbowe lub znakowe zdefiniowane na etapie asemblacji programu lub pobierane z innych programów w procesie łączenia (linkowania). Przykłady: stała znaczenie reprezentacja binarna ‘A’ pojedynczy znak ASCII 41h "tekst" ciąg znaków ASCII 74h,65h,6Bh,73h,74h 787 liczba dziesiętna 0313h 0b100,0B100 liczba binarna 04h 0x2AF liczba szesnastkowa 02AFh 0X2A0 liczba szesnastkowa 02A0h $F00 liczba szesnastkowa 0F00h 0457 liczba ósemkowa 012Fh identyfikator o przypisanej wartości zgodna z wartością

  9. Wykorzystanie wyrażeń. Przykładowo, zamiast sekwencji deklaracji: .equ zmienna1= 0x68 .equ zmienna2= 0x6A .equ zmienna3= 0x6C .equ zmienna4= 0x70 możemy zapisać: .equ zmienna1= 0x68h .equ zmienna2= zmienna1+2 .equ zmienna3= zmienna2+2 .equ zmienna4= zmienna3+4 Wynik asemblacji - taki sam, ale przy drugim zapisie łatwiejsze poprawki

  10. Dostępne operatory wyrażeń

  11. Dostępne funkcje

  12. Podstawowe dyrektywy asemblera

  13. Podstawowe dyrektywy asemblera

  14. Podstawowe dyrektywy asemblera

  15. Podstawowe dyrektywy asemblera

  16. Pozostałe dyrektywy asemblera - segmenty programu

  17. Pozostałe dyrektywy asemblera - segmenty programu • Segment danych (.DSEG) • może zawierać dyrektywy: .ORG, .DB, .DW, .DD, .DQ, .BYTE, .EQU; • nie może zawierać instrukcji procesora; • służy zadeklarowaniu struktur danych w obszarze pamięci danych; • licznik bajtów danych startuje automatycznie od 60h; • dyrektywy .DB, .DW, .DD, .DQ, jedynie rezerwują odpowiednie fragmenty tej pamięci danych – bez jej inicjacji na podane wartości. • Przykład: • .dseg • .equ tablica = 0x80 ;tablica od adresu 80h • .dq 0 ;wyzerowane bajty od 60h do 67h • zmienna1: .byte 2 ;2-bajtowa zmienna1 od 68h • zmienna2: .byte 2 ;2-bajtowa zmienna2 od 6Ah • .org 0x70 • zmienna4: .byte 4 ;4-bajtowa zmienna4 od 70h • .equ zmienna3 = zmienna2+2

  18. Pozostałe dyrektywy asemblera - segmenty programu • Segment pamięci EEPROM (.ESEG) • może zawierać dyrektywy: .ORG, .DB, .DW, .DD, .DQ, .BYTE, .EQU; • nie może zawierać instrukcji procesora; • służy zadeklarowaniu struktur danych w obszarze pamięci EEPROM; • licznik bajtów EEPROM startuje automatycznie od 00h; • dyrektywy .DB, .DW, .DD, .DQ rezerwują odpowiednie fragmenty tej pamięci danych wraz z ich inicjacją na podane wartości;

  19. Pozostałe dyrektywy asemblera - makroasemblacja

  20. Makroasemblacja - przykład .macro pulse_clk ; generuje jeden impuls taktujacy nadawanie ; @0 - PORTx ; @1 - numer bitu w wybranym porcie @0 sbi @0,@1 cbi @0,@1 .endm . . . sbi portd,outpin ;ustawienie sygn. wyj. pulse_clk portd,clkpin ;wyslanie ciagu bitow: cbi portd,outpin ; 1000 pulse_clk portd,clkpin pulse_clk portd,clkpin pulse_clk portd,clkpin

  21. Pozostałe dyrektywy asemblera - asemblacja warunkowa możliwych jest 5 poziomów (zagnieżdżeń) asemblacji warunkowej

  22. Pozostałe dyrektywy asemblera - asemblacja warunkowa Przykładowo, pewne fragmenty można asemblować gdy są do zrealizowania na danym mikrokontrolerze: .ifdef spcr /* powyzszy warunek jest spelniony gdy w zadeklarowanym dyrektywa .include pliku “*inc.asm” wskazujacym na docelowy uC jest przypisany adres I/O nazwie “spcr” charakterystycznej dla uniwersalnego rejestru szeregowego realizujacego standard SPI */ ; przygotowanie sprzetowego SPI do pracy ldi rtmp,0b00010000 ;wlacz.SPI w master out spcr,rtmp ldi rtmp,0b00000001 ;SCKfreq=fosc/2 out spsr,rtmp .endif /* inne mozliwe sprawdzenie: “.if spcr & spsr” tzn. czy obu rejestrom przypisano adresy rozne od zera */

  23. Pozostałe dyrektywy asemblera - asemblacja warunkowa ;realizacja nadawania: .if spcr & spsr out spdr,r18 ;wyslanie bajtu wyjsciowego wait1: sbis spsr,spif ;sprzetowym SPI rjmp wait1 .else ldi r17,8 ;licznik bitownxtbit:cbi portb,sdipin ;SDO:=0 sbrc r18,0 ;skok gdy r18.bit0=0 sbi portb,sdipin ;SDO:=1 sbi portb,sckpin ;impuls zegara cbi portb,sckpin lsr r18 ;nastepny bit dec r17 brne nxtbit .endif

  24. Pozostałe dyrektywy asemblera - generacja komunikatów można wygenerować dodatkowy komunikat gdy zachodzi jakiś warunek: .if c1 > c2 ;jezeli stale programowe spelniaja ; podany warunek to sa nieprawidlowo ; zadeklarowane co trzeba zasygnalizowac .error “c1 nie moze byc wieksza od c2” .endif

More Related