/****************************************************************************************
*
* 文件名: main.c
* 项目名: 07-Enganced PWM_Single_Output-PWM3
* 版 本: v1.0
* 日 期: 2016年05月19日 10时48分57秒
* 作 者: Administrator
* 程序说明:增强型PWM参考例程。
* 单输出模式PWM3,分辨率10位
* 适用芯片:KF8FXXX系列——KF8F211、KF8F212、KF8F213、
* KF8F214、KF8F221、KF8F222、KF8F232、KF8F233、
* KF8F312、KF8F313、KF8F321、KF8F323、
* KF8F334、KF8F335、KF8F336、···
****************************************************************************************/
#include<KF8F312.h>
#define uchar unsigned char
#define uint unsigned int
/****************************************************************************************
* 函数名 :Delay_ms
* 函数功能:长时间延时
* 入口参数:延时基数 uchar ms_data
* 返回 :无
****************************************************************************************/
void Delay_ms(uint ms_data)
{
uchar i;
while(ms_data--)
{
i = 124;
while(i--);
}
}
/****************************************************************************************
* 函数名 :init_mcu
* 函数功能:mcu初始化函数
* 入口参数:无
* 返回 :无
****************************************************************************************/
void init_mcu()
{
/***时钟初始化****/
OSCCTL = 0X60; // 8M时钟
/***端口初始化****/
TR0 = 0x08; //设置P03端口为输入,P0其他I/O口为输出
TR1 = 0x00; //设置P1端口为输出
TR2 = 0x00; //设置P2端口为输出
P0 = 0; //P0口输出低电平
P1 = 0; //P1口输出低电平
P2 = 0; //P2口输出低电平
}
/****************************************************************************************
* 函数名 :init_pwm
* 函数功能:pwm初始化函数
* 入口参数:无
* 返回 :无
****************************************************************************************/
void init_pwm()
{
/***PWM相关寄存器初始化****/
PWM3CTL1=0x00; // 不开启自动使能,死区仅对半桥有效。
P3ASCTL=0x00; // 禁止自动关闭源,默认关闭状态为1。
PATRCTL=0x1F; // 开启转向同步,全部输出,0x11 P3A 0x12 P3B 0x14 P3C 0x18 P3D
PWM3CTL0=0x00; // 单输出模式,暂不开启,默认有效状态高电平。
PWM3L=0x3F; // 占空比初始化 25%,=(PWM3L:(PDT1:PDT0))/(4*(PP3+1))=00111111:11/4*(0XFF+1)=25%
PDT1=1; // IN PWM3CTL0 bit 5
PDT0=1; // IN PWM3CTL0 bit 4
PP3=0xFF; // 4倍数值构成PWM周期最小单位=(255+1)*4*(1/8MHz)*1=128us,F=1/T=7.8KHz
// PWM使能
T2=0;
T2ON=1; // 启动T2,T2分频比1
P3ON1=1; // IN PWM3CTL0 bit 3 启动PWM3
P3ON0=1; // IN PWM3CTL0 bit 2 启动PWM3
}
/****************************************************************************************
* 函数名 :init_pwm
* 函数功能:pwm功能函数
* 入口参数:无
* 返回 :无
****************************************************************************************/
void pwm_function()
{
static uchar direction=0;
if(direction)
{
PWM3L++;
if(PWM3L>=255)
{
direction=0;
}
}
else
{
PWM3L--;
if(PWM3L==0)
{
direction=1;
}
}
}
/****************************************************************************************
* 函数名 :main
* 函数功能:程序入口主函数
* 入口参数:无
* 返回 :无
****************************************************************************************/
void main()
{
init_mcu();
init_pwm();
Delay_ms(10);
while(1)
{
pwm_function();
Delay_ms(10);
}
}
/****************************************************************************************
* 函数名 :int_fun
* 函数功能:中断入口
* 入口参数:无
* 返回 :无
****************************************************************************************/
void int_fun() __interrupt
{
}
|