Increasing I/O Port (MCP23s17)

#define SPI_SLAVE_ID	0x40
#define SPI_SLAVE_ADD	0x00
#define SPI_SLAVE_WRITE	0x00
void SPIWrite(uint8_t add,uint8_t data)
{
SPI_PORT &= ~(1<<SPI_CS);//slave activated
//initilaze salve device
SPDR=SPI_SLAVE_ID|(SPI_SLAVE_ADD<<1)|SPI_SLAVE_WRITE;
while(!(SPSR&(1<<SPIF)));
SPDR=add;
while(!(SPSR&(1<<SPIF)));
SPDR=data;
while(!(SPSR&(1<<SPIF)));
SPI_PORT |= (1<<SPI_CS);//slave deactivate
}
uint8_t SPIRead(uint8_t add)
{
SPI_PORT &= ~(1<<SPI_CS);//slave activated
//initilaze salve device
SPDR=SPI_SLAVE_ID|(SPI_SLAVE_ADD<<1)|SPI_SLAVE_READ;
while(!(SPSR&(1<<SPIF)));
SPDR=add;
while(!(SPSR&(1<<SPIF)));
// Send Dummy transmission for reading the data
SPDR = 0x00;
// Wait for transmission complete
while(!(SPSR&(1<<SPIF)));
SPI_PORT |= (1<<SPI_CS);//slave deactivate
return (SPDR);
}
/***************************************************************/
/***************************************************************/
/********      Subeer Kumar Sarkar                **************/
/********      Electrical & Electronic Engineer   **************/
/***************************************************************/
/***************************************************************/
#include<avr/io.h>
#include<util/delay.h>
#include"spi.h"
int main(void)
{
SPIInit();
uint8_t pushButton,shift=1;
/******************** initialize MCP23S17 *******************/
// I/O Control Register: BANK=0, SEQOP=1, HAEN=1(Enable Addressing)
SPIWrite(IOCONA,0x28);
SPIWrite(IODIRA,0x00); //GPIOA as output
SPIWrite(IODIRB,0xff); //GPIOB as input
SPIWrite(GPPUB,0xff);  //enable pull-up resister for GPB
_delay_ms(5);
/*************************************************************/
while(1)
{
	pushButton=SPIRead(GPIOB);
	if(pushButton == 0b11111011)
	{
		for(int i=7;i>=0;i--)
		{
			SPIWrite(GPIOA,(1<<i));
			_delay_ms(50);
		}
	}
	else 
		SPIWrite(GPIOA,shift);
		_delay_ms(50);
		shift=(shift<<1);
		if(shift == 0)
		shift=1;
	}
return 0;
}