Danke für die Hinweise.
Wo bekommt man denn diese .inc Dateien her?
Hier mal ein funktionierender Code:
Code:
;+++++++++++++++++++++++++++
;My first AVR ASSEMBLY CODE
;+++++++++++++++++++++++++++
;################
.NOLIST
.DEVICE ATMEGA8
;.INCLUDE "m8def.inc"
.LIST
.CSEG
;################
.EQU PIND = 0x10
.EQU DDRD = 0x11
.EQU PORTD = 0x12
.EQU Taster = 2
.EQU LED1 = 5
RJMP main
main:
loop:
LDI R16,0b00100000
LDI R17,0b00000000
OUT DDRD,R16 ;PORT D auf Input setzen
SBIC PIND,Taster ;BIT 2 prüfen (Taster1 liegt auf PD2)
RJMP led_on
; CBI PIND,LED1 ;LED1 ausschalten (PD5)
OUT PORTD,R17
RJMP loop
led_on:
; LDI R16,0xFF
; OUT DDRD,R16 ;PORT D auf Output setzen
; SBI PIND,LED1 ;LED1 anschalten (PD5)
OUT PORTD,R16
RJMP loop
Habe ich das jetzt richtig verstanden: PORTD ist nur zum Ausgeben, PIND nur zum Einlesen.
Ok noch mal laut überlegen
LDI register,0b10101010
OUT PORTD,register ;alle Pins werden gesetzt
IN register,PIND ;alle Pins werden ins register eingelesen
IN register,PORTD ;das geht nicht?
OUT PIND,register ;das auch nicht?
SBI PORTD,0...7 ;Ausgangs PIN wird entsprechend dem bit auf high gesetzt
Was passiert denn wenn ich auf einen Eingangspin schreibe oder einen Ausgangspin lese?
edit: es gibt "simulavr" für linux. Als frontend benutzt man dann gdb oder insight soviel ich weiß. Wollte ich auch gestern probieren aber weiß nicht wie ich aus dem asm code ein elf file mit debug informationen mache...
Lesezeichen