主题:MCS-51 对 8254的读写 操作
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口操作方式操作的 ,不知道是写出问题 还是读 出问题 高人指教下。
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口操作方式操作的 ,不知道是写出问题 还是读 出问题 高人指教下。