Danke für die Hinweise.
Wo bekommt man denn diese .inc Dateien her?
Hier mal ein funktionierender Code:
Habe ich das jetzt richtig verstanden: PORTD ist nur zum Ausgeben, PIND nur zum Einlesen.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
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...







Zitieren

Lesezeichen