⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ls_com.c

📁 5402控制88796网卡的程序
💻 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 + -