Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .nolist
- .include "m16def.inc"
- .list
- .listmac
- .device ATmega16
- .cseg
- .org 0x0000
- jmp 0x30
- // wektory przerwan
- .org 0x0030
- // ustawienia stosu
- ldi r16, high(RAMEND) ;0x04
- out SPH, r16
- ldi r16, low(RAMEND) ;0x5f
- out SPL, r16
- //program glowny
- /*
- ldi r16, 0
- sts 0x0060, r16
- ldi r16, 1
- sts 0x0061, r16
- ldi r16, 2
- sts 0x0062, r16
- ldi r16, 3
- sts 0x0063, r16
- ldi r16, 4
- sts 0x0064, r16
- ldi r16, 5
- sts 0x0065, r16
- ldi r16, 6
- sts 0x0066, r16
- ldi r16, 7
- sts 0x0067, r16
- ldi r16, 8
- sts 0x0068, r16
- ldi r16, 9
- sts 0x0069, r16 //zapisuje BEZPIŚREDNIO do pamięci
- */
- //wykorzystanie rejetru wskaźnikowego (instrukcje z wykorzystaniem adiw)
- /*
- ldi r26, 0x90
- ldi r27, 0x00
- ldi r26, low(0x0090) //bierze młodszą czesc
- ldi r27, high(0x0090)//bierze starszą czesc
- ldi r16, 0x0A ;0x0A
- st X , r16 //zapisuje do pamieci
- //adiw r27:r26, 1 //inkrementacja X=X+1
- //ldi r16, 0x0B ;0x0B
- //st X, r16 //zapisuje do pamieci
- //adiw r27:r26, 1 //inkrementacja X=X+1
- //ldi r16, 0x0C ;0x0C
- //st X, r16 //zapisuje do pamieci
- //adiw r27:r26, 1 //inkrementacja X=X+1
- //ldi r16, 0x0D ;0x0D
- //st X, r16 //zapisuje do pamieci
- //adiw r27:r26, 1 //inkrementacja X=X+1
- //ldi r16, 0x0D ;0x0D
- //st X, r16 //zapisuje do pamieci
- //adiw r27:r26, 1 //inkrementacja X=X+1
- //ldi r16, 0x0E ;0x0F
- //st X, r16 //zapisuje do pamieci
- */
- /*
- ldi r26, low(0x00C0)
- ldi r27, high(0x00C0)
- ldi r16, 0
- st X+, r16
- ldi r16, 1
- st X+, r16
- ldi r16, 2
- st X+, r16
- ldi r16, 3
- st X+, r16
- ldi r16, 4
- st X+, r16
- ldi r16, 5
- st X+, r16
- ldi r16, 6
- st X+, r16
- ldi r16, 7
- st X+, r16
- ldi r16, 8
- st X+, r16
- ldi r16, 9
- st X+, r16
- */
- //w pętli
- /*
- ldi r26, low(0x0060)
- ldi r27, high(0x0060)
- ldi r16, 0
- SRAM_loop:
- st X+, r16
- st X-, r16
- inc r16
- cpi r16, 255
- brne SRAM_loop
- */
- //wpisywanie 0 w 256 rejestrach
- /*
- ldi r26, low(0x0060) ; wskaznik X
- ldi r27, high(0x0060)
- ldi r16, 0x00
- SRAM_loop:
- st X+, r16
- cpi r26, 0x60 ;0x5F + 1
- brne SRAM_loop
- cpi r27, 0x04
- brne SRAM_loop
- */
- //wrzucanie wszystkiego do danego rejestru o takim adresie w pamięci SRAM
- /*
- ldi r16, 0
- sts 0x0060, r16
- ldi r16, 1
- sts 0x0061, r16
- ldi r16, 2
- sts 0x0062, r16
- ldi r16, 3
- sts 0x0063, r16
- ldi r16, 4
- sts 0x0064, r16
- ldi r16, 5
- sts 0x0065, r16
- ldi r16, 6
- sts 0x0066, r16
- ldi r16, 7
- sts 0x0067, r16
- ldi r16, 8
- sts 0x0068, r16
- ldi r16, 9
- sts 0x0069, r16
- */
- // adres 0x0090
- /*
- ldi r26, 0x90
- ldi r27, 0x00
- //ldi r26, low(0x0090)// to jest wskaznik ktory wskazuje na adres 90
- //ldi r27, high(0x0000)
- ldi r16,0x0A //tu daje wartosc do r16
- st X, r16 // i wartosc do wartosci ze wskaznika ...
- adiw r26:r27,1
- ldi r16,0x0B
- st X, r16
- adiw r26:r27,1
- ldi r16,0x0C
- st X, r16
- adiw r26:r27, 1
- ldi r16,0x0D
- st X, r16
- adiw r26:r27, 1
- ldi r16,0x0E
- st X, r16
- adiw r26:r27, 1
- ldi r16,0x0F
- st X, r16
- */
- // adres 0x00C0
- /*
- ldi r26, low(0x00C0) // wskaznik X
- ldi r27, high(0x0000)
- ldi r16, 0
- st X+, r16
- ldi r16, 1
- st X+, r16
- ldi r16, 2
- st X+, r16
- ldi r16, 3
- st X+, r16
- ldi r16, 4
- st X+, r16
- ldi r16, 5
- st X+, r16
- ldi r16, 6
- st X+, r16
- ldi r16, 7
- st X+, r16
- ldi r16, 8
- st X+, r16
- ldi r16, 9
- st X+, r16
- ldi r16, 10
- st X+, r16
- ldi r16, 11
- st X+, r16
- ldi r16, 12
- st X+, r16
- ldi r16, 13
- st X+, r16
- ldi r16, 14
- st X+, r16
- ldi r16,15
- st X+, r16
- */
- /*
- ldi r26, low(0x00C0) // wskaznik X
- ldi r27, high(0x0000)
- ldi r16,0;
- loop_fill:
- st X+,r16;
- inc r16
- cpi r16, 16
- brne loop_fill;
- */
- //zerowanie wszystkich komórek pamięci
- ldi r26, low(0x0060) // r26 zawiera młodszą część wartości 0x0060 (czyli 96)
- ldi r27, high(0x0000) // r27 zawiera starszą część wartości 0x0000 (czyli 0)
- ldi r16,0x00;
- loop_fill_zero:
- st X+,r16; //zwiększ wartość w rejestrze r26 i wpisz do komórki pamięci odpowiadającej wartości r26 liczbę spod rejestru r16
- cpi r26, 0x60 //0x5F + 1
- brne loop_fill_zero;
- cpi r27, 0x04
- brne loop_fill_zero;
- clr r15
- //sprawdzanie czy jest zapisane 0
- ldi r26, low(0x0060) // wskaznik X
- ldi r27, high(0x0000)
- //ldi r16,0x00;
- loop_check_zero:
- //st X,r16; //inkrementuj wartość w rejestrze (tu:) r26 zapisaną jako low i high z rejestru 00C0 i zapisz tam wartość z rejestru r16
- ld r28, X
- cpi r28, 0x00
- brne NO
- adiw r27:r26, 1
- jazda_dalej:
- cpi r26, 0x60 //0x5F + 1
- brne loop_check_zero;
- cpi r27, 0x04
- brne loop_check_zero;
- loop:
- jmp loop
- NO:
- inc r15
- jmp jazda_dalej
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement