- UID
- 189409
- 性别
- 男
- 来自
- 北京
|
主从PIC单片机I2C通信
主从PIC单片机I2C通信主的程序为
#i nclude <18F4523.h> // PICF4523 header file
#device ADC=12 // 12 bits ADC
#use delay(clock=4000000) // for 4Mhz crystal
#fuses XT, NOWDT, NOPROTECT, NOLVP // for debug mode
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, Parity=N, Bits=8, ERRORS)
#use i2c(Master, sda=PIN_C4, scl=PIN_C3,FORCE_HW)
void main()
{
int8 data;
int8 buffer[10];
// putc( 0x11 );
// putc( 0x22 );
// putc( 0x33 );
// putc( 0x44 );
// putc( 0x55 );
// putc( 0x66 );
// Write the letter 'B' to the slave board.
while(true)
{
i2c_start();
i2c_write(0xa1);
//i2c_write(0x00);
//data=i2c_read(0);
buffer[0] = i2c_read();
buffer[1] = i2c_read();
buffer[2] = i2c_read();
buffer[3] = i2c_read();
buffer[4] = i2c_read(0);
// buffer[5] = i2c_read();
// buffer[6] = i2c_read();
// buffer[7] = i2c_read(0);
i2c_stop();
//lcd_putc(data);
delay_ms(2);
//printf("read %c \n\r", data);
// putc( data );
putc( buffer[0] );
putc( buffer[1] );
putc( buffer[2] );
putc( buffer[3] );
putc( buffer[4] );
// putc( buffer[5] );
// putc( buffer[6] );
// putc( buffer[7] );
delay_ms( 2000 );
}
//while(1);
}
从的程序为
#i nclude <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0xa0)
//BYTE address;
BYTE buffer[10] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};
#INT_SSP
void ssp_interupt ()
{
BYTE state,dummy;
state = i2c_isr_state();
if(state >= 0x80) //Master is requesting data
{
i2c_write(buffer[state - 0x80]);
}
else
{
dummy=i2c_read(); //this line is to avoid locking the bus in case of a write
}
}
void main ()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_SSP);
while (TRUE) {}
} |
|