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

📄 main.c

📁 环境:keil c51 i2c调度工具
💻 C
字号:
#include <reg51.h>
#include <string.h>
#include <main.h>
#include <intrins.h>
//#define TEST


//定时器0用来辅助电脑串口发送数据
void timer0_isr   (void) interrupt 1
{
if(receive_total!=0xff)
    read_flag=1;
else
    receive_total=0xff;
}


//向串口发送一个字符
void send_char_com(void)
{
    unsigned char i;
    EA=0;
//------------------------------------------------------
//----------------SET I2C_ADDRESS-----------------------
//------0XFF,0XFF,ADDRESS--------------------------------
//--IF FAIL,DISPLAY;IF SUCCESS,NO DISPLAY
	if((receive_total==2)&serial_data[0]==0xff&serial_data[1]==0xff)
		{
		i2c_device_address=serial_data[2];
                i2c_device_sub_data_r(i2c_device_address+1,00);
		serial_data[3]=i2c_data;                
		i2c_device_sub_data(i2c_device_address,00,serial_data[3]);
			if(IIC_ERROR)
				{
				SBUF=SBUF;
			    	while(TI==0);
			       TI=0;
				}
                                receive_total=0xff;
		}
//--------------------------------------------------------
	else
		{
//-------------------------------------------------------
//------------IF SEND 10 11 12 13,--->I2CADDRESS1011,I2CADDRESS1213
//------------IF FAIL,DISPLAY ADDRESS,ELSE NO DISPLAY-------------------------
			if(~READ_WRITE_SET)
		  	{
		 		 for(i=0;i<receive_total;)
		    			{
					i2c_device_sub_data(i2c_device_address,serial_data[i],serial_data[i+1]);
						if(IIC_ERROR)
						{
						SBUF=serial_data[i];
			    			while(TI==0);
			 	    	  TI=0;
						}
					i=i+2;
		    			}
				 		SBUF=0x33;//发完标志
			    			while(TI==0);
			 	    	       TI=0;
			}
//-------------READ FROM I2C_DEVICE--------------------------------
//-------------DISPLAY ADDRESS AND DATA---------------------------
			if(READ_WRITE_SET)
				{
				for(i=0;i<=receive_total;i++)
					{
					SBUF=serial_data[i];
				    	while(TI==0);
				       TI=0;
					i2c_device_sub_data_r(i2c_device_address+1,serial_data[i]);
					SBUF=i2c_data;
				    	while(TI==0);
				       TI=0;
					}
				}
                        receive_total=0xff;
		}
EA=1;
}


//串口接收中断函数
void serial () interrupt 4
{
    if(RI)
    {
        RI = 0;TH0=0;
			 receive_total++;
        serial_data[receive_total]=SBUF;
/*//----------SET ADDRESS------------------------------
//---------------------------------------------------
		if(receive_total==2)
		  {//0xff,0xff+address
			if(serial_data[0]==0xff&serial_data[1]==0xff)
				{i2c_device_address=serial_data[2];}
		  }*/
//-----------------------------------------------------
//-----------------------------------------------------
//----------GOTOISP_prom------------------------------
		if(receive_total==2)
			{
			if(serial_data[0]==0xa0&serial_data[1]==0x00&serial_data[2]==0x0a)
				GOTOISP_prom();
			}
//-----------------------------------------------------
//----------SET I2C WRITE------------------------------
		if(receive_total==2)
			{
			if(serial_data[0]==0xa0&serial_data[1]==0x00&serial_data[2]==0x01)
				{READ_WRITE_SET=0;receive_total=0XFF;}
			}
//-----------------------------------------------------
//----------SET I2C READ------------------------------
		if(receive_total==2)
			{
			if(serial_data[0]==0xa0&serial_data[1]==0x00&serial_data[2]==0x02)
				{READ_WRITE_SET=1;receive_total=0XFF;}
			}

//------------------------------------------------------
#ifdef TEST
       if(serial_data[receive_total]!=receive_total)
       _nop_();
#endif

    }
}


main()
{
    initi_system();  //初始化串口
    while(1)
    {
          if(read_flag)  //如果取数标志已置位,就将读到的数从串口发出
          {
               read_flag=0; //取数标志清0
		send_char_com();


          }
    }

}




⌨️ 快捷键说明

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