📄 rs232.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: RS232.C
**创 建 人: 叶皓贲
**最后修改日期: 2003-3-4
**描 述: DP-1581串口及I2C eeprom演示程序
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 叶皓贲
** 版 本: 1.0
** 日 期: 2003-3-4
** 描 述: DP-1581演示程序
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
/* 全局变量 */
uchar *temp,j=0,i;
uchar rec_com[64];//接收缓冲区
bit timeout=0; //接收超时标志
bit rec_ok=0; //接收成功标志
main()
{
TMOD=0X21;
TH1=0XFd;
TL1=0XFd;
SCON=0X50;
PCON=0;
TR1=1;
ET0=1;
ES=1;
EA=1;
while(1)
{
while(timeout==0&&rec_ok==0);
if(timeout)//超时处理
{
//send error for commad
rec_com[0]=0x12;
rec_com[1]=0xa1;
rec_com[2]=2;
rec_com[3]=0;
rec_com[4]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
ES=0;
for(i=0;i<5;i++)
{
SBUF=rec_com[i];
while(TI==0);
TI=0;
}
ES=1;
timeout=0;
rec_com[0]=0;
rec_com[1]=0;
}
if(rec_ok) //接收成功!
{
if(rec_com[1]!=0x20&&rec_com[1]!=0x21)//命令错误!
{
rec_com[0]=0x12;
rec_com[1]=0xa1;
rec_com[2]=2;
rec_com[3]=0;
rec_com[4]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
ES=0;
for(i=0;i<5;i++)
{
SBUF=rec_com[i];
while(TI==0);
TI=0;
}
ES=1;
//send error for command
}
else if(rec_com[1]==0x20)//收到读命令
{
i=rec_com[5];
if(IRcvStr(CSI24WC02,rec_com[3],&rec_com[3],rec_com[5]))//读成功
{
rec_com[0]=0x12;
rec_com[1]=0xa0;
rec_com[2]=i+2;
for(j=0;j<(i+3);j++)
rec_com[i+4]=rec_com[j]^rec_com[j+1];
ES=0;
j=j+2;
for(i=0;i<j;i++)
{
SBUF=rec_com[i];
while(TI==0);
TI=0;
}
ES=1;
}
//send read ok;
else//send read error读失败
{
rec_com[0]=0x12;
rec_com[1]=0xa1;
rec_com[2]=2;
rec_com[3]=1;
rec_com[4]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
ES=0;
for(i=0;i<5;i++)
{
SBUF=rec_com[i];
while(TI==0);
TI=0;
}
ES=1;
}
}
else if(rec_com[1]==0x21)//收到写命令
{
j=rec_com[2]-4;
if(ISendStr(CSI24WC02,rec_com[3],&rec_com[5],j))//写成功
{
rec_com[0]=0x12;
rec_com[1]=0xa0;
rec_com[2]=1;
rec_com[3]=rec_com[0]^rec_com[1]^rec_com[2];
ES=0;
for(i=0;i<4;i++)
{
SBUF=rec_com[i];
while(TI==0);
TI=0;
}
ES=1;
}
else//写失败
{
rec_com[0]=0x12;
rec_com[1]=0xa1;
rec_com[2]=3;
rec_com[3]=0;
rec_com[4]=0;
rec_com[5]=rec_com[0]^rec_com[1]^rec_com[2]^rec_com[3];
ES=0;
for(i=0;i<6;i++)
{
SBUF=rec_com[i];
while(TI==0);
TI=0;
}
ES=1;
}
}
rec_com[0]=0;
rec_com[1]=0;
rec_ok=0;
}
}
}
void int_com() interrupt 4
{
uchar * tmp,counter;
if(RI==1)
{
TR0=1;
TH0=-60000/256;
TL0=-60000/256;
rec_com[0]=SBUF;
RI=0;
while(RI==0&&timeout==0);
rec_com[1]=SBUF;
RI=0;
while(RI==0&&timeout==0);
rec_com[2]=SBUF;
RI=0;
tmp=&(rec_com[3]);
counter=rec_com[2];
do
{
while(RI==0&&timeout==0);
*tmp=SBUF;
tmp++;
counter--;
RI=0;
}
while(timeout==0&&counter!=0);
if(!timeout)
rec_ok=1;
TR0=0;
}
if(TI==1)
{
TI=0;
}
}
void int_t0() interrupt 1
{
static counter=0;
counter++;
TH0=-60000/256;
TL0=-60000%256;
if(counter==5)
{
timeout=1;
counter=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -