+SAMPLE:
+
+ ; sample as long as there is storage capacity and signal
+ cpi state,10
+ brne SAMPLE
+
+ ; signal finish
+ ldi uart_rxtx,0x66
+ rcall UART_TX
+
+IDLE:
+
+ ; wait for commands via uart
+ rcall UART_RX
+
+ ; decode instruction
+ cpi uart_rxtx,0x72
+ breq RESET
+ cpi uart_rxtx,0x74
+ breq TRANSFER
+ cpi uart_rxtx,0x73
+ breq SINGLE_SAMPLE
+
+ rjmp IDLE
+
+SINGLE_SAMPLE:
+
+ ; sample port d pin 2 and output via uart
+ ldi uart_rxtx,0x30
+ in tmp2,PIND
+ sbrc tmp2,2
+ ldi uart_rxtx,0x31
+ rcall UART_TX
+ rjmp IDLE
+
+TRANSFER:
+
+ ; reset storage pointer
+ ldi ZL,low(STORAGE)
+ ldi ZH,high(STORAGE)
+ ldi scount,1
+
+ ; transmit number of sampled words
+ mov uart_rxtx,count
+ rcall UART_TX
+
+TRANSFER_LOOP:
+
+ ; send data and counter
+ ld uart_rxtx,Z+
+ rcall UART_TX
+ ld uart_rxtx,Z+
+ rcall UART_TX
+
+ ; count sent data
+ add scount,one