27,373
社区成员
发帖
与我相关
我的任务
分享
while(t0 <= 2000)
{
DownBegin;//下行
if(IsPosRefresh == 1){PosRefresh();IsPosRefresh =0;wdt_reset();}//50ms调用1次位置刷新子程序并喂狗
if (PosFilter == 0x01)//0档有效
{
delay_ms(2);DownEnd;DownEnd;DownEnd;//停止调节
//这段是为了人工造成运行时间长故意加上的
t01 = t0;
while(t0 < (t01+1300))
{
if(IsPosRefresh == 1){PosRefresh();IsPosRefresh =0;wdt_reset();}
}
//实际的延时只有200ms,利用定时器0中断,2ms中断一次是2.6s
while(t0 <= 2000)//不论现在t0为多少,继续计时,看剩下的时间内能否上行到目标挡位
{
UpBegin;//上行
if(IsPosRefresh == 1){PosRefresh();IsPosRefresh =0;wdt_reset();}//50ms调用1次工位刷新子程序并喂狗
if(PosFilter == 0x02)//到目标挡位,信号的窗口期200ms,上面两行代码的实际影响的时间在10ms以下,应该不会错过
{
delay_ms(2);
UpEnd;UpEnd;UpEnd;//停止上行,连续发3次
//正常情况下,4s内能完成的话应该停止,下面还有若干代码,但实际故障的时候停不住
break;
}
else//如果上行还未到目标,继续上行的while循环
{
}
}
break;
}
else//下行未到0
{
}
}
if(t0 >= 2000)//如果超出4s就报故障,同时停止上行和下行。
{
UpEnd;DownEnd;
}
void SPI_Flash_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead)
{
uint16_t i;
SPI_FLASH_CS0;
TX1_String("*********************************\r\n");
SPI2_ReadWriteByte(W25X_ReadData);
SPI2_ReadWriteByte((uint8_t)((ReadAddr)>>16));
SPI2_ReadWriteByte((uint8_t)((ReadAddr)>>8));
SPI2_ReadWriteByte((uint8_t)ReadAddr);
for(i=0;i<NumByteToRead;i++)
{
pBuffer[i]=SPI2_ReadWriteByte(0XFF);
}
SPI_FLASH_CS1;
TX1_String("-----------------------------------\r\n");
}