//***********************************************************************//
//** 函数名称: Sensor_AD **//
//** 功能描述: 称重传感器AD转换 **//
//***********************************************************************//
void Sensor_AD()
{
Delay7ms();
ST=0; //启动AD转换
OE=0;
ST=1;
ST=0;
if(EOC==0);
{
OE=1;
Sensor_Data=P0;
OE=0;
}
}
//***********************************************************************//
//** 函数名称: Key_Data **//
//** 功能描述: 键盘扫描程序 **//
//***********************************************************************//
void Key_Data()
{
if(P2_3==0)
{
Delay20ms(); //延时20ms,跳过接下抖动
Key_Data[0]=0x01;
while( P2_3 == 0 );//如果一直按着键,则不停地执行该循环,实际是等待松键
Delay20ms(); //延时20ms,跳过松开抖动
}
else Key_Data[0]=0x00;
if(P2_4==0)
{
Delay20ms();
Key_Data[1]=0x01;
while( P2_4 == 0 );
Delay20ms();
}
else Key_Data[1]=0x00;
if(P2_5==0)
{
Delay20ms();
Key_Data[2]=0x01;
while( P2_5 == 0 );
Delay20ms();
}
else Key_Data[2]=0x00;
if(P2_6==0)
{
Delay20ms();
Key_Data[3]=0x01;
while( P2_6 == 0 );
Delay20ms();
}
else Key_Data[3]=0x00;
}
//***********************************************************************//
//** 函数名称: DTU_Send **//
//** 功能描述: DTU发送数据程序。 **//
//***********************************************************************//
void DTU_Send()
{
unsigned char data i,j,k;
CheckData=0x00; //清校验和
StartBit[2]={0x55,0xAA};
SignBit=0x0B;
DataLen[2]={0x00,0xC8};
DTU_SendData[25]={RS485_Data1[0],RS485_Data1[1],RS485_Data1[2],RS485_Data1[3],RS485_Data1[4],
RS485_Data1[5],RS485_Data1[6],RS485_Data1[7],RS485_Data1[8],
RS485_Data1[9],RS485_Data2[0],RS485_Data2[1],RS485_Data2[2],
RS485_Data2[3],RS485_Data2[4],RS485_Data2[5],RS485_Data2[6],RS485_Data2[7],
RS485_Data2[8],RS485_Data2[9],Sensor_Data,Key_Data[0],Key_Data[1],Key_Data[2],Key_Data[3]};
ES1=0; //关闭串口1中断
DTU_Tran=0;
for(i=0;i<2;i++)
{
SBUF=StartBit[i]; //发送起始位
delay(); //延时,以防止数据丢失
}
SUBF=SignBit; //发送标志位
for(j=0;j<2;j++)
{
SBUF=DataLen[j]; //发送数据长度
CheckData+=DataLen[j];//更新累加和校验
delay(); //延时,以防止数据丢失
}
for(k=0;k<25;k++)
{
SBUF=DTU_SendData[k];//逐一发送命令缓冲区的数据
CheckData+=DTU_SendData[k];//更新累加和校验
delay(); //延时,以防止数据丢失
}
SBUF=CheckData;
ES1=1; //串口1中断允许/
DTU_Tran=1;
}
//***********************************************************************//
//** 函数名称: WDT_Init **//
//** 功能描述: 看门狗设置子程序 **//
//***********************************************************************//
void WDT_Init()
{
CKCON |= 0xc0;
TA = 0xaa;
TA = 0x55;
WDCON |= 3;
}
//***********************************************************************//
//** 函数名称: WDT_Init **//
//** 功能描述: 喂狗子程序 **//
//***********************************************************************//
void WDT_Clr()
{
TA = 0xaa;
TA = 0x55;
WDCON &= 0xfe;
TA = 0xaa;
TA = 0x55;
WDCON |= 1;
}
if(RS485_Data==RDCoder2_command_table[M_CoderADDrC]) //判断缓冲区是否为编码器2数据帧起始位
{
M_Coder2ADDrC++;
}
//***********************************************************************//
//** 函数名称: delay7ms **//
//** 功能描述: 延时子程序,fosc=16MHz,延时7ms **//
//***********************************************************************//
void Delay7ms(void)
{
unsigned int i,j;
for(i=3;i>0;i--)
for(j=777;j>0;j--)
;
}
//***********************************************************************//
//** 函数名称: delay21ms **//
//** 功能描述: 延时子程序,fosc=16MHz,延时21ms **//
//***********************************************************************//
void Delay20ms(void)
{
unsigned int i,j;
for(i=3;i>0;i--)
{
Delay7ms();
}
} |