plik


.nolist ;quartz assumption 4Mhz .include "ATxmega128A3def.inc" .list .ESEG ; EEPROM memory segment .DSEG ; SRAM memory.segment .ORG 0x200 RAMTAB: .BYTE 256 ; Destination table (xlengthx bytes). .CSEG ; CODE Program memory. Remember that it is "word" address space .org 0x100 rjmp RESET reti reti Delay: ldi r16, 0x00 ldi r17, 0x00 ldi r18, 0xeb del_0: inc r16 brne del_0 inc r17 brne del_0 inc r18 brne del_0 ldi R21, 0xff out PORTE, R21 ret Reset: ldi r16, high(RAMEND); Main program start out SPH,r16 ; Set stack pointer to top of RAM ldi r16, low(RAMEND) out SPL,r16 cli ; Disable all interrupts ; ; place here code related to initialization of ports and interrupts ldi r16, 0xff out DDRE, r16 ldi r16, 0xff out PORTE, r16 ldi r16, 0x00 out DDRF, r16 ldi r16, 0xff out PORTF, r16 ; End of port initialization ;sei Enable interrupts ; ; Main program code place here Main0: sbic PORTF, 0 rjmp skip cbi PORTE, 0 rcall Delay cbi PORTE, 1 rcall Delay cbi PORTE, 2 rcall Delay cbi PORTE, 3 rcall Delay cbi PORTE, 4 rcall Delay cbi PORTE, 5 rcall Delay cbi PORTE, 6 rcall Delay cbi PORTE, 7 rcall Delay rjmp Main0 skip: cbi PORTE, 7 rcall Delay cbi PORTE, 6 rcall Delay cbi PORTE, 5 rcall Delay cbi PORTE, 4 rcall Delay cbi PORTE, 3 rcall Delay cbi PORTE, 2 rcall Delay cbi PORTE, 1 rcall Delay cbi PORTE, 0 rcall Delay sbic PORTF, 0 rjmp Main0 rjmp skip End: rjmp END ; place here test values ; Test with value 0x8000 also ; ; ROMTAB: .db 0x01, 0x00 , 0xffff .EXIT #######komentarze list .ESEG ; EEPROM memory segment .DSEG ; SRAM memory.segment .ORG 0x200 RAMTAB: .BYTE 256 ; Destination table (xlengthx bytes)." mozna kompletnie pominac gdyz nie korzystamy z tego .CSEG pod ta dyrektywa wykonuje kod programu .org 0x100 ustawia na adres setny kod programu pomiajac pierwsze 100 komorek, ktore juz sa zajete rjmp RESET przeskok do glownego prgramu reti reti na wypadek gdyby wsytapily niespodziewane przerwania Delay: - podprogram opoznienia ldi r16, 0x00 - ustawia w rejestrze 16,17,18 wartosc 0x00 del_0: - etykieta ktora dziala jak petla poprzez wewnetrzne wywolanie inc r16 inkrementacja rejestru 16stego az do momentu uzyskania 0x00 brne wylowanie del_0 gdy rejestr 16,17,18 = 0x00 ldi jak wyzej out PORTE, R21 przypisujemy wartosc 21 rejestru na wyjscie POrtu E ret powrot z podprogramu Reset: ldi r16, high(RAMEND); Main program start out SPH,r16 ; Set stack pointer to top of RAM ldi r16, low(RAMEND) out SPL,r16 cli ; Disable all interrupts ; tak ma byc - ustawia SP na ostatni adres pamieci danych ldi r16, 0xff out DDRE, r16 ldi r16, 0xff out PORTE, r16 ldi r16, 0x00 out DDRF, r16 ldi r16, 0xff out PORTF, r16 deklarcja portow jak w C Main0: cbi PORTE, 0 ustawia 0 na pierwszy pin portu E, numer pinu w dziesietnym systemie rcall Delay wywolanie Delay az do momentu pojawienia sie ret

Wyszukiwarka

Podobne podstrony:
kod[waz asm]
oswoic sie ze zmianami
Majac utworzona liste minimum 5 elementow, napisz funkcje ze zmianami elementu
ze zmiana 2a
RIAA stab MONTAZ ze zmianami
kod[waz easy]
Dr Berrenda Fox O Nowym DNA i Jak Sobie Radzić Ze Zmianami
Postepowanie ze zmiana konstyt
Starty ze zmianą kierunku biegu cz 4
matura 2012 zapoznaj się ze zmianami
Rozgrzewka grupowa ze zmianą pasów
Starty ze zmianą kierunku biegu cz 3

więcej podobnych podstron