打印

2270B的问题

[复制链接]
1461|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuandaoxy|  楼主 | 2010-11-9 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上流传的章工代吗没有问题,现在改成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;
}
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

855

主题

1044

帖子

4

粉丝