登录站点

用户名

密码

主从PIC单片机I2C通信主的程序为

已有 1882 次阅读  2010-08-20 08:59   标签单片机  主从  PIC  通信  程序 

主从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) {}
}

上一篇: 中电网博客搬家了 下一篇: C语言宏定义技巧(常用宏定义)

分享 举报