📄 main.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 + -