📄 system.#1
字号:
{
i2cstart();
write1byte(W_CONTROLBYTE);
if(checkack()==1)
return 1;
write1byte(addr>>8); //写入高8位地址
if(checkack()==1)
return 1;
write1byte((unsigned char)addr); //写入低8位地址
if(checkack()==1)
return 1;
write1byte(dat);
if(checkack()==1)
return 1;
i2cstop();
delayus(2000);
delayus(2000);
delayus(2000);
return 0;
}
//***************************************************************************************************************************************************
//写入一字节到存储器芯片指定地址处
//***************************************************************************************************************************************************
unsigned char read_byte(unsigned int addr)
{
unsigned char temp;
i2cstart();
write1byte(W_CONTROLBYTE);
if(checkack()==1)
return 1;
write1byte(addr>>8); //写入高8位地址
if(checkack()==1)
return 1;
write1byte((unsigned char)addr); //写入低8位地址
if(checkack()==1)
return 1;
i2cstart();
write1byte(R_CONTROLBYTE);
if(checkack()==1)
return 1;
temp=read1byte();
mnack();
i2cstop();
return temp;
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//======================================== END ===============================================
//**********************************************************************************************************************************************
//给LCD发送一个字节
//**********************************************************************************************************************************************
void send_lcd_byte(unsigned char dat)
{
STB=1;
while(Busy==1); //等待系统空闲
delay4us(); //延时us
delay4us();
P2=dat;
STB=0; //下降沿送入
delay4us();
STB=1 ;
}
//***********************************************************************************************************************************************
//通过UART0发送一个字符
//************************************************************************************************************************************************
void uart0_send_byte(unsigned char dat)
{
}
//*****************************************************************************************************************************************************
//读取发射率
//****************************************************************************************************************************************************
unsigned int get_emissivity(void)
{
return 0;
}
//****************************************************************************************************************************************************
//读取工作电压
//****************************************************************************************************************************************************
unsigned int get_voltige(void)
{
return 0;
}
//***************************************************************************************************************************************************
//读取工作电流
//****************************************************************************************************************************************************
unsigned int get_current(void)
{
return 0;
}
//===========================================================================================================
//timer0中断
//========================================================================================================
void timer0_ISR(void) interrupt 1
{
//unsigned char i;
TL0=0x40;
TH0=0xB0;//这样T0就在20ms内中断一次
//第一个10ms时采集电压和发射率
SFRPAGE=LEGACY_PAGE;
AMX0SL=2; //发射率通道
delay4us();
AD0INT=0;
AD0BUSY=1;//启动转换
while(AD0INT==0);
AD0INT=0;
emissivity_AD=(ADC0H & 0x0F)*256+ADC0L;
if(time==6)
{
AMX0SL=1; //电压通道
delay4us();
AD0INT=0;
AD0BUSY=1;//启动转换
while(AD0INT==0);
voltage_AD=(ADC0H & 0x0F)*256+ADC0L;
}
if(time==12)
{
AMX0SL=0; //电流通道
delay4us();
AD0INT=0;
AD0BUSY=1;//启动转换
while(AD0INT==0);
AD0INT=0;
current_AD=(ADC0H & 0x0F)*256+ADC0L;
//AMX0SL=2; //为发射率通道作准备
time=0;
}
time++;
//=======================================================================================================================================
//AI超时检测
//========================================================================================================================================
if(ES0)
{
AITIME++;
if(AITIME==40)
{
REN0=0;
ES0=0;
AIOVERFLG=1;
TIMEFLG=1;
}
}
}
//==============================================================================================================================================
//接收来自AI表的数据,此处有问题
//===============================================================================================================================================
void UART0_INT() interrupt 4//串口0中断函数,主要是用来接收AI808P的数据的中断
{
RI0=0;
AIBUF[AIDATNUM]=SBUF0;
AIDATNUM++;
if(AIDATNUM==10)
{
AIDATNUM=0;
REN0=0;
ES0=0;
AIOVERFLG=1;
}
}
//===============================================================================================================================================
//
//===============================================================================================================================================
void AIWR(unsigned char dat)//向串口0写数据函数
{
SBUF0=dat;
while(!TI0){}
TI0=0;
}
//===============================================================================================================================================
//
//===============================================================================================================================================
unsigned int write_AI(unsigned char addr,unsigned int dat)//AI8080P写数据函数
{
unsigned int CRC;
ERRORNUM=0;
again:
CRC=AIADDR+0x43+addr*256+dat;
AIOVERFLG=0;
AITIME=0;
delay100us();
TR=1;
delay100us();
REN0=0;//暂时不能接收数据
RI0=0;
TI0=0;
ES0=0;
AIDATNUM=0;
TIMEFLG=0;
AIWR(AIADDR+0x80);
AIWR(AIADDR+0x80);//传2遍地址
AIWR(0x43);
AIWR(addr);
AIWR(dat%256);
AIWR(dat/256);//传数据
AIWR(CRC%256);
AIWR(CRC/256);//传CRC码
delay100us();
ES0=1;//开串口0的中断,准备接收数据
REN0=1;//允许接收数据
TR=0;
while(!AIOVERFLG){}
TR=1;
if(TIMEFLG)
{
ERRORNUM++;
if(ERRORNUM == 10)
{
//显示通信故障
statusbar.text=(unsigned char*)"通信错误";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("请检查通讯电路是否正常");
languge_mode(English,no);
set_window_str("!");
}
goto again;
}
else
{
CRC=AIBUF[0]+AIBUF[1]*256+AIBUF[2]+AIBUF[3]*256+AIBUF[4]+AIBUF[5]*256+AIBUF[6]+AIBUF[7]*256+AIADDR;
if(CRC != (AIBUF[8]+AIBUF[9]*256))//如果校验错误则表有问题
{
ERRORNUM++;
if(ERRORNUM == 10)
{
//显示通信故障
statusbar.text=(unsigned char*)"通信错误";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("请检查通讯电路是否正常");
languge_mode(English,no);
set_window_str("!");
}
goto again;
}
else
{
return(AIBUF[0]+AIBUF[1]*256);
}
}
}
//================================================================================================================================================
//
//================================================================================================================================================
unsigned int read_AI(unsigned char addr)//AI808P读数据函数
{
unsigned int CRC;
ERRORNUM=0;
again:
CRC=AIADDR+0x52+addr*256;
AIOVERFLG=0;
AITIME=0;
delay100us();
TR=1;
delay100us();
REN0=0;//暂时不能接收数据
RI0=0;
TI0=0;
ES0=0;
AIDATNUM=0;
TIMEFLG=0;
AIWR(AIADDR+0x80);
AIWR(AIADDR+0x80);//传2遍地址
AIWR(0x52);
AIWR(addr);
AIWR(0);
AIWR(0);//传数据
AIWR(CRC%256);
AIWR(CRC/256);//传CRC码
delay100us();
ES0=1;//开串口0的中断,准备接收数据
REN0=1;//允许接收数据
TR=0;
while(!AIOVERFLG){}
TR=1;
if(TIMEFLG)
{
ERRORNUM++;
if(ERRORNUM == 10)
{
//显示通信故障
statusbar.text=(unsigned char*)"通信错误";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("请检查通讯电路是否正常");
languge_mode(English,no);
set_window_str("!");
}
goto again;
}
else
{
CRC=AIBUF[0]+AIBUF[1]*256+AIBUF[2]+AIBUF[3]*256+AIBUF[4]+AIBUF[5]*256+AIBUF[6]+AIBUF[7]*256+AIADDR;
if(CRC != (AIBUF[8]+AIBUF[9]*256))//如果校验错误则表有问题
{
ERRORNUM++;
if(ERRORNUM == 10)
{
//显示通信故障
statusbar.text=(unsigned char*)"通信错误";
set_statusbar_window(&statusbar);
languge_mode(English,no);
set_window_str(",");
languge_mode(Chinese,no);
set_window_str("请检查通讯电路是否正常");
languge_mode(English,no);
set_window_str("!");
}
goto again;
}
else
{
return(AIBUF[6]+AIBUF[7]*256);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -