关于82C54计数器的程序设计

在控制机器人程序中,需要对机器人的下一位置作出预估,这时就需要知道它目前的速度,然后根据程序周期
算出下一过程需要走过的路程:S=v*T。要测量速度,一般我们用增量型旋转编码器来测量。旋转编码器输出的为脉冲信号。我们这里使用NPN输出,分别为A相,B相和Z相。AB相相差90度的相位差,用来辨识转动方向;Z相每转动一圈产生一个脉冲。

本实例是用的PM511P多功能数据采集板

/*82C54计数器的初始化,为递减计数*/

void Begin_Encoder()
{
 outportb(ADAddr + 0x0f,0x34);   /*初始化clock0 :工作方式为2:比率发生器;CPU读/写方式为先读/写低8位,后读写高8位;数码形式为十六位二进制*/
 outportb(ADAddr + 0x0c,0x00);    /*初始值定为0x2000=8192*/
 outportb(ADAddr + 0x0c,0x20);
}


int In_LaserShaftPosition(void)   
{
 unsigned char dl,dh;
 int d;
 dl = 0;
 dh = 0;
 d  = 0;
 outportb(ADAddr + 0x0f,0x00);      /*锁住计数器,将计数值锁存到寄存器,供CPU读取,锁存操作时,其他四位无效,计数器按原来的方式工作*/
 dl = inportb(ADAddr + 0x0c);       /*读clock0低字节*/
 dh = inportb(ADAddr + 0x0c);       /*读clock0高字节*/
 d  = dh * 0x100 + dl;              /*组合成16位*/
 d  = 4096*2 -d;                    /*输出计数数*/
 return d;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值