Write82C54(3,0x32);//写控制字到控制寄存器
Write82C54(0,0xff);//写初值
Write82C54(3,0x0f);/写读回命令
 test=Read82C54(0);读8254的值
void Write82C54(unsigned char addr,unsigned int x)
{  if(addr<3)

   { M82C54A0=0;//选择计数器0
     M82C54A1=0;

      M82C54CS=0;
       NOP;
       tl=x%256;
       P0=tl;
       M82C54WR=0;
       NOP;
       M82C54WR=1;
       NOP;
       M82C54CS=1;
       NOP;
       M82C54CS=0;
       NOP;
       th=x/256;
       P0=th;
       M82C54WR=0;
       NOP;
       M82C54WR=1;
       NOP;
       M82C54CS=1;
}
 else
    {
       M82C54A0=1;
       M82C54A1=1;
       NOP;
       M82C54CS=0;
       NOP;
       tl=x%256;
       P0=tl;
       M82C54WR=0;
       NOP;
       M82C54WR=1;
       NOP;
       M82C54CS=1;
    }
}
unsigned int Read82C54(unsigned char addr)//读8254的数据
   {
      unsigned int counts;
      unsigned char tl,th ;
      if(addr==COUNTADDR0)
        {
          M82C54A0=0;
          M82C54A1=0;
          NOP;
          M82C54CS=0;
          NOP;
         M82C54RD=0;
          NOP;
          tl=P0;
          NOP;
          M82C54RD=1;
          NOP;
          M82C54CS=1;
          NOP;
          M82C54CS=0;
          NOP;
          M82C54RD=0;
          NOP;
          th=P0;
          NOP;
          M82C54RD=1;
          NOP;
          M82C54CS=1;
          counts=tl;
          counts=counts*256+tl;
         }

高手帮我看看 那里 出问题了 我读回来的数据都是不对的 ,因为设计的 原因  ,我对8254的操作是用I/O口操作方式操作的  ,不知道是写出问题 还是读 出问题   高人指教下。