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

📄 main.c

📁 PROJECT MC9S08DZ60的PWM源码例子
💻 C
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

//=======================================================================================================
//函数名:Init_tpm1_ch0_output
//作用:初始化TPM1;内部时钟工作于自时钟模式,总线频率4M;TPM1溢出中断禁止;通道0中断使能;
//通道引脚状态反转时间间隔=20000/(4000/128)近似640ms
//=======================================================================================================
void Init_tpm1_ch0_output(void)
{
	TPM1C0VH=0x4E;
	TPM1C0VL=0x20;
	TPM1C0SC=0x54;//通道0中断使能,比较输出模式,通道引脚状态取反
}
//=======================================================================================================
//函数名:Init_tpm1_ch1_output
//作用:初始化TPM1;内部时钟工作于自时钟模式,总线频率4M;TPM1溢出中断禁止;通道1中断使能;
//通道引脚状态反转时间间隔==40000/(4000/1)近似1280ms
//=======================================================================================================
void Init_tpm1_ch1_output(void)
{
	TPM1MODH=0x9C;
	TPM1MODL=0x40;
	
	TPM1C1VH=0x9C;
	TPM1C1VL=0x40;
	
	TPM1C1SC=0x54;//通道1中断使能,比较输出模式,通道引脚状态取反
	TPM1SC=0x0F;//TPM1时钟源为总线时钟;分频系数为128;溢出中断禁止
	TPM1CNTH=0;//任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
}
//=======================================================================================================
//函数名:Init_tpm2_ch0_output
//作用:初始化TPM2;内部时钟工作于自时钟模式,总线频率4M;TPM2溢出中断禁止;通道0中断使能;
//通道引脚状态反转时间间隔=20000/(4000/128)近似640ms
//=======================================================================================================
void Init_tpm2_ch0_output(void)
{
	TPM2C0VH=0x4E;//通道寄存器高
	TPM2C0VL=0x20;//通道寄存器低
	TPM2C0SC=0x54;//通道0中断使能,比较输出模式,通道引脚状态取反
}
//=======================================================================================================
//函数名:Init_tpm2_ch1_output
//作用:初始化TPM2;内部时钟工作于自时钟模式,总线频率4M;TPM2溢出中断禁止;通道1中断使能;
//通道引脚状态反转时间间隔==40000/(4000/1)近似1280ms
//=======================================================================================================
void Init_tpm2_ch1_output(void)
{
	TPM2MODH=0x9C;
	TPM2MODL=0x40;
	
	TPM2C1VH=0x9C;
	TPM2C1VL=0x40;
	
	TPM2C1SC=0x54;//通道1中断使能,比较输出模式,通道引脚状态取反
	TPM2SC=0x0F;//TPM1时钟源为总线时钟;分频系数为128;溢出中断禁止
	TPM2CNTH=0;//任意时刻对TPM1CNTH或TPM1CNTL的写操作将计数寄存器的计数值复位(清零)
}
//======================
void Init_PortA(void)
{
PTBDD_PTBDD5=1;
PTADD_PTADD6=1;	
}
//=============================
void main(void) {
	
	Init_PortA();
  Init_tpm1_ch0_output();
  Init_tpm1_ch1_output();
  Init_tpm2_ch0_output();
  Init_tpm2_ch1_output();
  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;
			PTBD_PTBD5=~PTBD_PTBD5;
		}
}
//==================计数器2溢出中断服务程序==========================
interrupt VectorNumber_Vtpm2ovf void TPM2_OVF_ISR(void)
{
	if((TPM2SC & 0x80)==0x80)
		{
			TPM2SC_TOF=0;
			PTAD_PTAD6=~PTAD_PTAD6;
		}
}
//==================计数器1通道0事件中断服务程序===========================
interrupt VectorNumber_Vtpm1ch0 void TPM1_CH1OUT_ISR(void)
{
	if((TPM1C0SC & 0x80)==0x80)
		{
			TPM1C0SC_CH0F=0;
			//TPM1MODH=0x5e;可更改模寄存器的值
	    //TPM1MODL=0x20;
		}
}
//==================计数器1通道1事件中断服务程序===========================
interrupt VectorNumber_Vtpm1ch1 void TPM1_CH2OUT_ISR(void)
{
	if((TPM1C1SC & 0x80)==0x80)
		{
			TPM1C1SC_CH1F=0;
		}
}
//==================计数器2通道0事件中断服务程序===========================
interrupt VectorNumber_Vtpm2ch0 void TPM2_CH1OUT_ISR(void)
{
	if((TPM2C0SC & 0x80)==0x80)
		{
			TPM2C0SC_CH0F=0;
		}
}
//==================计数器2通道1事件中断服务程序===========================
interrupt VectorNumber_Vtpm2ch1 void TPM2_CH2OUT_ISR(void)
{
	if((TPM2C1SC & 0x80)==0x80)
		{
			TPM2C1SC_CH1F=0;
		}
}

⌨️ 快捷键说明

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