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