关键词不能为空

当前您在: 主页 > 英语 >

freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:41
tags:

-

2021年2月1日发(作者:xaix)


PWM


应用程序



/*



程序实现功能:


PP1


口输出


PWM


方波




程序说明:通过改变


duty



period


,从而控制


PWM


周期和占空比














duty cycle=duty/period













PWM frequency=1M/(2*period)(Fbus=24M,scla=24)


*/


#include







/* common defines and macros */


#include







/* derivative-specific definitions */


void SetBusClock_24MHZ(void);



void PWMDisable(byte channel);


void PWMEnable(byte channel);


void PWMSinglePortSetting(byte channel ,byte period ,byte duty)



void PWMsinglePortInitial(byte channel, byte clkab,byte clock, byte polarity,byte align)


void Service_WD(void);


void PWMGeneralInitial(byte prclk,byte scla,byte sclb,byte ctl);


void PWMConcatenateSetting(byte channel,word period,word duty);



void main(void)



{




/* put your own code here */




//


总线时钟频率设置


:24M







SetBusClock_24MHZ();





//< /p>


对预分频时钟,分频时钟


A


,分频时钟< /p>


B


和控制寄存器的配置





//


0


分频



01


级联







PWMGeneralInitial(0,24,0,0x10);




//PWM


端口寄存器的配置





// 1


通道



SA


时钟



起始高电平



左对齐





PWMsinglePortInitial(1,0,1,1,0);




//PWM


级联输出配置






//


50HZ


占空比


12.5%





PWMConcatenateSetting(1,10000,250);






//EnableInterrupts;




for(;;) {






_FEED_COP(); /* feeds the dog */




} /* loop forever */




/* please make sure that you never leave main */


}



//************ *********************************


//


函数名:


PWMEnable < /p>


//


函数功能:


PWM

< br>单个端口使能



//


函数参数:一个



byte


类型


channel


代表


PWM


通道号



//


返回值:无


< br>//********************************************


void PWMEnable(byte channel)



{




if(channel>7) channel=7;




PWME|=(1<





//


选择使能位



}


//************************ **********************


//


函数名称:


PWMDisable


//


函数功能


:PWM


单个端口禁止



//


函数参数 :一个


byte


类型



channel


代表


PWM


通道号



//


返回值:无


//********************************************** *


void PWMDisable(byte channel)



{




if(channel>7) channel=7;




PWME&=~(1<




//


选择禁止位



}


//


函数功能:启动看门狗



void Service_WD(void)




{




CPMUARMCOP=0x55;




CPMUARMCOP=0xAA;


}


//


函数功能:总线时钟设置



void SetBusClock_24MHZ(void)



{





CPMUOSC_OSCE=1; //enable osc





/*





时钟倍频:


24MHz BusClock
















48MHz VCO















48MHz PLL










*/





CPMUSYNR=0x00|0x05; //VCOFRQ[1:0],SYNDIV[5:0]





CPMUREFDIV=0x20|0x03;//REFF RQ[1:0],REFDIV[3:0]





CPMUPOSTDIV=0x00;





//POSTDIV=0;





while(!CPMUFLG_LOCK)//

< p>
等待


VCO


稳定






Service_WD(); //


看门狗






CPMUCLKS_PLLSEL=1;


}


//******************************************** *


//


函数名称:



PWMSinglePortSetting


//

< p>
函数功能:实现


PWM


周期寄存器和占空比寄存器 通道的单独输出



//


函数参数:


3




byte


类型















//


参数


1






chann el


代表了当前配置的


PWM


通道















//


参数


2






period


周期配置参数



























/*



























Left


aligned


output


(CAEx


=


0)




PWMx


Period


=


Channel


Clock


Period * PWMPERx



























Center


Aligned


Output


(CAEx


=


1)


PWMx


Period


=


Channel


Clock


Period * (2 * PWMPERx)


























*/














//


参数


3






duty




占空比配置参数




























/*



























Polarity


=


0


[(PWMPERx- PWMDTYx)/PWMPERx] * 100%


* 100%



























*/


//


返回值:无















//*************************************** *******


void PWMSinglePortSetting(byte channel ,byte period ,byte duty)



{




if(channel>7) channel=7;




PWMDisable(channel); //


禁止该通道





switch(channel)





{











case 0:













PWMPER0=period;



//


设置周期寄存器














PWMDTY0=duty;





//


设置占空比寄存器














break;











case 1:













PWMPER1=period;



//


设置周期寄存器














PWMDTY1=duty;





//


设置占空比寄存器



















case 2:













PWMPER2=period;



//


设置周期寄存器














PWMDTY2=duty;





//


设置占空比寄存器














break;


















case 3:













PWMPER3=period;



//


设置周期寄存器














PWMDTY3=duty;





//


设置占空比寄存器














break;























case 4:













PWMPER4=period;



//


设置周期寄存器














PWMDTY4=duty;





//


设置占空比寄存器



(PPOL


x


=0)





Duty


Cycle


=



























Polarity = 1 (PPOLx = 1)





Duty


Cycle = [PWMDTYx / PWMPERx]













break;


















case 5:















PWMPER5=period;



//


设置周期寄存器
















PWMDTY5=duty;





//


设置占空比寄存器
















break;




























case 6:















PWMPER6=period;



//


设置周期寄存器
















PWMDTY6=duty;





//


设置占空比寄存器
















break;





















case 7:















PWMPER7=period;



//


设置周期寄存器
















PWMDTY7=duty;





//


设置占空比寄存器
















break;







default:break;













}




PWMEnable(channel);


}



//************************* ********************


//


函数名:< /p>


PWMSinglePortInitial


//


函数功能:


PWM


端口寄存器的配置



//


函数参数:


5



byte


类型















//


参数


1:channel


代表了当前配置的


PWM


通道















//


参数


2



clkab


参数


2,3


决定了时钟源的选择


















//


参数


3: clock




















/*









































PWM Channel 0,1,4,5























PCLKAB[0,1,4,5] PCLK[0,1,4,5]



Clock Source Selection



























0
















0

















Clock A



























0
















1

















Clock SA




























1
















0

















Clock B




























1
















1

















Clock SB























PWM Channel 2,3,6,7























PCLKAB[2,3,6,7] PCLK[2,3,6,7]




Clock Source Selection





























0














0


















Clock B






























0














1


















Clock SB






























1














0


















Clock A





























1














1


















Clock SA




















*/















//< /p>


参数


4



pol arity PWM


极性选择



//



























0






开始为低电平,周期计数开始为高电平




//



























1






开始为高电平,周期计数开始为低电平

















//


参数


5



align




PWM


对齐方式选择



//























0






输出左对齐



//























1






输出中心对齐



//


返回值:无


//**********************************************



void PWMsinglePortInitial(byte channel, byte clkab,byte clock, byte polarity,byte align)



{





if(channel>7) channel=7;





//


禁止该通道








PWMDisable(channel);






// PWM


时钟


A/B


选择






if(clkab==0)



PWMCLKAB&=~(1<






else










PWMCLKAB|=(1<





// PWM


时钟选择寄存器设置






if(clock==0)



PWMCLK&=~(1<






else











PWMCLK|=(1<






//PWM


极性选择设置






if(polarity==0)






PWMPOL&=~(1<






else

















PWMPOL|=(1<





//PWM


对齐方式设置






if(align==0)









PWMCAE&=~(1<






else

















PWMCAE|=(1<



}


//************************ **********************************


//


函数名


:PWMGeneralInitial

< br>//


函数功能:对预分频时钟,分频时钟


A


,分频时钟


B


和控制寄存器的配置

< br>


//


函数参数:


4

< p>


byte


类型















//


参数


1


?


prclk
























/*




























Clock A or Clock B Prescaler Selects


























PCKA/B2 PCKA/B1 PCKA/B0 Value of Clock A/B




























0









0








0








Bus clock




























0









0








1








Bus clock / 2




























0









1








0








Bus clock / 4




























0









1








1








Bus clock / 8




























1









0








0








Bus clock / 16




























1









0








1








Bus clock / 32




























1









1








0








Bus clock / 64




























1









1








1








Bus clock / 128
























*/














//


参数


2




scla














//









Clock SA = Clock A / (2 * PWMSCLA)














//


参数


3




sclb














//









Clock SB = Clock B / (2 * PWMSCLB)














//


参数


4




ctl
























/*
























control[CON67,CON45,CON23,C ON01,PSWAI,PFRZ]
























PWM


级联控制寄存器



CON67,CON45,CON23,CON01










































0






单独一个通道











































1






两个通道级联

























PSWAI














0






等待模式禁止时钟输入











































1






等待模式允许时钟输入

























PFRZ















0






冻结模式允许


PWM


时钟输入











































1






冻结模 式禁止


PWM


时钟输入




//


返回值:无













































































































*/


/ /************************************************* *************


void PWMGeneralInitial(byte prclk,byte scla,byte sclb,byte ctl)


{




//


禁止所有的

PWM


通道





PWME=0x00;




//


设置预分频参数





PWMPRCLK=prclk;




//


设置


A


分频参数





PWMSCLA=scla;




//


设置


B


分频参数





PWMSCLB=sclb;




//


级联配置





PWMCTL=ctl;


}


//************************ ***********************************


//< /p>


函数名称


:PWMConcatenateSetting


//


函数功能


:PWM

级联输出配置



//


函数参数


:1



byte


类 型,


2



word

类型













//


参数


1






chann el


代表了当前配置的


PWM


通道













//< /p>


参数


2






period


周期配置参数

























/*

























Left


aligned


output


(CAEx


=


0)




PWMx


Period


=


Channel


Clock


Period * PWMPERx

























Center


Aligned


Output


(CAEx


=


1)


PWMx


Period


=


Channel


Clock


Period * (2 * PWMPERx)
























*/












//


参数


3






duty




占空比配置参数


























/*

























Polarity


=


0


[(PWMPERx- PWMDTYx)/PWMPERx] * 100%


(PPOL


x


=0)





Duty


Cycle


=

























Polarity = 1 (PPOLx = 1)





Duty Cycle = [PWMDTYx / PWMPERx] *


100%

























*/


//


返回值:无


//********************************************** ****************


void PWMConcatenateSetting(byte channel,word period,word duty)


{




if(channel>7)



channel=7;




switch(channel)




{






case 0:










case 1:PWMDisable(0);




//


禁止通道


0













PWMDisable(1);




//


禁止通道


1













PWMPER01=period; //


设置周期寄存器














PWMDTY01=duty;




//


设置占空比寄存器














PWMEnable(0);





//


使能通道


0















PWMEnable(1);





//


使能 通道


1















break;













case 2:










case 3:PWMDisable(2);




//


禁止通道


2













PWMDisable(3);




//


禁止通道


3













PWMPER23=period; //


设置周期寄存器














PWMDTY23=duty;




//


设置占空比寄存器














PWMEnable(2);





//


使能通道


2















PWMEnable(3);





//


使能 通道


3















break;



















case 4:










case 5:PWMDisable(4);




//


禁止通道


4













PWMDisable(5);




//


禁止通道


5













PWMPER45=period; //


设置周期寄存器














PWMDTY45=duty;




//


设置占空比寄存器














PWMEnable(4);





//


使能通道


4















PWMEnable(5);





//


使能 通道


5















break;



















case 6:










case 7:PWMDisable(6);




//


禁止通道


6













PWMDisable(7);




//


禁止通道


7

-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:41,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595866.html

freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)的相关文章

freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)随机文章