Hallo Leute,
dieser Code ist nicht von mir erstellt, sondern aus Büchern
von mir überarbeitet.
So lerne ich im einzelnen die Befehle kennen.
der Befehl "eor" hat mir erst mal Kopfschmerzen bereitet.
dieser Code ist nicht von mir erstellt, sondern aus Büchern
von mir überarbeitet.
So lerne ich im einzelnen die Befehle kennen.
Code:
;Projekt: Projekt01 18.08.2012
;Datei: Test2.asm (aus dem Buch S. 58)
.INCLUDE "tn2313def.inc"
.def acc0 =r16
.def acc1 =r17
.def stavec =r22
rjmp RESET ; Reset Handler
; Initialize
RESET:
; set PortB(7) to output with value 1
ldi acc0,(1<<PB7)
out DDRB, acc0 ;PB7 = Output
ldi acc0,0xFF
out PORTB,acc0 ;Pullup PB0-PB7
;LED an PB7=1 zu Beginn EIN
ldi stavec,0 ;r22=0
; mainprogram
main:
sbic PINB,PB0 ;überspringe,wenn PORT,PB0=0
rjmp not_pressed
sbrc stavec,0 ;überspringe,wenn Register r22=0
rjmp main
; toggle PORTB(7)
in acc0, PORTB ;kopie PB0-PB7=1 nach r16
ldi acc1, 0x80 ;r17 = 0b1000 0000
eor acc0, acc1
;Oder-Verknüpf. r16 mit r17 (r16=FF, r17=08)
;Ergebnis=0x7F, Resultat=1 wenn ungleich
;Inhalt vom 2 Operanden r17 bleibt erhalten
out PORTB, acc0 ;wenn acc0=0 LED=AUS
; store old button state
sbr stavec,0x01 ;Maske=0b0000 0001
;setze das Bit in r22 was in der Maske 1 ist
rjmp main
not_pressed:
; store old button state
cbr stavec,0x01 ;Maske=0b0000 0001
;lösche das Bit in r22 was in der Maske 1 ist
rjmp main
der Befehl "eor" hat mir erst mal Kopfschmerzen bereitet.