📄 ls_com.c
字号:
#include "c54reg.h"
#include "ls_com.h"
pdata_type pdata0,pdata1;
word pdata_state0,pdata_state1;
////////////////////////////////////////////////////
extern word pio;
/////////函数定义///////////////////////////////////
word read_sub0(word address);
word read_sub1(word address);
void write_sub0(word address,word data);
void write_sub1(word address,word data);
void write_dma(word address,word data);
word read_dma(word address);
word compare_mem(word *sur,word *des,word lg);
void full_mem(word *pdata,word val,word lg);
void copy_mem(word *sur,word *des,word lg);
//////////////////////////////////////////////////////
///////////////////////////////////////////////////
// 硬件端口描述
// 单片机1连接同步串口1 数据终端线HD端口的HD1
// 单片机2连接同步串口0 数据终端线HD端口的HD0
//////////////////////////////////////////////////
//////////////////////////////////////////////////
// 模块名称:void init_com(void)
// 模块功能:初始化与单片机通讯的同步串口
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////
void init_com(void)
{
full_mem((word *)&pdata0,0,24);
pdata_state0=0;
pdata_state1=0;
/////////////初始化同步串口1///////////////////////////////
write_sub0(RCR1,0x40);
write_sub0(RCR2,0x41);
write_sub0(XCR1,0x40);
write_sub0(XCR2,0x40);
write_sub0(MCR1,0x0);
write_sub0(MCR2,0x0);
write_sub0(SPCR1,0x81);
write_sub0(SPCR2,0x01);
write_sub0(PCR,0x0f);
/////////////初始化同步串口0///////////////////////////////
/////////////初始化HD端口///////////////////////////////
}
//////////////////////////////////////////////////////////
// 模块名称:word pelcod(pelcod_type pelcod_data)
// 模块功能:发送pelcod协议
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
word pelcod(pelcod_type pelcod_data)
{
}
//////////////////////////////////////////////////////////
// 模块名称:void read_pdata0(void)
// 模块功能:接收单片机0发来得数据
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
interrupt void read_pdata0(void)
{word i,*tp,tmp;
asm(" ssbx intm");
tmp=DRR20;
tmp=DRR10;
pdata0.com_data=tmp;
pdata0.com_state=1;
asm(" rsbx intm");
}
//////////////////////////////////////////////////////////
// 模块名称:void read_pdata1(void)
// 模块功能:接收单片机1发来得数据
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
interrupt void read_pdata1(void)
{word tmp;
asm(" ssbx intm");
tmp=DRR21;
tmp=DRR11;
pdata1.com_data=tmp;
pdata1.com_state=1;
asm(" rsbx intm");
}
//////////////////////////////////////////////////////////
// 模块名称:void write_pdata0(void)
// 模块功能:发送到单片机0的数据已经被读走
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
interrupt void write_pdata0(void)
{
pdata_state0=1; //
}
//////////////////////////////////////////////////////////
// 模块名称:void write_pdata1(void)
// 模块功能:发送到单片机0的数据已经被读走
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
interrupt void write_pdata1(void)
{
pdata_state1=1; //
}
//////////////////////////////////////////////////////////
// 模块名称:word send_pdata0(word data)
// 模块功能:向单片机0发数据
// 入口参数:data 高8位为数据,低8位为数据地址
// no 发送地址0:单片机0 1单片机1
// 返回参数:0 发送失败单片机0没响应
// 1 发送成功单片机0读走数据
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
word send_pdata0(word no,word data)
{word tmp,tmp1;
//delay_ms(10);
if (no==0)
{
pdata_state0=0;
DXR10=data;
DXR20=0x55aa;
pio&=~KINT0;
}
else
{
pdata_state1=0;
DXR10=data;
DXR20=0x55aa;
pio&=~KINT1;
};
GPIOSR=pio;
for (tmp=0;tmp<0x3;tmp++)
{
for (tmp1=0;tmp<0x3fff;tmp++)
{if (pdata_state0==1)
{pdata_state0=0;
pio=pio|1;GPIOSR=pio; return 1; }
else
if (pdata_state1==1)
{pdata_state1=0;
pio=pio|1;GPIOSR=pio; return 1; };
delay();
};//endif tmp1
if (no==0)
pio|=KINT0;
else
pio|=KINT1;
GPIOSR=pio;
for (tmp1=0;tmp1<0xff;tmp1++);
if (no==0)
pio&=~KINT0;
else
pio&=~KINT1;
GPIOSR=pio;
}; //endif tmp
if (no==0)
pio|=KINT0;
else
pio|=KINT1;
GPIOSR=pio;
return 0;
}
//////////////////////////////////////////////////////////
// 模块名称:word read_sub0(word address)
// 模块功能:
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
word read_sub0(word address)
{
SPSA0=address;
return SPSD0;
}
//////////////////////////////////////////////////////////
// 模块名称:void write_sub0(word address,word data)
// 模块功能:
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
void write_sub0(word address,word data)
{
SPSA0=address;
SPSD0=data;
}
//////////////////////////////////////////////////////////
// 模块名称:word read_sub1(word address)
// 模块功能:
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
word read_sub1(word address)
{
SPSA1=address;
return SPSD1;
}
//////////////////////////////////////////////////////////
// 模块名称:void write_sub1(word address,word data)
// 模块功能:
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
void write_sub1(word address,word data)
{
SPSA1=address;
SPSD1=data;
}
//////////////////////////////////////////////////////////
// 模块名称:word read_dma(word address)
// 模块功能:
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
word read_dma(word address)
{
DMSA=address;
return DMSDN;
}
//////////////////////////////////////////////////////////
// 模块名称:void write_dma(word address,word data)
// 模块功能:
// 入口参数:无
// 返回参数:无
// 版本序号:v1.0
// 测试日期:2005.2.21
//////////////////////////////////////////////////////////
void write_dma(word address,word data)
{
DMSA=address;
DMSDN=data;
}
//////////////////////////////////////////////////
// 模块名称:word compare_mem(word *sur,word *des,word lg)
// 模块功能:比较数据
// 入口参数:数据的指针,lg数据长度
// 返回参数:1 相等 0:不等
// 版本序号:ver 1.0
// 测试日期:2003.3.10
//////////////////////////////////////////////////
word compare_mem(word *sur,word *des,word lg)
{word tmp;
for (tmp=0;tmp<lg;tmp++)
if (*sur++!=*des++) return 0;
return 1;
}
//////////////////////////////////////////////////
// 模块名称:void copy_mem(word *sur,word *des,word lg )
// 模块功能:复制数据,sur->des
// 入口参数:数据的指针,lg数据长度
// 返回参数:无
// 版本序号:ver 1.0
// 测试日期:2003.3.9
//////////////////////////////////////////////////
void copy_mem(word *sur,word *des,word lg)
{word tmp;
for (tmp=0;tmp<lg;tmp++)
*des++=*sur++;
}
//////////////////////////////////////////////////
// 模块名称:void full_mem(word *pdata,word val,word lg)
// 模块功能:填充数据,将数据区pdata用val填充,填充长度lg
// 入口参数:数据的指针,lg数据长度,val=填充数据
// 返回参数:无
// 版本序号:ver 1.0
// 测试日期:2003.3.9
//////////////////////////////////////////////////
void full_mem(word *pdata,word val,word lg)
{word tmp;
for (tmp=0;tmp<lg;tmp++)
*pdata++=val;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -