?? pwm.c
字號:
//[PWM.c]脈寬調制----------------------------------------------------------*
//本文件包含: *
// (1)PWMInit:PWM初始化 *
// (2)PWMSetting:設置PWM周期和占空比設置 *
//-------------------------------------------------------------------------*
//頭文件
#include "PWM.h" //脈寬調制頭文件
//PWMInit:PWM初始化--------------------------------------------------------*
//功 能:PWM初始化,A,B時鐘頻率均設為8MHz *
//參 數: *
// channel-通道號,polarity-極性,align-對齊方式, *
// polarity:0-負極性,1-正極性,align:0-左對齊,1-中心對齊 *
//返 回:無 *
//-------------------------------------------------------------------------*
void PWMInit(INT8U channel,INT8U polarity,INT8U align)
{
INT8U i,j;
//1 禁止通道channel
j = 0x01;
for (i=0; i<channel; i++) //禁止通道channel
j = j<<1;
PWME &= ~j;
//2 PWM時鐘源選擇,選擇X時鐘作為channel的時鐘源
j = 0x01;
for (i=0; i<channel; i++)
j = j<<1;
PWMCLK &= ~j;
//3 設置A,B的時鐘頻率
switch (channel)
{
//通道0,1,4,5使用A時鐘,A時鐘頻率=19.6608MHz/128
case 0:
case 1:
case 4:
case 5:
PWMPRCLK |= 0x07;
break;
//通道2,3,6,7使用B時鐘,B時鐘頻率=19.6608MHz/128
case 2:
case 3:
case 6:
case 7:
PWMPRCLK |= 0x70;
break;
default:
break;
}
//4 確定channel輸出極性
j = 0x01;
if (polarity == 1) //正極性
{
for (i=0; i<channel; i++)
j = j<<1;
PWMPOL |= j;
}
else
{ //負極性
for (i=0; i<channel; i++)
j = j<<1;
PWMPOL &= ~j;
}
//5 確定channel輸出方式
j = 0x01;
if (align == 0) //左對齊
{
for (i=0; i<channel; i++)
j = j<<1;
PWMCAE &= ~j;
}
else //中心對齊
{
for (i=0; i<channel; i++)
j = j<<1;
PWMCAE |= j;
}
//6 清0通道channel計數器
PWMCNT0 = 0;
}
//PWMSetting:PWM周期和占空比設置-------------------------------------------*
//功 能:根據參數設置f周期和占空比 *
//參 數: *
// period=PWM周期所占用的時鐘周期個數 *
// duty=PWM占空比所占用的時鐘周期個數 *
// Channel=所要設置的通道號(0~7) *
//返 回:無 *
//說 明:duty的值<=period的值,并且兩者的值都在0~255之間 *
//-------------------------------------------------------------------------*
void PWMSetting(INT8U channel,INT8U period,INT8U duty)
{
switch(channel)
{
case 0:
PWMCNT0 = 0x00; //清通道0計數器
PWMDTY0 = duty; //設置周期寄存器
PWMPER0 = period; //設置占空比寄存器
break;
case 1:
PWMCNT1 = 0x00; //清通道1計數器
PWMDTY1 = duty; //設置周期寄存器
PWMPER1 = period; //設置占空比寄存器
break;
case 2:
PWMCNT2 = 0x00; //清通道2計數器
PWMDTY2 = duty; //設置周期寄存器
PWMPER2 = period; //設置占空比寄存器
break;
case 3:
PWMCNT3 = 0x00; //清通道3計數器
PWMDTY3 = duty; //設置周期寄存器
PWMPER3 = period; //設置占空比寄存器
break;
case 6:
PWMCNT6 = 0x00; //清通道6計數器
PWMDTY6 = duty; //設置周期寄存器
PWMPER6 = period; //設置占空比寄存器
break;
case 7:
PWMCNT7 = 0x00; //清通道7計數器
PWMDTY7 = duty; //設置周期寄存器
PWMPER7 = period; //設置占空比寄存器
break;
default:
break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -