金牌会员
- 积分
- 1890
- 威望
- 1181
- 贡献
- 379
- 兑换币
- 26
- 注册时间
- 2011-4-21
- 在线时间
- 165 小时
|
本帖最后由 zhuwenwujy 于 2012-2-15 14:05 编辑
我是北丐 发表于 2012-2-15 12:00
能把你的程序贴出来看看吗?
//***********************************************脉冲累加初始化
void Pulse_Accumulator_Init(void){
PACTL = 0x46; //使能脉冲累加器,下降沿触发,禁止中断 0100 0110
PACNT = 0x0000; //计数器清零
}
//**************************************************PIT初始化
void PIT_Init(void){
PITCFLMT&=~(1<<7); //禁止PIT
PITCE |= 1<<0; //开启通道0
PITMUX &=~(1<<0); //与时基0连接
PITMTLD0 = 0xFF; //255
// PITLD0 = 0x927B; //37500*256/48000000= 0.2s ;
// PITLD0 = 0X752; // 20ms
PITLD0 = 0xEA5; //1875*256/48000000=10ms
PITCFLMT|=(1<<7); //使能定时器
PITTF|=(1<<0); //清除溢出标志位
PITINTE|=(1<<0); //开启溢出中断
}
//*************************************************PIT溢出中断服务程序
#pragma CODE_SEG __NEAR_SEG NON_BANKED //定时器中断
void interrupt 66 pit_interrupt(void)
{
short int a=0,b=0,c=0,R_Velocity,L_Velocity;
L_Velocity = PACNT; //左轮编码器脉冲数
b=PORTA; //取计数器低位值
b=(b&0x0f)+((b>>4)*10);
c=PTS; //取计数器高位值
c=(c&0x0f)+((c>>4)*10);
R_Velocity=c*100+b; //右轮计数器测得脉冲数
PTH |= (1<<0); //计数器清零
PTH &= ~(1<<0); //计数器开始工作
PITTF=0X01;//清通道0溢出标志,加载新的计时时间
}
|
|