- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: interrupt

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Anzeige

    E-Bike
    Mich würde mal interessieren, wie Du ihn programmiert hast, von der Form her usw.!
    Wärst Du bereit den Code hier online zu stellen?
    Vielleicht könnte man damit sogar eine Art Tutorial im Artikelbereich machen!

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    06.04.2005
    Ort
    Stuttgart
    Alter
    39
    Beiträge
    37
    Code:
    ;Würfel mit 7seg Anzeige;
    
    .include "C:\Dokumente und Einstellungen\eric\Desktop\asm\2313def.inc"
    
    
    .equ dp=3
    .def temp=r16
    .def zahl=r17
    .def counter=r18
    .macro einsaus		;Segmente abhängig von der Platine;
    ldi temp, 0b01000001
    out PORTB, temp
    .endmacro
    .macro zweiaus
    ldi temp, 0b10110011
    out PORTB, temp
    .endmacro
    .macro dreiaus
    ldi temp, 0b10110110
    out PORTB, temp
    .endmacro
    .macro vieraus
    ldi temp, 0b11010100
    out PORTB, temp
    .endmacro
    .macro fuenfaus
    ldi temp, 0b11100110
    out PORTB, temp
    .endmacro
    .macro sechsaus
    ldi temp, 0b11100111
    out PORTB, temp
    .endmacro
    
    
    
    		.cseg
    		.org 0x000
    		rjmp reset
    		rjmp int
    
    reset:		ldi temp, ramend
    		out SPL, temp
    		ldi temp, 0b01000000	;externer interrupt an int0 wenn int0 auf low liegt(pull up an int0);
    		out GIMSK, temp
    		ldi temp, 0b00000000
    		out MCUCR, temp
    		sbi PORTB, dp
    		sei
    
    main:		ldi temp, 0x05
    		
    		 
    dec:		nop 	;zählschleife;
    		nop
    		nop
    		sbi PORTB, dp ;dp zeigt nacher an ob der Würfelvorgang abgeschlossen ist;
    		nop
    		nop
    		dec temp
    		breq main
    		rjmp dec
    
    int:		mov zahl, temp ;ermitteln der zahl die in temp war als der Interrupt ausgelöst würde;
    		ldi temp, 0x00
    		cpse temp, zahl
    		rjmp inta
    		rjmp eins
    inta:		ldi temp, 0x01
    		cpse temp, zahl
    		rjmp intb
    		rjmp zwei
    intb:		ldi temp, 0x02
    		cpse temp, zahl
    		rjmp intc
    		rjmp drei
    intc:		ldi temp, 0x03
    		cpse temp, zahl
    		rjmp intd
    		rjmp vier
    intd:		ldi temp, 0x04
    		cpse temp, zahl
    		rjmp inte
    		rjmp fuenf
    inte:		rjmp sechs
    		
    eins:		einsaus 	;durchzählen der 7seg Anzeige für die Optik :) ;
    		ldi counter, 0x00 ;counter für die Warteschleife null setzen;
    		rcall warte
    		zweiaus
    		rcall warte
    		dreiaus
    		rcall warte
    		vieraus
    		rcall warte
    		fuenfaus
    		rcall warte
    		sechsaus
    		rcall warte
    		einsaus
    		rcall warte
    		zweiaus
    		rjmp entp
    
    zwei:		zweiaus
    		ldi counter, 0x00
    		rcall warte
    		dreiaus
    		rcall warte
    		vieraus
    		rcall warte
    		fuenfaus
    		rcall warte
    		sechsaus
    		rcall warte
    		einsaus
    		rcall warte
    		zweiaus
    		rcall warte
    		dreiaus
    		rjmp entp
    		
    drei:		dreiaus
    		ldi counter, 0x00
    		rcall warte
    		vieraus
    		rcall warte
    		fuenfaus
    		rcall warte
    		sechsaus
    		rcall warte
    		einsaus
    		rcall warte
    		zweiaus
    		rcall warte
    		dreiaus
    		rcall warte
    		vieraus
    		rjmp entp
    				
    vier:		vieraus
    		ldi counter, 0x00
    		rcall warte
    		fuenfaus
    		rcall warte
    		sechsaus
    		rcall warte
    		einsaus
    		rcall warte
    		zweiaus
    		rcall warte
    		dreiaus
    		rcall warte
    		vieraus
    		rcall warte
    		fuenfaus
    		rjmp entp
    				
    fuenf:		fuenfaus
    		ldi counter, 0x00
    		rcall warte
    		sechsaus
    		rcall warte
    		einsaus
    		rcall warte
    		zweiaus
    		rcall warte
    		dreiaus
    		rcall warte
    		vieraus
    		rcall warte
    		fuenfaus
    		rcall warte
    		sechsaus
    		rjmp entp
    			
    sechs:		sechsaus
    		ldi counter, 0x00
    		rcall warte
    		einsaus
    		rcall warte
    		zweiaus
    		rcall warte
    		dreiaus
    		rcall warte
    		vieraus
    		rcall warte
    		fuenfaus
    		rcall warte
    		sechsaus
    		rcall warte
    		einsaus
    		rjmp entp
    
    warte:		inc counter ;Warteschleife abhängig von der Anzahl der Durchgänge (5Mhz Quarz);
    		inc counter
    		mov temp, counter
    zaehl3:		ldi r19, 0x01
    zaehl2:		clr r1	
    zaehl1:		clr r0
    zaehl0:		dec r0
    		brne zaehl0
    		dec r1	
    		brne zaehl1
    		dec r19
    		brne zaehl2
    		dec temp
    		brne zaehl3
    		ret			
    						
    entp:		in temp, pind ;überprüfen ob schalter noch gedrückt;
    		ldi r20, 0x04 
    		cpse temp, r20
    		rjmp entp 
    		ldi temp, 0x03
    		reti
    Das Layout von meiner Schaltung hab ich auch noch, wenns einer will ^^
    und wie findest es?

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Das sieht ja richtig gut aus, da hast Du Dir ja ganz schön viel Mühe gegeben! ;o)
    Ich gucke den Code nachher mal durch, aber einziger Markel ist die etwas geringe Übersichtlichkeit, etwas besser gliedern, aber das ist Geschmackssache! *lol*

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    06.04.2005
    Ort
    Stuttgart
    Alter
    39
    Beiträge
    37
    mach mal bitte ein beispiel wie ich besser gliedern kann, damit ich mich bessern kann

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    So z.B.:
    Code:
    .def   temp     , r16
    .def   temp2    , r17
    
    .equ   cristall , 16000000
    
    .org   0x000
     rjmp  reset
     reti
     reti
     reti
     reti
     reti
    .
    .
    .
    
    reset:
     port_d:
           ldi      temp     ,    0xFF
           out      PORTD    ,    temp
    
    main:
     aufgabe1:
           nop
           ldi      temp     ,    0xFF
     aufgabe2:
           nop
           ldi      temp     ,    0xFF
    
    underroutines:
     aufgabea:
           nop
           ldi      temp     ,    0xFF
     aufgabeb:
           nop
           ldi      temp     ,    0xFF
    
    interruptroutines:
     aufgabeI:
           nop
           ldi      temp     ,    0xFF
     aufgabeII:
           nop
           ldi      temp     ,    0xFF

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    06.04.2005
    Ort
    Stuttgart
    Alter
    39
    Beiträge
    37
    jo hast recht, das is so echt viel übersichtlicher! Merk ich mir

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Schön, dass ich Dir helfen konnte! ;o)

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress