📄 dram.c
字号:
{XBYTE[startaddr]=XBYTE[0X7E07];
for(i=0;i<10;i++){}
if(XBYTE[startaddr]!=XBYTE[0X7E07])
XBYTE[0xa06f]++;
} */
XBYTE[0x7e06]=0;
for(j=0;j<50;j++){}
//* XBYTE[0XA019]=0xa0; //R3,R4
//XBYTE[0XA020]=0x80;
//XBYTE[startaddr]=0;
}
//应答子程序
dram_answer()
{
unsigned int xdata temp,startaddr;
unsigned char xdata i,j;
if((centrl_flag<0x20)&&(centrl_flag!=0x17))
{
s_buffer=XBYTE[0X7f9e];
s_buffer=0;
XBYTE[0X7E00]=0X00;
XBYTE[0X7E01]=1+3; //E00~7E01H---发送字节的长度
i=0;
do{
temp=0xa030+i*5;
now_saddr=temp;
i=i+1;
}
while(XBYTE[temp]>0&&XBYTE[temp]<=4&&i<=5);
if(i==5){
//s_buffer.0=1,发送数据标志存储区已满
s_buffer=s_buffer&0x07;
s_buffer=s_buffer|0x01;
XBYTE[0XA023]=0;
}
else
{
XBYTE[temp]=0X87;
XBYTE[0X7E04]=now_saddr/256;
XBYTE[0X7E05]=now_saddr%256; //7E04~7E05H---使用的发送数据存储区的首地址(在双口RAM中)
s_buffer=(s_buffer&0x06);//*发送标志缓冲区不满 s_buffer.0=0
XBYTE[0XA023]=1; // CPU板修改数据区头尾标志
for(i=0;i<10;i++){}
if(XBYTE[0XA023]!=1){
XBYTE[0XA023]=1;
for(i=0;i<10;i++){}
if(XBYTE[0XA023]!=1)
{XBYTE[0XA023]=0;
s_buffer=s_buffer|0x04; //通讯板修改数据区头尾
}
}
else //if(XBYTE[0XA023]==1) //判断通讯板是否修改数据区头尾,A024H=1
{
i=30;
do{
for(j=0;j<10;j++){}
i=i-1;
}
while(i!=0&&XBYTE[0XA024]!=0);
if(i==0){
XBYTE[0XA023]=0;
s_buffer=s_buffer|0x04; //通讯板修改数据区头尾
}
else
{ //XBYTE[0XA023]=1; XBYTE[0XA024]=0
s_useaddr=XBYTE[0XA021]*256+XBYTE[0XA022];
if(s_useaddr>0xa700||s_useaddr<0xa080)
{
XBYTE[0XA021]=0xa0; //R3,R4
XBYTE[0XA022]=0x80;
}
tos_length=XBYTE[0X7E00]*256+XBYTE[0X7E01]; //R1R2
s_min_addr=XBYTE[0Xa01f]*256+XBYTE[0Xa020]; //R5R6
s_min_addr=s_min_addr&0xa7ff;
s_max_addr=XBYTE[0Xa021]*256+XBYTE[0Xa022]; //R7R0
s_max_addr=s_max_addr&0xa7ff;
s_useaddr=(s_max_addr-s_min_addr); //R3R4
if(s_max_addr>=s_min_addr)
s_useaddr=0x0780-s_useaddr;
else {
s_useaddr=s_min_addr-s_max_addr; //R3R4
s_useaddr=0x0780-s_useaddr;
}
if(s_useaddr>=tos_length) //R3R4>R1R2
{//*数据区有空间
s_buffer=(s_buffer&0X05);
temp_addr=XBYTE[0Xa021]*256+XBYTE[0Xa022];//*R5,R6*
temp_addr=(temp_addr&0xa7ff);
s_useaddr=temp_addr+tos_length; //*R3R4=R5R6+R1R2*
if(s_useaddr>=0xa7ff)
s_useaddr=s_useaddr-0x0780; //*超过界限*
temp=s_useaddr;
XBYTE[0XA021]=temp/256; //R3,R4
XBYTE[0XA022]=temp%256;
// XBYTE[0XA021]=temp/256; //R3,R4
// XBYTE[0XA022]=temp%256;
temp=temp_addr+1;
XBYTE[0X7E02]=(temp)/256; // /*R5,R6+1*
XBYTE[0X7E03]=(temp)%256;
startaddr=XBYTE[0X7E04]*256+XBYTE[0X7E05];
temp=startaddr;
temp_addr=temp_addr+1;
XBYTE[temp+1]=(temp_addr)/256; //*R5,R6*
XBYTE[temp+2]=(temp_addr)%256;
XBYTE[temp+3]=s_useaddr/256; //R3,R4
XBYTE[temp+4]=s_useaddr%256;
//temp=temp_addr;
}
else
{//*数据区空间不够
s_buffer=s_buffer|0x02;
XBYTE[now_saddr]=0;//*发送标志清零
}
}
}
}
XBYTE[0XA023]=0;
if(s_buffer==0){
XBYTE[0X6800]=centrl_flag;
XBYTE[0X6801]=0X00;
XBYTE[0X6802]=0X01;
XBYTE[0X6803]=0X87;
temp_addr=XBYTE[0x7e02]*256+XBYTE[0X7e03]; //R1R2
temp_addr=temp_addr;
for(j=0;j<4;j++){
if(temp_addr+j==0xf7ff)XBYTE[temp_addr+j]=0xf07f;
XBYTE[temp_addr+j]=XBYTE[0x6800+j];
}
XBYTE[0xa02f]++;
XBYTE[0Xa004]=0;
XBYTE[0Xa01B]=0;
startaddr=XBYTE[0X7E04]*256+XBYTE[0X7E05];
XBYTE[startaddr]=1;
XBYTE[0X7E07]=1;
/*if(XBYTE[startaddr]!=XBYTE[0X7E07])
{XBYTE[startaddr]=XBYTE[0X7E07];
for(i=0;i<10;i++){}
if(XBYTE[startaddr]!=XBYTE[0X7E07])
XBYTE[0xa06f]++;
} */
XBYTE[0x7e06]=0;
}
}
commu=0;
}
dram_receive()
{
unsigned char i;
for(i=0;i<6;i++){
now_addr=0XA050+5*i;
comm_number=XBYTE[now_addr];
if((comm_number>0)&&(comm_number<4)){
read_dram();
}
}
}
extern unsigned char xdata work_state,now_uncount,now_step;
extern unsigned char control_mod;
extern unsigned char time_id,sch_id;
extern unsigned char lamp_state[16];
extern signed char xdata lamp_color;
extern unsigned char xdata machine_state;
extern unsigned char xdata key;
extern unsigned int xdata sch_plan[32];
/***************************
状态上传函数 后串口发送
****************************/
send_0x833()
{
unsigned char i;
drsend(24);
if(s_buffer==0)
{
XBYTE[0X6800]=0x83;
XBYTE[0X6801]=0X00;
XBYTE[0X6802]=0X18;
XBYTE[0X6803]=work_state;
XBYTE[0X6804]=control_mod;
XBYTE[0X6805]=time_id;
XBYTE[0X6806]=sch_id;
for(i=0;i<16;i++){
XBYTE[0X6807+i]=lamp_state[i];
}
XBYTE[0X6817]=now_step; //*相位号
XBYTE[0X6818]=lamp_color; //*相位灯色
XBYTE[0X6819]=now_uncount;
XBYTE[0X681a]=machine_state;
nram_addr=0x6800;
dramsend(nram_addr);
}
}
/****************************************/
/*时制信息传递 */
/****************************************/
/***************************
流量上传函数 后串口发送
****************************/
extern unsigned char xdata send_liul[32];
extern unsigned char xdata fix_period;
send_0x866()
{
unsigned char time_flag,temp,temp1=0,temp2=0;
unsigned char i;
drsend(43);
if(s_buffer==0)
{
XBYTE[0x6900]=0X86;
XBYTE[0x6901]=0X00;
XBYTE[0x6902]=0x2A;
temp=XBYTE[0X8017];
if(temp==0x00)time_flag=fix_period;
else time_flag=temp;
XBYTE[0x6903]=time_flag;
XBYTE[0x6904]=now_year; ////*年
XBYTE[0x6905]=now_month; //*月
XBYTE[0x6906]=now_date; //*日
XBYTE[0x6907]=now_hour; //*时
XBYTE[0x6908]=now_min; //*分
XBYTE[0x6909]=now_sec; //*秒
XBYTE[0x690a]=usingloop_h/256;
XBYTE[0x690b]=usingloop_h%256;
XBYTE[0x690c]=usingloop_l/256;
XBYTE[0x690d]=usingloop_l%256;
for(i=0;i<32;i++){
XBYTE[0x690e+i]=send_liul[i];
send_liul[i]=0;
}
nram_addr=0x6900;
dramsend(nram_addr);
}
}
/***************************
故障上传函数 后串口发送
****************************/
extern unsigned char xdata error84[11];
send_0x844()
{
unsigned char i;
drsend(11);
if(s_buffer==0)
{if(error84[7]==0&&error84[8]==0)
XBYTE[0x6800]=0X8b;
else
XBYTE[0x6800]=0X8a;
//XBYTE[0x6800]=0X84;
XBYTE[0x6801]=0X00;
XBYTE[0x6802]=0x0b;
for(i=0;i<11;i++)
{
XBYTE[0X6803+i]=error84[i];
}
for(i=0;i<10;i++){}
//nram_addr=0x6800;
dramsend(0x6800);
}
}
send_timesch()
{
unsigned char i;
unsigned int temp;
drsend(65);
XBYTE[0x6900]=0X35;//时间计划标准用0x35做数据标识
XBYTE[0x6901]=0X00;
XBYTE[0x6902]=0x41;
XBYTE[0x6903]=key;
temp=0X6904;
for(i=0;i<32;i++){
XBYTE[temp+i]=sch_plan[i]/256;
temp++;
XBYTE[temp+i]=sch_plan[i]%256;
}
dramsend(0x6900);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -