📄 mds-100-77e58.c
字号:
/** 串口初始化子程序 其中串口0用定时器2,串口1用定时器1 **/
/** 输 入: 无 **/
/** 输 出: 无 **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/**************************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/**************************************************************************/
void Main_Init()
{
EA=1; /**允许总中断**/
/**定时器0初始化:定时方式**/
TMOD=0x21; /**定时器1工作在模式2,定时器0工作模式1**/
TH0 =0x4C;
TL0 =0xF7; /**baud rate=9600**/
TR0=1; /**启动定时器0**/
ET0=1; /**定时器0中断允许**/
/**串口0设置:用定时器1做串口0的波特率发生器**/
TL1 =0xFD; /**baud rate=9600**/
TH1 =0xFD;
SCON0=0x50; /**工作在模式1,允许接收**/
PCON =0x00; /**SM0=0 SM1=1 在10位异步收发模式 SMOD=0 溢出速率/32 **/
ES=1; /**串口0中断允许**/
TR1=1; /**启动定时器1**/
PS0=1; /**串口0中断优先**/
/**串口1设置:用定时器2做串口1的波特率发生器**/
SCON1 =0x50; /**工作在模式1,接收允许**/
T2MOD =0x20; /**定时器2工作在模式1**/
T2CON =0x30; /**用定时器2做串口1的波特率发生器**/
RCAP2H=0xFF; /** 设置定时器2**/
RCAP2L=0xDC;
ES1=1; /**串口1中断允许**/
TR2=1; /**启动定时器2**/
}
/***********************************************************************/
/** 函数名称: Send_Data_Com0(unsigned char Onebit) **/
/** 功能描述: 串口发送一个数组给蓝牙模块Com0口 **/
/** 输 入: **/
/** 输 出:无 **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/***********************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/***********************************************************************/
void Send_UART0(unsigned char data *Send_Buf)
{
unsigned char SendSum,i;
ES=0; /**关闭串口0中断**/
BT_Tran=0;
SendSum=0; /**清校验和 **/
ES=0; /**关串口0中断**/
for(i=0;i<9;i++) /**发送数组的前9位数据**/
{
SBUF=Send_Buf[i];
SendSum+=Send_Buf[i];
while(TI==0);TI=0;
}
SBUF=SendSum; /**发送此帧数据校验和**/
while(TI==0);TI=0; /**等待数据发送出去**/
ES=1; /**串口0中断允许**/
BT_Tran=1;
}
/***********************************************************************/
/** 函数名称: Send_Data_Com1(unsigned char Onebit) **/
/** 功能描述: 串口发送一个数组给FC机Com1口 **/
/** 输 入: **/
/** 输 出:无 **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/***********************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/***********************************************************************/
void Send_UART1(unsigned char data *Send_Buf)
{
unsigned char SendSum,i;
FC_Tran=0;
SendSum=0; /**清校验和 **/
ES1=0; /**关闭串口1中断*/
for(i=0;i<9;i++) /**发送数组的前9位数据**/
{
SBUF1=Send_Buf[i];
SendSum+=Send_Buf[i];
while(TI1==0);TI1=0;
}
SBUF1=SendSum; /**发送此帧数据校验和**/
while(TI1==0);TI1=0; /**等待数据发送出去**/
ES1=1; /**串口1中断允许**/
FC_Tran=1;
}
/***********************************************************************/
/** 函数名称: SP0_ISR() **/
/** 功能描述: 串口0中断接收子程序,接受来自蓝牙模块的数据 **/
/** 输 入: **/
/** 输 出: **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/***********************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/***********************************************************************/
void SP0_ISR() interrupt 4 using 2
{
unsigned char ReceSum,Recv_Buf,i;
ReceSum=0;
Recv_Buf=0;
BT_Rece=0;
if(SBUF==0xFF) /**判断缓冲区数区是否为起始位**/
{
for(i=0;i<9;i++) /**如果接收的为起始位,则连续接收后面的8位数据**/
{
while(RI==0);RI=0;
Rece_Data_BT[i]= SBUF; /**将接收缓冲区数据存入接收数据存储数组**/
ReceSum+=Rece_Data_BT[i]; /**计算接收数据校验和**/
}
while(RI==0);RI=0;
Recv_Buf = SBUF;
/**判断如果接收数据为帧测信号则发送应答信息**/
if(ReceSum == Recv_Buf)
{ RBT_Flag = 0xFA; }
else
{ RBT_Flag = 0xFB; }
}
else{RBT_Flag = 0;}
BT_Rece=1;
}
/***********************************************************************/
/** 函数名称: Intrup_Serial_Com1() **/
/** 功能描述: 串口1中断接收子程序,接收来自桩考监控机数据 **/
/** 输 入: **/
/** 输 出: **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/***********************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/***********************************************************************/
void SP1_ISR()interrupt 7 using 3
{
unsigned char ReceSum,Recv_Buf,Answ_Flag,i;
FC_Rece=0;
ReceSum=0;
Recv_Buf=0;
if(SBUF1 == 0xFF) /**判断缓冲区数区是否为起始位**/
{
for(i=0;i<9;i++) /**如果接收的为起始位,则连续接收后面的8位数据**/
{
while(RI1==0);RI1=0;
Rece_Data_FC[i]= SBUF1; /**将接收缓冲区数据存入接收数据存储数组**/
ReceSum+=Rece_Data_FC[i]; /**计算接收数据校验和**/
}
while(RI1==0);RI1=0;
Recv_Buf=SBUF1;
Answ_Flag=Rece_Data_FC[3];
/**判断如果接收数据为帧测信号则发送应答信息**/
if (ReceSum==Recv_Buf)
{
if(Answ_Flag==0xFA)
{RFC_Flag=0xFA;}
else if(Answ_Flag==0xFB)
{RFC_Flag=0xFB;}
}
else{RFC_Flag=0x00;}
}
else{RFC_Flag=0x00;}
FC_Rece=1;
}
/***********************************************************************/
/** 函数名称: TR0_ISR **/
/** 功能描述: 定时器0中断子程序。 **/
/** 输 入: **/
/** 输 出: **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/***********************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/***********************************************************************/
void TR0_ISR() interrupt 1 using 1
{
TH0=0x4C;
TL0=0xF7; /**定时器初值**/
if(N==50)
{
N=1;
/**判断右脚端口状态是否有变化**/
if(R_State==0&&Right_Sig==1)
{RG_Flag=1;}
else
{RG_Flag=0;}
/**判断左脚端口状态是否有变化**/
if(L_State==0&&Left_Sig==1)
{LF_Flag=1;}
else
{LF_Flag=0;}
/**判断熄火端口状态是否有变化**/
if(S_State==0&&Shart_Sig==1)
{SH_Flag=1;}
else
{SH_Flag=0;}
/**保存本次的端口状态**/
R_State=Right_Sig;
L_State=Left_Sig;
S_State=Shart_Sig;
}
else
N=N+1;
}
/***********************************************************************/
/** 函数名称: **/
/** 功能描述: 看门狗设置与喂狗子程序 **/
/** 输 入: **/
/** 输 出: **/
/** 作 者: Hunter **/
/** 日 期: 2006年03月 **/
/***********************************************************************/
/** 修 改 人: **/
/** 日 期: **/
/***********************************************************************/
/*看门狗设置子程序*/
void WDT_Init()
{
CKCON |= 0xc0;
TA = 0xaa;
TA = 0x55;
WDCON |= 3;
}
/*喂狗子程序*/
void WDT_Clr()
{
TA = 0xaa;
TA = 0x55;
WDCON &= 0xfe;
TA = 0xaa;
TA = 0x55;
WDCON |= 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -