.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 zmianamiMajac utworzona liste minimum 5 elementow, napisz funkcje ze zmianami elementuze zmiana 2aRIAA stab MONTAZ ze zmianamikod[waz easy]Dr Berrenda Fox O Nowym DNA i Jak Sobie Radzić Ze ZmianamiPostepowanie ze zmiana konstytStarty ze zmianą kierunku biegu cz 4matura 2012 zapoznaj się ze zmianamiRozgrzewka grupowa ze zmianą pasówStarty ze zmianą kierunku biegu cz 3więcej podobnych podstron