Advertisement
PiXLFAIL

Untitled

Dec 18th, 2023
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. Um die gewünschte Aufgabe mit einem Atmega8 in Assembler zu erledigen, müssen Sie die folgenden Schritte ausführen:
  2.  
  3. 1. Konfigurieren Sie die Ports und Interrupts:
  4. - Legen Sie den Port D, Pin 2 als Eingang (Input) für den ersten Taster fest.
  5. - Legen Sie den Port D, Pin 3 als Eingang (Input) für den zweiten Taster fest.
  6. - Konfigurieren Sie den Pin 2 als INT0 und den Pin 3 als INT1.
  7. - Aktivieren Sie die externen Interrupts für INT0 und INT1.
  8.  
  9. 2. Schreiben Sie die Interrupt-Routinen:
  10. - Erstellen Sie eine Interrupt-Routine für INT0, die die LED einschaltet, wenn der erste Taster gedrückt wird.
  11. - Erstellen Sie eine Interrupt-Routine für INT1, die die LED ausschaltet, wenn der zweite Taster gedrückt wird.
  12.  
  13. 3. Schreiben Sie den Hauptprogrammcode:
  14. - Initialisieren Sie die Ports und Interrupts.
  15. - Verwenden Sie eine Endlosschleife, um das Programm zu halten.
  16.  
  17. Hier ist ein Beispiel für den Assemblercode:
  18.  
  19. ```
  20. ; Initialisierung
  21. .include "m8def.inc"
  22. .org 0x0000
  23. rjmp main
  24.  
  25. ; Interrupt-Routine für INT0
  26. int0:
  27. sbi PINB, PINB2 ; Überprüfen Sie, ob der erste Taster gedrückt wurde
  28. brtc led_ein ; Wenn nicht, springen Sie zum Ende der Routine
  29. cbi PINB, PINB2 ; Wenn ja, setzen Sie den PINB2-Bit auf 0 (ausgeschaltet)
  30. reti
  31.  
  32. ; Interrupt-Routine für INT1
  33. int1:
  34. sbi PINB, PINB3 ; Überprüfen Sie, ob der zweite Taster gedrückt wurde
  35. brtc led_aus ; Wenn nicht, springen Sie zum Ende der Routine
  36. cbi PINB, PINB3 ; Wenn ja, setzen Sie den PINB3-Bit auf 0 (ausgeschaltet)
  37. reti
  38.  
  39. ; Hauptprogramm
  40. main:
  41. ; Initialisierung der Ports und Interrupts
  42. ldi r16, 0x00
  43. out DDRB, r16 ; Setzen Sie alle Bits von PORTB auf Eingang (0)
  44. out DDRD, r16 ; Setzen Sie alle Bits von PORTD auf Eingang (0)
  45.  
  46. ldi r16, 0x02 ; Konfigurieren Sie INT0 (PINB2) als externen Interrupt
  47. sts EICRA, r16
  48. ldi r16, 0x03 ; Konfigurieren Sie INT1 (PINB3) als externen Interrupt
  49. sts EICRA, r16
  50.  
  51. sei ; Aktivieren Sie die Interrupts
  52.  
  53. ; Endlosschleife
  54. loop:
  55. rjmp loop
  56.  
  57. ; Subroutinen
  58. led_ein:
  59. cbi PINB, PINB0 ; Schalten Sie die LED ein
  60. ret
  61.  
  62. led_aus:
  63. sbi PINB, PINB0 ; Schalten Sie die LED aus
  64. ret
  65. ```
  66.  
  67. Dieser Code konfiguriert die Ports und Interrupts gemäß Ihren Anforderungen und schaltet die LED ein oder aus, je nachdem, welcher Taster gedrückt wurde.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement