网上流传的章工代吗没有问题,现在改成1T的cpu,为啥没反映了
我现在晶振12m,
下面的代码是110592倍频以后的
有两个参数
//#define TIME_OF 270
//#define DELAY_VAL 115
要做些改动,如何修改呢?章功用的纯延时的方法
那位支支招
ulong Read_Card()
{
uchar i=0; //起始为的计数值
uchar error; //时间溢出的计数值
uchar error_flag; //时间溢出标志
uchar row,col; //行列寄存器
uchar row_parity; //行校验寄存器
uchar col_parity[5]; //列校验寄存器
uchar _data; //数据寄存器
ulong temp; //卡号寄存器
ulong timeout=0; //搜索次数寄存器
while(1)
{
if(timeout==10)return 0;//尝试10次搜索,如没有责返回0
else timeout++;
error=0;
while(Manchester_IN==0)//等高电平
{
if(error==TIME_OF)break;//超时退出
else error++;
}
if(error==100)continue;//结束本次主循环
else error=0;
Delay384us();
if(Manchester_IN)//寻找真正的1起始位,利用01的波形确定1起始位,即最后一位加第一位
{
for(i=0;i<8;i++)//判断是否是真的起始位
{
error=0; //限定等待时间
while(Manchester_IN)
{
if(error==TIME_OF)
{
error_flag=1;//时间溢出
break; //退出
}
else error++;
}
Delay384us(); //延时至下一码原
if(Manchester_IN&&error_flag==0); //判断下一位是否为1 和是否没有时间溢出
else break; //不是1退出,溢出退出
}
if(error_flag)//因时间溢出造成的本次主循环退出
{
error_flag=0;
continue; //退出本次循环
}
else;
if(i==8) //起始位接受完并且正确后开始接受数据
{
error_flag=0;
error=0; //限定等待时间
while(Manchester_IN)
{
if(error==TIME_OF)
{
error_flag=0;
break; //时间溢出造成的出错
}
else error++;
}
if(error_flag)
{
error_flag=0;
continue; //因等待待第一个正式数据错误引起的本次主循环退出
}
else;
//所有列校验清零
col_parity[0]=col_parity[1]=col_parity[2]=col_parity[3]=col_parity[4]=0;
for(row=0;row<11;row++) //共11行数据
{
for(col=0,row_parity=0/*行校验清零*/;col<5;col++)//共5列数据
{
Delay384us(); //延时至下一码原
if(Manchester_IN)_data=1; //数据为1
else _data=0; //数据为0
if(col<4&&row<10) //数据区的接受,后四个字节
{
temp<<=1; //左移一位
temp+=(ulong)_data; //数据相加
}
else;
row_parity+=_data; //行校验加入数据
col_parity[col]+=_data; //相应列校验加入数据 虽最后一列没有校验但为了方便也加上
error=0; //限定等待时间清零
while(Manchester_IN==(bit)_data)
{
if(error==TIME_OF) //由于时间溢出造成的数据出错
{
error_flag=1;
break; //退出本while循环
}
else error++;
}
if(error_flag)break; //出错退出内层for循环
else;
}
if(row<10)//最后一行没有校验所以要加限制
{
if((row_parity&0x01)||error_flag) //出错退出外for循环
{
temp=0;
error_flag=1;
break; //退出
}
else;
}
else;
}
//对最后接收的列校验进行判断,及对来自上面数据错误error_flag处理以结束本次主循环
if(error_flag||((col_parity[0]&0x01)&&(col_parity[1]&0x01)&&(col_parity[2]&0x01)&&(col_parity[3]&0x01)))
{ //最后一列没有校验
error_flag=0;
temp=0;
continue; //退出本次循环
}
else
BEEP=~BEEP;
return temp;//将正确的数据返回
}
continue;
}
continue;
}
} |