📄 复件.c
字号:
asm(" NOP ");
}
SPITXBUF=0;
while((SPISTS&0x0040)==0)
{}
b1=SPIRXBUF;
b1&=0x00FF; /*屏蔽所读数据高8位*/
*p1 |=b1; /*取低8位*/
p1++;
}
for(i=1;i<10;i++)
{
asm(" NOP ");
}
DIS_SROM();
for(i=1;i<15;i++)
{
asm(" NOP ");
}
}
/*读数据*/
void Read_Data()
{
EN_SROM();
for(i=1;i<15;i++)
{
asm(" NOP ");
}
SPITXBUF=0x0300;
while((SPISTS&0x0040)==0)
{}
b=SPIRXBUF;
SPITXBUF=b2; /*高位地址*/
while((SPISTS&0x0040)==0)
{}
b=SPIRXBUF;
SPITXBUF=b3; /*低位地址*/
while((SPISTS&0x0040)==0)
{}
b=SPIRXBUF;
for(i=1;i<10;i++)
{
asm(" NOP ");
}
SPITXBUF=0;
while((SPISTS&0x0040)==0)
{}
b1=SPIRXBUF;
for(i=1;i<10;i++)
{
asm(" NOP ");
}
DIS_SROM();
for(i=1;i<15;i++)
{
asm(" NOP ");
}
}
void Watch_dog()
{
WDKEY=0x0055;
WDKEY=0x00AA;
O_DATA5=0x0001;
IO_OUT1();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
O_DATA5=0;
IO_OUT1();
asm(" NOP ");
asm(" NOP ");
asm(" NOP ");
O_DATA5=0x0001;
IO_OUT1();
}
void can_read()
{
if(CANRCR&0x0010) /*是否邮箱接收到数据*/
{
CANIDBUF=CANID0H;
CANIDBUF>>=5;
CANIDBUF&=0x00FF;
if(CANIDBUF==0x0004) /*当前数据为轿厢呼叫信号*/
{
zz1box1=zz1box2;
zz1box2=CANBX0A;
if(zz1box1==zz1box2)
{
zz1++;
}
else
{
zz1=0;
}
if(zz1>=5)
{
zz1=0;
CAN_P=(unsigned int*)&BOXDATE0; /*轿厢呼叫首址0380H*/
*CAN_P=CANBX0A; /*0380H*/
CAN_BUF3=CANBX0A;
CAN_BUF3>>=8;
CAN_P++; /*0381H*/
*CAN_P=CAN_BUF3;
CAN_P++; /*0382H*/
*CAN_P=CANBX0B;
CAN_BUF3=CANBX0B;
CAN_BUF3>>=8;
CAN_P++; /*0383H*/
*CAN_P=CAN_BUF3;
CAN_P++; /*0384H*/
*CAN_P=CANBX0C;
CAN_BUF3=CANBX0C;
CAN_BUF3>>=8;
CAN_P++; /*0385H*/
*CAN_P=CAN_BUF3;
CAN_P++; /*0386H*/
*CAN_P=CANBX0D;
CAN_BUF3=CANBX0D;
CAN_BUF3>>=8;
CAN_P++; /*0387H都是低8位代表呼叫*/
*CAN_P=CAN_BUF3;
CAN_FLAG=0x0001;
}
}
else if(CANIDBUF==0x0003) /*当前数据为轿厢状态*/
{
zz2box1=zz2box2;
zz2box2=CANBX0A;
if(zz2box1==zz2box2)
{
zz2++;
}
else
{
zz2=0;
}
if(zz2>=10)
{
zz2=0;
STATEBOX=CANBX0A;
CAN_FLAG=0x0002;
}
}
else if(CANIDBUF>0x0010) /*当前数据为呼梯信号*/
{
//CAN_BUF0=CANID0L;
CAN_BUF0=CANIDBUF;
CAN_BUF0-=0x0010;
CAN_BUF1=CANBX0A; /*上行*/
if(CAN_BUF1==0)/*无上行*/
{
CAN_P=(unsigned int*)&UPDATE0;
CAN_P+=(CAN_BUF0/8);
CAN_BUF2=0x0001;
CAN_BUF2<<=(CAN_BUF0%8-1);
CAN_BUF2=~CAN_BUF2;
*CAN_P&=CAN_BUF2;
}
else if(CAN_BUF1==0x0FFFF)/*有上行*/
{
CAN_P=(unsigned int*)&UPDATE0;
CAN_P+=(CAN_BUF0/8);
CAN_BUF2=0x0001;
CAN_BUF2<<=(CAN_BUF0%8-1);
*CAN_P|=CAN_BUF2;
}
CAN_BUF1=CANBX0B; /*下行*/
if(CAN_BUF1==0)/*无下行*/
{
CAN_P=(unsigned int*)&DOWNDATE0;
CAN_P+=(CAN_BUF0/8);
CAN_BUF2=0x0001;
CAN_BUF2<<=(CAN_BUF0%8-1);
CAN_BUF2=~CAN_BUF2;
*CAN_P&=CAN_BUF2;
}
else if(CAN_BUF1==0x0FFFF)/*有下行*/
{
CAN_P=(unsigned int*)&DOWNDATE0;
CAN_P+=(CAN_BUF0/8);
CAN_BUF2=0x0001;
CAN_BUF2<<=(CAN_BUF0%8-1);
*CAN_P|=CAN_BUF2;
}
CAN_FLAG=0x0004;
}
else
{
CAN_FLAG=0;
}
CANRCR=0x00F0; /*复位RMP0和MIF0*/
asm(" CLRC INTM ");/*开中断*/
}
CANIFR=0x0FFFF; /* 清除全部CAN中断标志 */
}
void c_int1()
{
asm(" CLRC INTM ");/*开中断*/
}
void c_int3()
{
asm(" CLRC INTM ");/*开中断*/
}
void c_int2()
{
if(PIVR==0x002F) /*是否定时器10MS到*/
{
timeint=0;
TIMER_CHECK=0;
k1++;
b4++;
TIMEUP1|=0x0003; /*10MS定时到标志*/
T100MS--;
if(T100MS==0)
{
TIMEUP1|=0x000C;
T100MS=10;
T1S--;
if(T1S==0)
{
TIMEUP1|=0x0030;
DLY1S=1;
T1S=10;
}
}
}
EVBIFRB=0x0FFFF;
EVBIFRA=0x0FFFF;
IFR|=0x0002;
asm(" CLRC INTM ");/*开中断*/
}
void c_int4()
{
asm(" CLRC INTM ");/*开中断*/
}
void c_int6()
{
asm(" CLRC INTM ");/*开中断*/
}
void c_int5()
{
asm(" CLRC INTM ");/*开中断*/
}
void IO_init()
{
MCRA=0x001B; /*A,B口配置0000000000011011B*/
MCRB=0x00DC; /*C,D口配置0000000011011100B*/
MCRC=0; /*E,F口配置0000000000000000B*/
PADATDIR=0x00FF; /*A口输入,初始高电平*/
PBDATDIR=0x00FF; /*B口输入,初始高电平*/
PCDATDIR=0x20DF; /*C口输入,C5输出,初始低电平*/
PDDATDIR=0x01FF; /*D口输入,D0口输出,初始高电平*/
PEDATDIR=0x00FF; /*E口输入,初始高电平*/
PFDATDIR=0x00FF; /*F口输入,初始高电平*/
}
void Io_Receive()
{
IA_BUF1=IA_BUF;
IB_BUF1=IB_BUF;
IE_BUF1=IE_BUF;
IF_BUF1=IF_BUF;
IA_BUF=PADATDIR;
IB_BUF=PBDATDIR;
IC_BUF=PCDATDIR;
ID_BUF=PDDATDIR;
IE_BUF=PEDATDIR;
IF_BUF=PFDATDIR;
IA_BUF^=0x00FF; /*与1异或信号取反,与0异或无影响*/
IB_BUF^=0x00FF;
IC_BUF^=0x00FF;
ID_BUF^=0x00FF;
IE_BUF^=0x00FF;
IF_BUF^=0x00FF;
IA_BUF1&=0x00C4;
IA_BUF&=0x00C4;
IB_BUF&=0x00FF;
IB_BUF1&=0x00FF;
IE_BUF&=0x00FE;
IE_BUF1&=0x00FE;
IF_BUF&=0x007F;
IF_BUF1&=0x007F;
b1=(IA_BUF1==IA_BUF)&&(IB_BUF==IB_BUF1);
b2=(IE_BUF1==IE_BUF)&&(IF_BUF==IF_BUF1);
if(b1&&b2)
{
b13++;
}
else
{
b13=0;
}
if(b13==50)
{
b13=0;
IN_AB=IN_BB=IN_CB=0;
if(IA_BUF&0x0004) /*XD2*/
{
IN_AB|=0x0008;
}
if((IF_BUF&0x0008)&&(~IB_BUF&0x0001)) /*SGM且无RUN*/
{
IN_BB|=0x0020;
}
if(IA_BUF&0x0040) /*SK*/
{
IN_AB|=0x0004;
}
if(IA_BUF&0x0080) /*XD1*/
{
IN_AB|=0x0002;
}
if(IE_BUF&0x0002) /*KV*/
{
b15++;
if(b15==2)
{
b15=0;
IN_AB|=0x0001;
}
}
if((IE_BUF&0x0004)&&(~IB_BUF&0x0001)) /*猫眼且无RUN*/
{
IN_AB|=0x0080;
}
if((IE_BUF&0x0008)&&(~IB_BUF&0x0001)) /*SKM且无RUN*/
{
IN_AB|=0x0040;
}
if(IE_BUF&0x0010) /*BZ触点闭合*/
{
IN_AB|=0x0020;
}
if(IE_BUF&0x0020) /*门区*/
{
IN_AB|=0x0010;
}
if(IE_BUF&0x0040) /*主接触器触点粘连*/
{
IN_BB|=0x0001;
}
if(IE_BUF&0x0080) /*MX*/
{
IN_BB|=0x0002;
}
if(~IF_BUF&0x0001) /*GX2*/
{
IN_BB|=0x0004;
}
if(IF_BUF&0x0002) /*MS*/
{
IN_BB|=0x0008;
}
if(IF_BUF&0x0010) /*SD1*/
{
IN_BB|=0x0040;
}
if(IF_BUF&0x0020) /*XF*/
{
IN_BB|=0x0080;
}
if(~IF_BUF&0x0040) /*MB*/
{
IN_CB|=0x0001;
}
if(IB_BUF&0x0001) /*RUN*/
{
IN_CB|=0x0002;
}
if(IB_BUF&0x0002) /*ZS*/
{
IN_CB|=0x0004;
}
if(~IB_BUF&0x0004) /*GX*/
{
IN_CB|=0x0008;
}
if(IB_BUF&0x0008) /*XK*/
{
IN_CB|=0x0010;
}
if(IB_BUF&0x0010) /*SD2*/
{
IN_CB|=0x0020;
}
if(IB_BUF&0x0020) /*MSR*/
{
IN_CB|=0x0040;
}
if(~IB_BUF&0x0040) /*GV*/
{
IN_CB|=0x0080;
}
if(IB_BUF&0x0080) /*CB1*/
{
IN_BB|=0x0010;
}
}
}
void Io_Send()
{
O_DATA1=O_DATA2=O_DATA3=0x0FFFF;
if(AOPSYMBOL&0x0001) /*主接触器闭合标志*/
{
O_DATA1&=0x0FFFC;
}
if(AOPSYMBOL&0x0002) /*开门标志*/
{
if(DOOR==2)
{
O_DATA2|=0x000E;
O_DATA2&=0x0FFFE;
}
else if(DOOR==3)
{
O_DATA2|=0x000B;
O_DATA2&=0x0FFFB;
}
else
{
O_DATA2|=0x000A;
O_DATA2&=0x0FFFA;
}
}
else if(BOPSYMBOL&0x0001) /*关门标志*/
{
if(DOOR==2)
{
O_DATA2|=0x000D;
O_DATA2&=0x0FFFD;
}
else if(DOOR==3)
{
O_DATA2|=0x0007;
O_DATA2&=0x0FFF7;
}
else
{
O_DATA2|=0x0005;
O_DATA2&=0x0FFF5;
}
}
if(BOPSYMBOL&0x0020) /*上行标志*/
{
O_DATA2|=0x0020;
O_DATA2&=0x0FFEF;
}
else if(BOPSYMBOL&0x0040) /*下行标志*/
{
O_DATA2|=0x0010;
O_DATA2&=0x0FFDF;
}
if(DOPSYMBOL&0x0002) /*检修速度*/
{
O_DATA1|=0x00F0;
O_DATA1&=0x0FFEF;
}
else if(COPSYMBOL&0x0080) /*爬行*/
{
O_DATA1|=0x00F0;
O_DATA1&=0x0FF7F;
}
else if(COPSYMBOL&0x0001) /*高速*/
{
O_DATA1|=0x00F0;
O_DATA1&=0x0FFDF;
}
else if(COPSYMBOL&0x0002) /*中速*/
{
O_DATA1|=0x00F0;
O_DATA1&=0x0FFBF;
}
if(COPSYMBOL&0x0040) /*抱闸*/
{
O_DATA1&=0x0FFF3;
}
if(DTIMESYMBOL&0x0040) /*无动作60s*/
{
O_DATA2&=0x0FF7F; /*轿厢照明和风扇控制*/
}
if(k4==5)
{
O_DATA4 ^=0x0001;/*定时器500ms到LED灯闪*/
k4=0;
}
if(b11>=1000) /*收到26次CAN信息LED灯闪*/
{
O_DATA4^=0x0002;
b11=0;
}
if(b12>=1000) /*每次SCI发送LED灯闪*/
{
O_DATA4^=0x0004;
b12=0;
}
IO_OUT();
}
void CAN_init()
{
CANLAM0H=0x9FFF; /* 使用LAM0 */
CANLAM0L=0x0FFFF; /* 接收所有信息 */
CANMCR=0x1000; /* 配置寄存器改变请求 */
while((CANGSR & 0x0010)==0);
CANBCR2=0x0003; /* 设置数据传输率:250Kbps */
CANBCR1=0x0061;
CANMCR=0x0000;
while((CANGSR & 0x0010)==1);
CANMDER=0x0000; /* 初始化禁止邮箱的使能位 */
CANMCR=0x0100; /* 数据域改变请求 */
CANID0H=0x4000; /*标准帧,可接收不符信息 */
CANID0L=0x0000; /* ID=4000H, 29位 */
CANCTRL0=0x0008; /* 数据帧,8个字节 */
CANID4H=0x4000;
CANID4L=0x0000; /* ID=4000H, 29位 */
CANCTRL4=0x0008; /* 数据帧,8个字节 */
CANID5H=0x4040;
CANID5L=0x0000; /* ID=4040H, 29位 */
CANCTRL5=0x0008; /* 数据帧,8个字节 */
CANMCR=0x0480; /*正常工作模式,升序以及ABO设置*/
CANMDER=0x0031; /*Box0和Box4,Box5使能 */
CANIFR=0x0FFFF; /* 清除全部CAN中断标志 */
CANIMR=0x8000; /* 不允许邮箱0接收中断*/
CANTCR=0x0FFFF;
CANRCR=0x0FF0; /*允许信息覆盖*/
}
void Can_Receive()
{
if(CAN_FLAG!=0) /*是否更新*/
{
asm(" SETC INTM ");/*关闭所有可屏蔽中断*/
if(STATEBOX&0x0021) /*有无司机,有无满载信号*/
{
if(STATEBOX&0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -