常驻嘉宾
爱板者
- 积分
- 3857
- 威望
- 1833
- 贡献
- 1048
- 兑换币
- 736
- 注册时间
- 2012-12-4
- 在线时间
- 488 小时
|
/*************************************************************************************************/
//功能说明:MC9S12XS128--PWM
//实现功能:电机按键加速、减速 通道3--(PTP3)输出
//程序设计:马小俊
//设计时间:2012.12.14
/*************************************************************************************************/
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
/********************初始化函数*******************************/
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1; //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80; //选定锁相环时钟
}
/******************PWM 初始化子程序*****************************/
void PWM_Init(void)
{
PWME_PWME3=0; // Disable PWM 禁止
PWMPRCLK=0x11; // 时钟预分频寄存器设置------0011 0011 A=B=24M/2=12M
PWMSCLA=15; // 时钟设置------------------SA=A/(2*15)=400k
PWMSCLB=15; // 时钟设置------------------SB=B/(2*15) =400k
}
/******************PWM3 初始化子程序*****************************/
void PWM3_Init(void)
{
PWMCLK_PCLK3=1; // 时钟源的选择--------------PWM3-----SB
PWMPOL_PPOL3=1; // 极性设置------------------开始输出高电平
PWMCAE_CAE3=0; // 对齐方式设置--------------左对齐
PWMCTL=0x00; // 控制寄存器设置------------无级联
PWMPER3=50; // 周期寄存器设置------------Frequency=SB/50=8K
}
void Dly_ms(int ms)
{
int i,j;
if (ms<1)
ms=1;
for(i=0;i<ms;i++)
for(j=0;j<110;j++);
}
/********************主函数************************************/
void main(void)
{
unsigned char i=10;
unsigned char a,b;
PLL_Init();
PWM_Init();
PWM3_Init();
PWME_PWME3=1; //使能PWM
PWMDTY3=i; //设置占空比
DDRB=0XFC; //1111 1100 1 2输入
for(;;)
{
a=PORTB_PB0;
b=PORTB_PB1;
if(a==0) //1111 1110
{
Dly_ms(5);
a=PORTB_PB0;
if(a==0)
{
i=40;
PWMDTY3=i; //设置占空比
PWME_PWME3=1; //使能PWM
}
}
else
if(b==0)
{
Dly_ms(5);
b=PORTB_PB1;
if(b==0)
{
i=0;
PWMDTY3=i; //设置占空比
PWME_PWME3=1; //使能PWM
}
}
while(PORTB!=0xFF);
}
EnableInterrupts;
}
|
|