找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

MC9S08QG8单片机实现单位时间捕获脉冲次数计数

[复制链接]
admin 发表于 2012-9-2 07:19:30 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
最近正在做玩具智能车,不可避免的要用到单片机的捕获功能。
现想通过MC9S08QG8单片机实现单位时间捕获脉冲次数计数,来计算小车的速度。
问题卡在了捕获功能的实现上。

所用单片机:MC9S08QG8 8位机
实现功能:单位时间(1ms)测量捕获的脉冲个数

下面是我的程序,调了好长时间了,总是达不到目的,请大家帮我看一看

//===================================================================
// 程序说明
//利用HCS908_QG8 单片机开发板的TPM模块的输入捕获功能实现对外来信号
//上升沿的捕获功能,捕获时间设定为1ms,记录这段时间内捕获的脉冲个数
//单片机第8脚定义为输入捕获模式
//===================================================================
//头文件
//===================================================================
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
//===================================================================
//变量和函数定义
//===================================================================
unsigned long int count=0; //捕获脉冲计数
unsigned long int OverFlow=0; //溢出数
unsigned long int n=0; //
//===================================================================
//端口初始化
//===================================================================
void PortB_INIT(void)
{
PTBD = 0X00; //端口B数据寄存器初始化为0
PTBDD_PTBDD5=0; //引脚PTB5作为输入引脚
}
//===================================================================
//输入捕获初始化
//===================================================================
void TPM_INIT(void)
{
TPMMODH=0x00;//设定模数,溢出时间约1ms
TPMMODL=0x1E;

//TPMC0VH=0x9C;
//TPMC0VL=0x40;
TPMSC=0x4F;//TPM时钟源为总线时钟;分频系数为128;溢出中断使能
TPMC1SC=0x44;//通道1中断使能,输入捕获模式,上升沿捕获
// TPMCNT=0; //任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
}
//==================================================================
void main(void) {

PortB_INIT();
TPM_INIT();
EnableInterrupts; /* enable interrupts */
/* include your code here */
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */

} /* loop forever */
/* please make sure that you never leave main */
}
//===================================================================
//计数器溢出中断
//===================================================================
interrupt 7 void TPM_OVF_ISR(void)
{
if(TPMSC_TOF==1)
{
TPMSC_TOF=0; //清除标志
count=n; //记录此刻的捕获脉冲个数
OverFlow++;
}
}
//===================================================================
//计数器通道1事件中断
//===================================================================
interrupt 6 void TPM_CAP_ISR(void)
{
if(TPMC1SC_CH1F==1)
{
TPMC1SC_CH1F=0; //清除标志
n++;
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 06:48 , Processed in 0.056167 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表