Die meisten elektronischen Geräte / Schaltungen / Projekte müssen in irgendeiner Form auf Eingaben reagieren.
Sei es wie hier dargestellt auch ’nur‘ auf einen Taster.
Das Pollin Board bietet mehrere Taster, LED’s, einen Piepser und weitere Hardware zum ansteuern.
In diesem Beispiel wird die LED1 und 2 über Taster 1 und 2 angesteuert.
Wie in der Grafik zu erkennen, sind alle LED’s und Taster mit dem PortD verbunden.
Für dieses Beispiel werden keine weiteren Bauteile rund um das Evaluationsboard benötigt.
Der hier abgebildete Assemblercode ist mit vielen Kommentaren versehen.
Ich habe den Source auf Grundlage dieser Beispiele von Mikrocontroller.net aufgebaut.
Quellcode des Assemblerprogramms:
; avrdude -p m8 -c stk500v2 -P /dev/ttyACM0 -U flash:w:LED1_und_2_mit_Taster1_und_2.hex ; 9.8.2013 Das Programm soll sobald der Taster1 gedrückt wurde, die LED1 an bzw. ausschalten und ; sobald der Taster2 gedrückt wurde, die LED2 an bzw. ausschalten ; Das Programm ist zum grossen Teil aus ; http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen ; übernommen. Dort gibt es noch viel weitere Infos und Tipps .NOLIST ;.INCLUDE "/home/henry/Dokumente/Mikrocontroller/AVR-Assembler/AVR_Definitionsfiles/m8def.inc" .INCLUDE "m8def.inc" .LIST .def temp = R16 .equ Taster1 = PD2 .equ Taster2 = PD3 .equ LED1 = PD5 .equ LED2 = PD6 ; Port D, LED Pins auf Ausgang und Taster Pins auf Eingang schalten ldi temp, (1<<LED1) | (1<<LED2) out DDRD, temp ; LED1/2 Pollin Evaluationsboard ,, PD5/6 auf Ausgang schalten Tastenabfrage: sbic PIND, Taster1 rjmp LED1Schalten ; Wenn Taster1 auf High (gedrückt), dann rufe LED1Schalten sbic PIND, Taster2 rjmp LED2Schalten ; Wenn Taster2 auf High (gedrückt), dann rufe LED2Schalten rjmp Tastenabfrage ; zurück zur Tastenabfrage LED1Schalten: T1entprellen: sbic PIND, Taster1 ; loope solange der Taster1 nicht wieder losgelassen wurde rjmp T1entprellen sbic PORTD, LED1 ; überspringe die nächste Instruktion, wenn die LED1 ausgeschaltet ist rjmp LED1ausschalten LED1einschalten: sbi PORTD, LED1 ; Setze das LED1 Bit in PORTD rjmp EndeLED1schalten ; springe zu EndeLED1schalten LED1ausschalten: cbi PORTD, LED1 ; Lösche das LED1 Bit in PORTD EndeLED1schalten: rjmp Tastenabfrage ; zurück zum Hauptprogramm LED2Schalten: T2entprellen: sbic PIND, Taster2 ; loope solange der Taster2 nicht wieder losgelassen wurde rjmp T2entprellen sbic PORTD, LED2 ; überspringe die nächste Instruktion, wenn die LED2 ausgeschaltet ist rjmp LED2ausschalten LED2einschalten: sbi PORTD, LED2 ; Setze das LED2 Bit in PORTD rjmp EndeLED2schalten ; springe zu EndeLED2schalten LED2ausschalten: cbi PORTD, LED2 ; Lösche das LED2 Bit in PORTD EndeLED2schalten: rjmp Tastenabfrage ; zurück zum Hauptprogramm
Video, zur Demonstration