📄 77e58双串口通讯.c
字号:
/**********************************************************/
/* 这是用一片77e58的主控机程序
主机接收到的PC机的命令的长度为三个字节, 第一个字节指明数据送往主机.主录机.学生机,
第二个字节主机的为状态,第三个字节为具体操作
学生机接收到的主机的命令的长度为两个字节,第一个字节为地址,第二个字节主机的为状态
主录机接收到的主机的命令的长度为一个字节,为操作 */
/* main machine MPU1 to contrl main function and common */
/* MPU2 */
/* Writer date:2005.10.20 update:2006.5.12(配合4路V1.5主板) */
/**********************************************************/
//#include<absacc.h>
//#include<reg52.H>
#include<my.h> /*定义头文件 */
uchar idata dat[64]; /*定义寄存器大小 */
uchar Buff[4];
uchar RevDat[4];
uchar CallBuff[16];
uchar RecAStatus;
uchar RecBStatus;
uchar CallPoint,CallEnd;
uchar StudNo;
uchar FunDat;
uchar Rev1[8];
uchar Rev2[8];
uchar Rev3[8];
uchar inDat,offset;
uchar RevPoint,RevEnd;
bit Rev,Ret,isCall,isError,isRecA,isRecB,isCALLALL;
void CommonInit()
/*Init Comm Port*/
{
TMOD=0x20;
TL1=0xfd;TH1=0xfd;
TCON=0x40;
SCON=0x50;
scon1=0x50;
IE=0xd0;
P4=0x5;
}
//串口1处理
void Comm(void) interrupt 4 using 1 {
int j;
if(RI){
RI = 0;
ES = 0;
if (SBUF==0xff){ /*接收到的第一个字节如果是FF就进行再次接受*/
j=0;
while((!RI) && (j<1000))j++; /*等待第二个字字节*/
RI=0;
Rev1[RevPoint] = SBUF;
j=0;
while((!RI) && (j<1000))j++;
RI=0;
Rev2[RevPoint] = SBUF;
j=0;
while((!RI) && (j<1000))j++;
RI=0;
Rev3[RevPoint] = SBUF;
RevPoint++;
RevPoint = RevPoint & 0x7;
Rev=1;
} /* end of if (==0xff) */
ES = 1;
}
}
/*串口2处理程序 */
void Comm2(void) interrupt 7 using 1
{
if(ri1){
es1 = 0;
ri1 = 0;
RevDat[0]=sbuf1;
if (RevDat[0]>0x80)
{
if ((RevDat[0] & 0x10)==0x10){RecAStatus = RevDat[0]; isRecA=1;}
if ((RevDat[0] & 0x20)==0x20){RecBStatus = RevDat[0]; isRecB=1;}
}
else {
if (RevDat[0]<0x7f) {
CallBuff[CallPoint]=RevDat[0];
CallPoint++;
CallPoint=CallPoint & 0xf;
isCall=1; }
}
es1 = 1;
}
} /*串口用*/
/*主程序 */
int main()
{
uint j,ii;
CommonInit();
for(;;){ }
return 0;
} /*mainYONG*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -