高级会员
- 积分
- 539
- 威望
- 363
- 贡献
- 58
- 兑换币
- 0
- 注册时间
- 2010-11-1
- 在线时间
- 59 小时
|
我写了一个编码器测速的程序,可是在PT7口一直测不到脉冲,单步调试程序不进入中断那部分,不知道怎么回事。各位大侠帮忙指教一下。
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include<MC9S12XS128.h>
word num = 0;//脉冲值
uchar flag = 0,ch;
int a;
//总线超频到20M
void Init_pll(void)
{
CLKSEL = 0X00; /* disengage PLL to system */
PLLCTL_PLLON = 1; /* turn on PLL */
SYNR = 4;
REFDV=1 ; /* pllclock=2*osc*(1+SYNR)/(1+R */
_asm(nop); /* BUS CLOCK=20M */
_asm(nop);
while(!(CRGFLG_LOCK == 1)); /* when pll is steady ,then use */
CLKSEL_PLLSEL = 1; /* engage PLL to system; */
}
//PT0口用来定时400ms 每1.6s读取一次脉冲值
void PIT_init() {
PITCFLMT_PITE = 0;//禁止PIT
PITCE_PCE0 = 1;//允许通道0
PITMUX_PMUX0 = 0;
PITMTLD0=199; //400ms定时
PITLD0=40000-1;
PITINTE=0X01;
PITTF_PTF0 = 1;
}
//PT7口用来接收编码器脉冲
void PA_init() {
PACTL=0X50;//开启脉冲累加功能,上升沿计数,输入时钟为PA预分频时钟脉冲累加溢出中断使能,输入中断使能
PACNT=0x0000;//清零
TCTL3=0X40;
TIE=0X00;
TIOS=0X00;
PAFLG_PAIF = 1;
PACTL_PAEN = 1;
}
void Init_PWMout(void)
{
DDRB = 0XFF;
PORTB = 0X05;
PWME = 0x00; /* 禁止PWM输出 */
PWMCTL = 0x70; /* 01,23,45通道级联 */
PWMPOL = 0x0a; /* 通道01的输出极性为正极性,23 */
PWMCAE = 0x11; /* 全部通道是中心对齐 */
PWMCLK = 0x00; /* 时钟源为:CLOCKA,CLOCKB */
PWMPRCLK = 0x40; /* 时钟CLOCKA不分频40MHZ,CLOCK */
PWMPER01 = 500; /* 电机速度控制 周期 250us F=4K */
PWMDTY01 = 200; /* 默认占空比 */
// PWMPER23 = 50000; /* 舵机方向控制 周期20ms F=50HZ */
// PWMDTY23 = 3790; /* 脉宽控制-调占空比 */
PWME = 0x02; /* 使能PWM输出 */
}
void main(void) {
a = 5;
Init_pll();
PIT_init();
Init_PWMout();
PA_init();
EnableInterrupts;
for(;;) {
} /* loop forever */
/* please make sure that you never leave main */
}
#pragma CODE_SEG NON_BANKED
void interrupt 66 PIT0() {
flag++;
if(flag==4) {
flag=0;
num=PACNT;//读取脉冲值
PACNT=0X0000;//脉冲值清零
}
PITTF=0X01;
}
#pragma CODE_SEG DEFAULT |
|