.equ SPI_DDR = DDRB .equ SPI_Port = PortB .equ SPI_PINS = PinB .equ SPI_CS = 3 .equ SPI_MISO = 0 .equ SPI_MOSI = 1 .equ SPI_SCK = 2 ;SPI_SelectDevice ----------------------------------------------------------- SPI_SelectDevice: cbi SPI_Port, SPI_CS ; select MCP ret ;SPI_DeselectDevice ----------------------------------------------------------- SPI_DeselectDevice: sbi SPI_Port, SPI_CS ; deselect MCP ret ;SPI Read & Write Sendbyte in R17 Empfangsbyte in R18 --------------------------- SPI_ReadWrite: ldi R16, 8 ; 8 bit insgesamt SPI_Loop: lsl R17 brsh SPI_W0 ; 1 bit ins Carry sbi SPI_Port, SPI_MOSI ; ist 1 dann Port High nop rjmp SPI_W1 SPI_W0: cbi SPI_Port, SPI_MOSI ; ist 0 dann Port Low SPI_W1: sbi SPI_Port, SPI_SCK ; Clock High nop clc ; Carry löschen sbic SPI_PINS, SPI_MISO ; 1 bit einlesen sec ; wenn High eingelesen setze Carry rol R18 ; 1 bit in R18 speichern cbi SPI_Port, SPI_SCK ; Clock Low dec R16 ; ein bit weniger brne SPI_Loop ret