⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 基于mc9s08aw60的TPM自由计数实验
💻 BAK
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

//=================================================================================================
//函数名:Init_tpm1_counter
//作用:初始化TPM1,内部时钟工作于自时钟模式,总线频率4M;自由计数;溢出时间间隔=65535/4000近似16ms
//=================================================================================================
void Init_tpm1_counter(void)
{
	TPM1SC=0x48;//TPM1时钟源为总线时钟;分频系数为一;溢出中断允许
	TPM1CNTH=0;//任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
}
//=======================================================================================================
//函数名:Init_tpm2_counter
//作用:初始化TPM2,内部时钟工作于自时钟模式,总线频率4M;自由计数;溢出时间间隔=65535/(4000/64)近似1048ms
//========================================================================================================
void Init_tpm2_counter(void)
{
	TPM2SC=0x4e;//TPM2时钟源为总线时钟;分频系数为64;溢出中断允许
	TPM2CNTH=0;//任意时刻对TPM2CNTH或TPM2CNTL的写操作将计数寄存器的计数值复位(清零)
}
//======================
void Init_PortA(void)
{
	PTAD = 0X00;//端口A数据寄存器初始化为0
	PTADD_PTADD0=1;//引脚PTA0作为输出引脚
	PTADD_PTADD1=1;//引脚PTA1作为输出引脚
	PTADD_PTADD2=1;//引脚PTA2作为输出引脚
	PTADD_PTADD3=1;//引脚PTA3作为输出引脚
	               //其他引脚方向控制位默认为输入引脚
	               //由于PTA0~PTA3引脚设置为输出引脚,故它的内部上拉使能控制寄存器不再起作用
	PTASE_PTASE0=1;//引脚PTA0的压摆率控制位使能,提供其EMC性能
	PTASE_PTASE1=1;//引脚PTA1的压摆率控制位使能,提供其EMC性能
	PTASE_PTASE2=1;//引脚PTA2的压摆率控制位使能,提供其EMC性能
	PTASE_PTASE3=1;//引脚PTA3的压摆率控制位使能,提供其EMC性能
	PTADS_PTADS0=1;//引脚PTA0高输出能力使能
	PTADS_PTADS1=1;//引脚PTA1高输出能力使能
	PTADS_PTADS2=1;//引脚PTA2高输出能力使能
	PTADS_PTADS3=1;//引脚PTA3高输出能力使能
}
//=============================
void main(void) {
	
	Init_PortA();
  Init_tpm1_counter();
  Init_tpm2_counter();
  EnableInterrupts; /* enable interrupts */
  /* include your code here */

  for(;;) {
    __RESET_WATCHDOG(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
//==================计数器1溢出中断服务程序==========================
interrupt VectorNumber_Vtpm1ovf void TPM1_OVF_ISR(void)
{
	if((TPM1SC & 0x80)==0x80)
		{
		  TPM1SC_TOF=0;
			PTAD_PTAD0=~PTAD_PTAD0;
		}
}
//==================计数器2溢出中断服务程序==========================
interrupt VectorNumber_Vtpm2ovf void TPM2_OVF_ISR(void)
{
	if((TPM2SC & 0x80)==0x80)
		{
			TPM2SC_TOF=0;
			PTAD_PTAD1=~PTAD_PTAD1;
		}
}
//==================通道0事件中断服务程序===========================
interrupt VectorNumber_Vtpm1ch0 void TPM1_CH1OUT_ISR(void)
{
	if((TPM1C0SC & 0x80)==0x80)
		{
			TPM1C0SC_CH0F=0;
		}
}
//==================通道1事件中断服务程序===========================
interrupt VectorNumber_Vtpm1ch1 void TPM1_CH2OUT_ISR(void)
{
		if((TPM1C1SC & 0x80)==0x80)
		{
			TPM1C1SC_CH1F=0;
		}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -