?? 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 + -