AmmarAkhlaq
Junior Member level 1
- Joined
- Dec 12, 2013
- Messages
- 17
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1
- Activity points
- 162
IS it possible to sent multiple bytes of data using Spi of pic18f452.
can any one tell me that is it possible in SPI to sent data package of multiple bytes by master to the slave and slave save the each byte in separate variable or array index:
some thing like:
master sent out say: byte1 then byte2 then byte3 connectively : when slave receives first byte 1 it save it to x of in array[0],when byte 1 comes slave save it to y or array[1] and so on after receiving whole package from mater the slave out put each byte to leds after some delay. while receiving new package of data from master slave should display previously received data to LEds until transfer of new package completes. Both master and slave are Pic18f452. I am using MIKroC complier
I tried it may times but no success so far need advice or help to get it done.
here code for master
Here slave code:
can any one tell me that is it possible in SPI to sent data package of multiple bytes by master to the slave and slave save the each byte in separate variable or array index:
some thing like:
master sent out say: byte1 then byte2 then byte3 connectively : when slave receives first byte 1 it save it to x of in array[0],when byte 1 comes slave save it to y or array[1] and so on after receiving whole package from mater the slave out put each byte to leds after some delay. while receiving new package of data from master slave should display previously received data to LEds until transfer of new package completes. Both master and slave are Pic18f452. I am using MIKroC complier
I tried it may times but no success so far need advice or help to get it done.
here code for master
PHP:
Code:
unsigned char theta1,theta2,theta3,Count2,Count3,datain,intiCom,ready,Thetax=0,Thetay,Thetaz,x,y,z1,reset;
unsigned char Write(char dataout);
void mapInput();
void SysInit();
void sent_data(unsigned char Theta1 ,unsigned char Theta2 , unsigned char Theta3 );
void main(){
SysInit();
PORTB=0xF0;
while(1)
{
sent_data(95,100,70);
delay_ms(150);
sent_data(85,80, 50);
} }
void Write(unsigned char dataout)
{
PORTC.B2=0; // SS select low slave is selected port C pin 2
delay_ms(50); // wait.
SPI1_Write(dataout); // transmit the dataout
while(SSPSTAT.BF); // wait till end of data transmission
datain=SSPBUF;
PORTC.B2=1;
delay_ms(50); // wait.
}
void SysInit()
{
TRISA=0xFF; // configure Port A as input
ADCON1=0x06;// disable ADC and make all the pins of Port A as digital input.
TRISD=0x00; // configure Port D as output
PORTD=0x00; // Clear all pin of Port D
TRISB=0x00; // configure Port B as output
PORTB=0x00; // Clear all pin of Port B
TRISE=0x00; // configure Port B as output
PORTE=0x00; // Clear all pin of Port B
TRISC.B2=0; // Output for Slave select
TRISC.B3=0; // SCK output
TRISC.B4=1; // SDI input
TRISC.B5=0; // SDO output
PORTC.B2=1; // SS select high no slave is select
//Set SPI1 module to master mode, clock = Fosc/4, data sampled at the middle of interval,
//clock idle state low and data transmitted at low to high edge:
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH); // Setup the spi
}
void sent_data(unsigned char Theta1 ,unsigned char Theta2 , unsigned char Theta3 )
{
PORTC.B2=0; // SS select low slave is selected port C pin 2 f
delay_ms(50);
Write(Theta1);
delay_ms(20);
Write(Theta2);
delay_ms(20);
Write(Theta3);
delay_ms(20);
Write(0x0A);
delay_ms(20);
PORTC.B2=1;
}
PHP:
Code:
slave Code:
void InitTimer1();
void SysInit();
void Interrupt();
void mydelay_10us(long int a);
unsigned short datain,dataout;
unsigned char Received(unsigned short dataout);
unsigned long int total,high1,high2,high3,low,theta1,Required_delay1=0,theta2;
unsigned long int Required_delay2=0,theta3,Required_delay3=0;
unsigned char intiCom=0,ready=0,Thetax=0,x,Thetay,y,Thetaz,z1,update;
void main(){
SysInit();
InitTimer1();
ready==1;
theta1=90;
theta2=90;
theta3=90;
while(1)
{
Thetax = (long int) SPI1_Read(0x01);
delay_ms(500);
Thetay= (long int) SPI1_Read(0x01);
delay_ms(500);
Thetaz = (long int) SPI1_Read(0x01);
delay_ms(500);
PortB=0x0F;
update=SPI1_Read(0x01);
if(update==0x0A)
{
theta1 = Thetax;
theta2 = Thetay;
theta3= Thetaz;
PORTB=theta3 ;
}
}
}
void SysInit()
{
ADCON1=0x06; // disable ADC and make all the pins of Port A as digital input
TRISA=0xFF;
PORTA=0x00;
TRISB=0x00;
PORTB=0x00;
TRISD=0x00;
PORTD=0x00;
TRISE=0x00;
PORTE=0;
TRISC.B6=0;
TRISC.B7=0;
TRISC.B4=1; //SDI input
TRISC.B3=1; //SCK input from master
TRISC.B5=0; //SDO output
SSPSTAT.SMP=0; //input data sampled at middle
SSPSTAT.CKE=0; // transition from idle to active
SPI1_Init_Advanced(_SPI_SLAVE_SS_ENABLE, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
}
Last edited: