24小时热门版块排行榜    

查看: 1692  |  回复: 9

爱蓉

新虫 (初入文坛)

[求助] 关于飞思卡尔单片机的TPM输入捕捉功能 已有1人参与

找不到哪里可以请教一些关于单片机的知识,发到这里不知道可不可以= =
用MC9S08JM60的板子写了个程序,目的是测两个信号之间的时间差,想法是利用板子的两个按键(PTBD4&PTBD5)来提供下降沿,按下按键,输入电平从高变为低,提供下降沿,利用TPM1的通道1和2来捕捉下降沿,分别利用两个LED(PTBD0&PTBD1)来显示进入了中断, 如果进入中断,则点亮对应的LED。   
这样,通过两次中断,分别去读对应的计数器的值,可以计算出两个信号(两个下降沿)之间的时间差,应该是一个很简单的程序,却不知道哪里出了问题,LED不会亮,应该是没进中断。     
程序附在下面,希望好心的老师同学可以帮帮忙看看,谢谢!!!
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


void PTBDD_INIT(void);
long i,j,c,x;
void main(void) {

  DisableInterrupts;//关闭中断
  SOPT1=0x03;//关狗

  PTBDD_INIT(); //对管脚初始化
  

  x=TPM1SC;
  TPM1SC_TOF=0;//对TPM1SC溢出标志清除
  TPM1SC_TOIE=0;  //TPM1中断禁止
  TPM1SC_CPWMS=0;//加法计数器方式
  TPM1SC_CLKSB=0; //总线时钟
  TPM1SC_CLKSA=1;
  TPM1SC_PS0=0;//1分频
  TPM1SC_PS1=0;
  TPM1SC_PS2=0;
  TPM1CNT=0x0000;// TPM计数器清零
  TPM1MOD=0x0000; //自由计数模式      
  

  TPM1C1SC_CH1F=0;
  TPM1C2SC_CH2F=0;
  TPM1C1SC_CH1IE=1; //1.2通道中断使能
  TPM1C2SC_CH2IE=1;
  TPM1C1SC_MS1B=0; //通道输入捕捉
  TPM1C1SC_MS1A=0;
  TPM1C2SC_MS2B=0;
  TPM1C2SC_MS2A=0;
  TPM1C1SC_ELS1B=1;//下降沿捕捉
  TPM1C1SC_ELS1A=0;
  TPM1C2SC_ELS2B=1;
  TPM1C2SC_ELS2A=0;
  
  EnableInterrupts; /* enable interrupts */
  /* include your code here */
  
  for( ; ; ) {
   
   
    //__RESET_WATCHDOG(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
void PTBDD_INIT(void){
PTBDD_PTBDD4=0;
PTBDD_PTBDD5=0;
PTBDD_PTBDD0=1;
PTBDD_PTBDD1=1;
PTBD_PTBD0=1;
PTBD_PTBD1=1;
}


void interrupt 10 tpm_isr1(){
  i=TPM1C1VH*256+TPM1C1VL;
  PTBD_PTBD0=0;   
  TPM1C1SC=TPM1C1SC&0x48;  //TPM1频道1中断标识清除   
  
  
}
void interrupt 11 tpm_isr2(){
  j=TPM1C2VH*256+TPM1C2VL;
  PTBD_PTBD1=0;
  TPM1C2SC=TPM1C2SC&0x48;   //TPM1频道2中断标识清除
  
}
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

爱蓉

新虫 (初入文坛)

程序并没有报错,但是也没有出现想要的结果
2楼2015-05-28 10:34:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chenjiejiang

金虫 (小有名气)

没用过飞思卡尔的单片机,但是你没有仿真器在线仿真么,看看进中断木有?
既然选择了远方 便只顾风雨兼程
3楼2015-05-28 12:49:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

爱蓉

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by chenjiejiang at 2015-05-28 12:49:16
没用过飞思卡尔的单片机,但是你没有仿真器在线仿真么,看看进中断木有?

有块板子,水平太渣了,不知道怎么看进没进中断= =
4楼2015-05-28 14:33:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chenjiejiang

金虫 (小有名气)

引用回帖:
4楼: Originally posted by 爱蓉 at 2015-05-28 14:33:02
有块板子,水平太渣了,不知道怎么看进没进中断= =...

在中断里面设置个断点就能看出来
既然选择了远方 便只顾风雨兼程
5楼2015-05-28 14:59:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

爱蓉

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by chenjiejiang at 2015-05-28 14:59:08
在中断里面设置个断点就能看出来...

我也不知道对不对,就在连个中断里面的PTBD0和1的位置设置了断点,然后运行的时候,再按了开关就可以点亮两个LED了,那应该是进了中断,但是因为亮灯时间太短,所以看不到的缘故?  不敢肯定
6楼2015-05-28 15:37:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

爱蓉

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by 爱蓉 at 2015-05-28 15:37:41
我也不知道对不对,就在连个中断里面的PTBD0和1的位置设置了断点,然后运行的时候,再按了开关就可以点亮两个LED了,那应该是进了中断,但是因为亮灯时间太短,所以看不到的缘故?  不敢肯定...

又不能用了= =  关掉重新调试,还是在那两个位置设置断点,就死活都进不去了。。。
7楼2015-05-28 15:56:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chenjiejiang

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
爱蓉: 金币+5, ★★★★★最佳答案, 谢谢chenjiejiang的帮助! 2015-05-29 17:04:09
一步一步来吧:
1. 每次按键的时候,用示波器或者万用表测量看高低电平是否正确
2. 如果上一步正确,在中断中设置断点,看是否每次都能进入中断,如果不能进入,则检测IO口中断配置是否有问题
3. 如果上一步正确,那么继续运行的时候LED灯就应该是常亮的。如果灯不亮,那么检测单片机是否正确输出了低电平。

进一步应该能确定问题所在
既然选择了远方 便只顾风雨兼程
8楼2015-05-28 16:10:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

爱蓉

新虫 (初入文坛)

谢谢!   我再试试,本来就挺悲催的,电脑昨天又遭遇了持续蓝屏和闪屏= =
9楼2015-05-29 17:02:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chenjiejiang

金虫 (小有名气)

引用回帖:
9楼: Originally posted by 爱蓉 at 2015-05-29 17:02:19
谢谢!   我再试试,本来就挺悲催的,电脑昨天又遭遇了持续蓝屏和闪屏= =

祸不单行啊,祝好运

[ 发自小木虫客户端 ]
既然选择了远方 便只顾风雨兼程
10楼2015-05-30 10:38:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 爱蓉 的主题更新
信息提示
请填处理意见