📄 main.c
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
unsigned char aa=0;
unsigned char bb=0;
unsigned char cc=0;
unsigned long int maichongcaiyang_2,maichongcaiyang_1,maichongcaiyang; //输入捕捉脉冲采样
unsigned char yichucishu; //输入捕捉溢出次数 ,计算周期用
unsigned int tpmcnt_1; //上一次的计数值?计算周期用
void mtpm_init(void);
void main(void) {
EnableInterrupts; /* enable interrupts */
SOPT=0x53;//屏蔽看门狗,看门狗溢出时间为长时间,屏蔽停止状态,背景调试管脚使能,复位管脚使能!
SPMSC1 = 0x1C; //低电压强制MCU复位,停止状态使能低电压检测,使能低电压监测逻辑
mtpm_init();
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
//TPMSC=0X16;
}
/* loop forever */
/* please make sure that you never leave main */
}
/*TPM SETUP*/
/////////////////////////
// 输入捕捉中断模块初始化
//作者 free-tech
//日期 2007,07,18
//初始化
/////////////////////////
void mtpm_init(void) //初始化程序调用
{
TPM2CNT=0; //计数器清零
TPM2SC=0X4d; //溢出中断计数
TPM2MOD=0XFFFF; //模数置位
TPM2C0SC=0X44; //0通道输入捕捉控制
TPM2C0V=0; //
TPM2C1V=0X0; //
TPM2C1SC=0X68; //输出高有效的pwm
}
/////////////////////////////////////
//MTPM溢出中断
//通过中断累加次数
/////////////////////////////////////
interrupt 14 void mtpm_ov(void)
{
TPM2SC_TOF=0; //清处标志
yichucishu++; //累加溢出次数
}
/////////////////////////////////////
//中断
//输入捕捉中断
//
/////////////////////////////////////
interrupt 12 void mtpm_in(void)
{
unsigned int i;
i=TPM2CNT;
TPM2C0SC_CH0F=0; //清处标志
maichongcaiyang_2=maichongcaiyang_1; //保存上上次数据
maichongcaiyang_1=maichongcaiyang; //保存上次数据
if(yichucishu==0)
{
maichongcaiyang=i-tpmcnt_1;
}
if(yichucishu==1)
{
maichongcaiyang=0xffff-(unsigned long int)tpmcnt_1+(unsigned long int)i;
}
if(yichucishu>=2)
{
maichongcaiyang=(unsigned long int)yichucishu*0xffff+(unsigned long int)i-(unsigned long int)tpmcnt_1;
}
maichongcaiyang=maichongcaiyang*8; //计算本次脉冲,输出以毫秒为单位
tpmcnt_1=i;
yichucishu=0; //清零溢出次数
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -