首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

PACB不能计脉冲数的问题

PACB不能计脉冲数的问题

先看下面的程序:
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

int count;

/*--------------------------------------------------------------
计数器初始化
---------------------------------------------------------------*/

void delay_ms(void)
{
unsigned int i;
for(i=0;i<=1140;i++);
}

void delay(unsigned int n)
{
unsigned int i;
for(i=0;i delay_ms();
}


void Pulse_Count_Init()
{
MCFLG_MCZF=1;
MCCTL_MODMC=1;
MCCTL_MCZI=1;
MCCTL_MCEN=1;
MCCNT=60000; //40ms中断一次
MCCTL_MCPR=3; //16分频
MCCTL_FLMC=1;
TIOS_IOS0=0; //PTT0作为码盘脉冲输入
TCTL4=0x01; //只在上升沿捕获脉冲
PBCTL_PBEN=1;
}
//中断服务程序
#pragma CODE_SEG NON_BANKED

void interrupt 26 Pulse_Count(void)
{
//uint i;

//读出脉冲计数值
count=PACN10;
PORTB=(char)count;
delay(1000);
PACN10=0;
MCFLG_MCZF = 1;
}
#pragma CODE_SEG DEFAULT

void PLLinit(void) {
/*--------锁相环初始化-------*/
REFDV=1;
SYNR=2; //bus clock=16*(2+1)/(1+1)=24M;
while(CRGFLG_LOCK==0);
CLKSEL=0x80;
}
void PWMIni()
{
PWME_PWME5=0;
PWMCLK=0x20; //选择PWM5口的时钟源为 SA
PWMPRCLK=0x07; //设置CLOCK A频率为bus clock/128 8000000/128=62500Hz *3
PWMSCLA=4; //设置再分频寄存器 62500/(4*2)= 7812.5Hz *3
PWMPOL=0x20;
PWMCAE=0; //对齐方式,左对齐输出
PWMPER5=78; //PWM5输出周期=3*7812.5/78=300Hz
PWMDTY5=31; //占空比=31/78=40%
DDRP=0xff;
PWME_PWME5=1;
PWMCNT5=0;
}

void main(void) {
/* put your own code here */

PLLinit();
Pulse_Count_Init();
PWMIni();
DDRB=0xff;
PORTB=0x7e;
EnableInterrupts;
for(;;) {} /* wait forever */
/* please make sure that you never leave this function */
}

运行时,将PWM5口与PT0口相连,从PWM5口产生方波,然后从PT0口计脉冲,将脉冲数从PORTB口显示出来.但出来的结果却是与PORTB口相连的小灯全亮,而且延时跟不延时都一样.
参考下面的帖子,说是捕捉方式没有设置,但我明明设置了啊.希望哪位高人指点一下!!
http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=62324&ID=62324
这段程序有问题吧:
void delay(unsigned int n)
{
unsigned int i;
for(i=0;i delay_ms();
}
海纳百川  有容乃大
另外,我再DP256的EVB板上运行过你的程序了,PORTB的输出应该是有变化的。只是不明白你在中断中延时一段时间后将PACN10清零,为什么要这样做?
海纳百川  有容乃大
关于那个函数的问题,我想是这个网站支持的问题.程序开头两行的预处理命令也有问题,有些东西不见了,难道你没注意到吗?
函数本来是没问题的,只是帖子一发表就成那样了,只有把程序上传给你看了.
这个程序本来是用来测速的,每40毫秒读一次脉冲累加器的脉冲数.起先我以为是因为太快了而显示不出来,所以将显示延时1秒,但是结果还是一样的,八只LED灯还是全亮.之所以清0是为了从0开始计数.
不过如果换成PACA,结果就没问题了.
难不成是我这边的PACB口坏了?

http://bbs.chinaecnet.com/uploadImages/ect20ms.rar
我这里试的结果是PB3和PB1是暗的,其他的LED是亮的;拔掉PT0口与PP5口的连线,LED就全亮了。程序应该没问题。
海纳百川  有容乃大
返回列表