飞思卡尔的PWM程序祥细步骤和讲解

飞思卡尔的PWM程序祥细步骤和讲解,第1张

void PWM_Init(void) {//初始化

PWMPRCLK_PCKA = 0x2 /*16383000Hz/2=8192000Hz */

PWMPRCLK_PCKB = 0x2/*8192000Hz/4 =2048000Hz */

PWMCTL_CON01 = 0X1 /* 0 &1 成 16位精度PWM工作*/

PWMPOL_PPOL1 = 0x1 /搜碰* 极性为先高后低 与占空比芦亮相同 */

PWMCAE = 0x00 /* operate in left aligned output mode. */

}

void setPWM01(word per,byte start) {

per = (word)(2048000/per)

PWMPER01 = (word)per/* 设置脉世哗谈冲周期*/

PWMDTY01 = (word)(per/2)/* 设置脉冲占空比为50% */

if(start==1)PWME_PWME1 = 1 /* 脉冲发送开始*/

else PWME_PWME1 = 0 /* 脉冲停止发送*/

}

发脉冲时调用 setPWM01(频率,1)

void

main(void)

//主函数

{

while(1)

{

temp=P2

temp=temp&0x07

//取出低三位

while(temp!=0x07)

{

init_sys()

PWM=1

}

}

}

还有可能就是你的定时器一直在跳中断,所以程序很难检测到按键。按键可以备芦用腊答

外部中断仿局带

来实现。

C8051F120单片机产生PWM程序为:

olf2010-6-21 22:421#

//PWM输出脚P0.3

//-----------------------------------------------------------------------------

// Includes

//-----------------------------------------------------------------------------

#include // SFR declarations

#include

#include

//-----------------------------------------------------------------------------

// Function PROTOTYPES

//-----------------------------------------------------------------------------

void PORT_Init (void)

void PCA_Init (void)

void PCA_ISR (void)

void SYSCLK_Init (void)

//-----------------------------------------------------------------------------

// MAIN Routine

//-----------------------------------------------------------------------------

void main (void)

{

unsigned long b

WDTCN = 0xde// disable watchdog timer

WDTCN = 0xad

SYSCLK_Init ()

PORT_Init ()/*初始化I/O口*/

PCA_Init ()/游扒*PCA初始化成8位脉宽调置方式*/

EIE1= 0x08

EA=1

PCA0CPH0=0x20

while (1)

{ }

}

//-----------------------------------------------------------------------------

// Initialization Subroutines

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

// PORT_Init

//-----------------------------------------------------------------------------

void PORT_Init (void)

{

XBR0 = 0x11// XBAR0: Initial Reset Value

XBR1 = 0x00// XBAR1: Initial Reset Value

 毕磨巧 XBR2 = 0x40// XBAR2: Initial Reset Value

// Port configuration (1 = Push Pull Output)

PRT0CF = 0x08// Output configuration for P0

PRT1CF = 0x00// Output configuration for P1

PRT2CF = 0x00// Output configuration for P2

PRT3CF = 0x00// Output configuration for P3

 手键 }

//-----------------------------------------------------------------------------

// SYSCLK_Init

//-----------------------------------------------------------------------------

void SYSCLK_Init (void)

{

unsigned int i// delaynms counter

OSCXCN = 0x67// start external oscillator with

for (i=0i <256i++) // XTLVLD blanking interval (>1ms)

while (!(OSCXCN &0x80)) // Wait for crystal osc. to settle

OSCICN = 0x88// select external oscillator as SYSCLK

}

//-----------------------------------------------------------------------------

// PCA_Init

//-----------------------------------------------------------------------------

void PCA_Init (void)

{

// PCA0CPM0 = 0x42// PCA Capture/Compare Register 0

PCA0CN = 0x40

PCA0CPM1 = 0x42

PCA0CPL0 = 0x00

PCA0CPH0 = 0x00

// PCA0MD &= 0x40

PCA0MD = 0x01

}

//-----------------------------------------------------------------------------

// PCA_ISR

//-----------------------------------------------------------------------------

void PCA_ISR (void) interrupt 9

{ unsigned char a

bit PWM_PAC

CF = 0

if(PWM_PAC==0) //占空比由0 >>0xfe

{

PCA0CPH1=a

a++

if(a==0xfe){PWM_PAC=1}

}

else //占空比由0xfe >>0

{

PCA0CPH1=a

a--

if(a==0){PWM_PAC=0}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12252560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存