⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_slave_read.c

📁 PIC to PIC communication using i2c bus. Multi-master implemented on pic24.
💻 C
字号:
#include "p24fj128ga010.h"
#include "lcd.h"
#include "CONU2.h"
#include <string.h>
#include <stdlib.h>

#define USE_AND_OR	// To enable AND_OR mask setting for I2C. 

// Setup configuration bits
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2) 
_CONFIG2( FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRIPLL)
//using PLL

#define lenArray(arr)  (sizeof(arr)/sizeof(arr[0]))

// calculate baud rate of I2C
#define Fosc	(8000000) 
#define Fcy		(Fosc/2)	// no PLL
#define Fsck	100000
#define I2C_BRG	((Fcy/2/Fsck)-1)

unsigned char myaddress=30, end;
unsigned char i2cdata[10];
int datasz=0;
char str[16];
int i=0;

void i2c_wit(unsigned int cnt)
{
	while(--cnt)
	{
		asm( "nop" );
		asm( "nop" );
	}
}

void _ISR _SI2C1Interrupt(void)
{
	_RA1=!_RA1;
	if(I2C1STATbits.D_A==0)
	{
		end=I2C1RCV >> 1;
		datasz=0;
		i=0;
	}
	else
	{
		i2cdata[i]=I2C1RCV;
		i++;
	}
 	
	if(end==30 && i2cdata[4]==56)
	{
		_RA5=1;
		clrLCD();	
		homeLCD();
		sprintf(str," Get to ID [%d] ",end);
		putsLCD(str);
		for(i=0;i<5;i++)
		{
			sprintf(str,"%d ",i2cdata[i]);
			putsLCD(str);
		}
	}	

	I2C1CONbits.SCLREL=1;
	_SI2C1IF=0;
}

void initALL(void)
{
	initLCD();

	TRISAbits.TRISA0=0;
	TRISAbits.TRISA1=0;
	TRISAbits.TRISA2=0;
	TRISAbits.TRISA3=0;
	TRISDbits.TRISD6=1;
	TRISDbits.TRISD7=1;	
	TRISAbits.TRISA7=1;
}

int main(void)
{
	initALL();

	clrLCD();
	homeLCD();
	putsLCD("RD6 to Start");
	_RA0=1;

	while(_RD6==1);

	clrLCD();
	homeLCD();
	putsLCD("Waiting Data...");
	_RA1=1;

	//defenir endere鏾
	I2C1ADD=myaddress;	

	//enable I2C
	I2C1CON=0x8000;
	I2C1CONbits.STREN=1;
	I2C1BRG=I2C_BRG;

	IFS1bits.SI2C1IF=0;
	IPC4bits.SI2C1P=0b011;
	
	IEC1bits.SI2C1IE=1;

	while(1);
	return 0;
}



	

				

		
	
		
			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -