Operácie

Program AVR02

Zo stránky SensorWiki

Verzia z 10:59, 5. november 2008, ktorú vytvoril Balogh (diskusia | príspevky) (Nová stránka: <source lang="asm"> ; .DEVICE ATmega16 .include "m16def.inc" .def TMP =r16 ; zadefinujeme pomocnu "premennu" .equ LED1 =PIND? ; kam je pripojena LED .equ LED2 =PIND? .equ S...)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
;
.DEVICE ATmega16

.include "m16def.inc"

.def 	TMP 	=r16		; zadefinujeme pomocnu "premennu"
.equ 	LED1 	=PIND?		; kam je pripojena LED
.equ 	LED2 	=PIND?
.equ	SW1	=PIND?		; kam je pripojene tlacitko
.equ	SW2	=PIND?

.CSEG				; tu zacina nejaka cast programu
.org	0000			; konkretne na adrese 0000

START:	
	ldi TMP,high(RAMEND)  	; Zalozenie zasobnika 
	out SPH,TMP		; (Stack Pointer = SPH + SPL ) 
	ldi TMP,low(RAMEND)	; na koniec RAM (RAMEND)
	out SPL,TMP
		
	ldi TMP,0b????????	;nastav vstupy a vystupy
	out DDRD,TMP

	ldi TMP,0b????????	; zhasni LED a zapni pull-upy
	out PORTD,TMP		; zapis na port

LOOP:	sbis  PIND,SW1		; obskoc ak je stlacene tlacitko
	rcall LED1_ON		; zavolaj "podprogram"
	sbis  PIND,SW2		; obskoc ak je stlacene tlacitko
	rcall LED2_ON

	rjmp LOOP		; dokola

LED1_ON:
	cbi PORTD,LED1		; Clear BIt na PORTD, cislo LED1
	sbi PORTD,LED2		; Set BIt na PORTD, cislo LED2
	ret			; navrat naspat
LED2_ON:
	cbi PORTD,LED2
	sbi PORTD,LED1
	ret	

; koniec