金牌会员
- 积分
- 1710
- 威望
- 853
- 贡献
- 483
- 兑换币
- 527
- 注册时间
- 2012-12-18
- 在线时间
- 187 小时
|
用9s128一路累计计数 另一路用的是HCF4520
问题是用4520计数的 数值跳变 比另一路大两倍近 同样的PWM
即使我试用两路 同时对一个编码器计数 可还是4520计数大 而且还会跳变
求大神指导 都弄快一个星期了 谢谢
4520用B口读 程序如下 原理图在附件 求指导啊
void Port_init (void)
{
//DDRA = 0x00; //A口高四位输入?低四位输入
DDRB = 0X00; //B口输入 左边8位计数器
DDRM=0XFF;
PTM_PTM7 = 0; //PM0输出为0 左边计数器清零端 高有效
}
/**************ECT测速 PT7作为输入引脚*************/
void ECT_init(void)
{
TIOS|=0x02;
TSCR1=0x90;//定时器使能,定时器标志快速清除,[PRNT]bit3:0,预分频使能[TSCR2],
TSCR2|=0x07;//禁止定时器溢出中断,禁止复位, 预分频系数为128
PACNT=0;
PACTL_PAEN=1; //16 位的脉冲累加器A 使能
PACTL_PAMOD=0;//0 事件计数模式,1 门控计时累加模式
PACTL_PEDGE=1;//PAMOD=0 时,0 下降沿触发,1 上升沿触发
PACTL_CLK1=0;//0;//0:0 定时器时钟使用预分频因子定义的时钟
PACTL_CLK0=0;//0:1PACLK,1:0PACLK/256,1:1PACLK/65536
PACTL_PAOVI=0;//0 脉冲累加器A 溢出中断禁止,1 如果PAOVF 被置位则产生中断
PACTL_PAI=0;//0 禁止输入中断,1 如果PAIF 被置位则产生中断
}
void GetMotorPulse()
{
right_counter = PACNT; //存储脉冲次数
PACNT = 0; //脉冲计数器清零
if(right_counter < 255)
{
left_counter = PORTB;
}
else
{
left_counter = PORTB + 255;
}
PTM_PTM7 = 1;
PORTB=0;
PTM_PTM7 = 0;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|