/**************************************************************************************** * * 文 件 名: main.c * 项 目 名: 06-General PWM-1 * 版 本: v1.0 * 日 期: 2016年05月16日 11时38分22秒 * 作 者: Administrator * 程序说明:普通PWM参考例程。 * PWM时钟源由T1分频而来,T1时钟源为Fsys/4 * 适用芯片:KF8FXXX系列——KF8F200、KF8F203、KF8F204、KF8F210、KF8F211、KF8F212、KF8F213、 * KF8F214、KF8F221、KF8F222、KF8F232、KF8F233、KF8F300、KF8F303、 * KF8F304、KF8F310、KF8F312、KF8F313、KF8F321、KF8F323、KF8F324、 * KF8F333、KF8F334、KF8F335、KF8F336、··· * KF8TS23XX系列——KF8TS2302、KF8TS2308、KF8TS2310、KF8TS2314、··· * KF8TS24XX系列——KF8TS2402、KF8TS2408、KF8TS2410、KF8TS2414、··· ****************************************************************************************/ #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 = 0x50; //设置为4M /***端口初始化****/ 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相关寄存器初始化****/ T1CTL = 0X01; //T1预分频比=1,启动T1 T1L = 0; T1H = 0; PP1 = 0xff; //PWM1的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz PP2 = 0xff; //PWM2的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz PWM1L = PP1/2; //PWM1初始化占空比为50% PWM2L = PP2/2; //PWM2初始化占空比为50% PWMCTL = 0; //关闭PWM1、PWM2 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm功能函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void pwm_function() { static uchar direction=0; if(direction) { PWM1L++; //PWM1增大占空比 PWM2L++; //PWM2增大占空比 if(PWM1L > (PP1-1) ) { direction=0; //换向 } } else { PWM1L--; //PWM1减小占空比 PWM2L--; //PWM1减小占空比 if(PWM1L==0) { direction=1; //换向 } } } /**************************************************************************************** * 函数名 :main * 函数功能:程序入口主函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void main() { init_mcu(); init_pwm(); Delay_ms(10); PWM1ON=1; //开启PWM1 PWM2ON=1; //开启PWM2 while(1) { pwm_function(); Delay_ms(10); } } /**************************************************************************************** * 函数名 :int_fun * 函数功能:中断入口 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void int_fun() __interrupt { }
收藏0 举报
/**************************************************************************************** * * 文 件 名: main.c * 项 目 名: 06-General PWM-2 * 版 本: v1.0 * 日 期: 2016年05月16日 11时38分22秒 * 作 者: Administrator * 程序说明:普通PWM参考例程 * PWM时钟源可选择T1(Fsys/4),也可以选择系统时钟Fosc。 * 适用芯片:KF8VXXX系列——KF8V111、KF8V120、KF8V200、KF8V204、KF8V211、KF8V216、 * KF8V218、KF8V220、KF8V327、KF8V427、KF8V429 ****************************************************************************************/ #include<KF8V111.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 = 0x50; //设置为16M /***端口初始化****/ TR0 = 0x08; //设置P03端口为输入,P0其他I/O口为输出 TR1 = 0x00; //设置P1端口为输出 TR2 = 0x00; //设置P2端口为输出 P0 = 0; P1 = 0; P2 = 0; P0LR = 0; //P0口输出低电平 P1LR = 0; //P1口输出低电平 P2LR = 0; //P2口输出低电平 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm初始化函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void init_pwm() { /***PWM相关寄存器初始化****/ //时钟选择T1。A01版本只能选择T1时钟源作为PWM的时钟。 T1CTL = 0X01; //T1预分频比=1,启动T1 T1L = 0; T1H = 0; PP1 = 0xff; //PWM1的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/16MHz)*1=64us,F=1/T=15.6KHz PP2 = 0xff; //PWM2的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/16MHz)*1=64us,F=1/T=15.6KHz PWM1L = PP1/2; //PWM1初始化占空比为50% PWM2L = PP2/2; //PWM2初始化占空比为50% PWMCTL = 0; //关闭PWM1、PWM2 // //选择MCU振荡时钟,通过PWMCTL的第2(PWM1CKS)、3(PWM2CKS)位选择 // PP1 = 0xff; //PWM1的周期寄存器 ,分辨率为255,T=(255+1)*(1/16MHz)=16us,F=1/T=62.5KHz // PP2 = 0xff; //PWM2的周期寄存器 ,分辨率为255,T=(255+1)*(1/16MHz)=16us,F=1/T=62.5KHz // PWM1L = PP1/2; //PWM1初始化占空比为50% // PWM2L = PP2/2; //PWM2初始化占空比为50% // // PWM1CKS=1; //PWM1时钟源选择MCU振荡时钟 // PWM2CKS=1; //PWM2时钟源选择MCU振荡时钟 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm功能函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void pwm_function() { static uchar direction=0; if(direction) { PWM1L++; //PWM1增大占空比 PWM2L++; //PWM2增大占空比 if(PWM1L > (PP1-1) ) { direction=0; //换向 } } else { PWM1L--; //PWM1减小占空比 PWM2L--; //PWM1减小占空比 if(PWM1L==0) { direction=1; //换向 } } } /**************************************************************************************** * 函数名 :main * 函数功能:程序入口主函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void main() { init_mcu(); init_pwm(); Delay_ms(10); PWM1ON=1; //开启PWM1 PWM2ON=1; //开启PWM2 while(1) { pwm_function(); Delay_ms(10); } } //中断函数0:0X04入口地址 void int_fun0() __interrupt (0) { } //中断函数1:0x14入口地址 void int_fun1() __interrupt (1) { }
/**************************************************************************************** * * 文 件 名: main.c * 项 目 名: 06-General PWM-3 * 版 本: v1.0 * 日 期: 2016年05月16日 11时38分22秒 * 作 者: Administrator * 程序说明:普通PWM参考例程 * PWM时钟源可选择T1,T1时钟源可选择Fsys/4(T1CLKEN=0),也可以选择INTHF(T1CLKEN=1) * 适用芯片:KF8TS25XX系列——KF8TS2502、KF8TS2508、KF8TS2510、KF8TS2514、KF8TS2516 * KF8TS27XX系列 ——KF8TS2702、KF8TS2708、KF8TS2710、KF8TS2714、KF8TS2716 * KF8FX156系列 ——KF8F2156、KF8F3156、KF8F4156 * KF8FX155系列 ——KF8F3155、KF8F4155 * KF8FX158系列 ——KF8F4158 ****************************************************************************************/ #include<KF8TS2716.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 = 0x50; //设置为4M /***端口初始化****/ TR0 = 0x04; //设置P03端口为输入,P0其他I/O口为输出 TR1 = 0x00; //设置P1端口为输出 TR2 = 0x00; //设置P2端口为输出 TR3 = 0x00; //设置P3端口为输出 P0 = 0; P1 = 0; P2 = 0; P3 = 0; P0LR = 0; //P0口输出低电平 P1LR = 0; //P1口输出低电平 P2LR = 0; //P2口输出低电平 P3LR = 0; //P3口输出低电平 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm初始化函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void init_pwm() { /***PWM相关寄存器初始化****/ T1CLKEN=1; //T1CLKEN=1,T1时钟选择内部高频振荡器时钟INTHF;T1CLKEN=0,T1时钟选择Fsys/4 T1CTL = 0X01; //T1预分频比=1,启动T1 T1L = 0; T1H = 0; PP1 = 0xff; //PWM1的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz PP2 = 0xff; //PWM2的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz PWM1L = PP1/2; //PWM1初始化占空比为50% PWM2L = PP2/2; //PWM2初始化占空比为50% PWMCTL = 0; //关闭PWM1、PWM2 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm功能函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void pwm_function() { static uchar direction=0; if(direction) { PWM1L++; //PWM1增大占空比 PWM2L++; //PWM2增大占空比 if(PWM1L > (PP1-1) ) { direction=0; //换向 } } else { PWM1L--; //PWM1减小占空比 PWM2L--; //PWM1减小占空比 if(PWM1L==0) { direction=1; //换向 } } } /**************************************************************************************** * 函数名 :main * 函数功能:程序入口主函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void main() { init_mcu(); init_pwm(); Delay_ms(10); PWM1ON=1; PWM2ON=0; while(1) { pwm_function(); Delay_ms(10); } } //中断函数0:0X04入口地址 void int_fun0() __interrupt (0) { } //中断函数1:0x14入口地址 void int_fun1() __interrupt (1) { }
/**************************************************************************************** * * 文件名: 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 { }
/**************************************************************************************** * * 文件名: main.c * 项目名: 07-Enganced PWM_Single_Output-PWM4 * 版 本: v1.0 * 日 期: 2016年05月19日 10时48分57秒 * 作 者: Administrator * 程序说明:增强型PWM参考例程。 * 单输出模式PWM4,分辨率16位 * 适用芯片:KF8VXXX系列——KF8V216、KF8V218 ****************************************************************************************/ #include<KF8V216.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 = 0X70; // 16M时钟 /***端口初始化****/ TR0 = 0x08; //设置P03端口为输入,P0其他I/O口为输出 TR1 = 0x00; //设置P1端口为输出 TR2 = 0x00; //设置P2端口为输出 P0 = 0; P1 = 0; P2 = 0; P0LR = 0; //P0口输出低电平 P1LR = 0; //P1口输出低电平 P2LR = 0; //P2口输出低电平 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm初始化函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void init_pwm() { /***PWM相关寄存器初始化****/ PWM4CTL1=0x00; // 不开启自动使能,死区仅对半桥有效。 P4ASCTL=0x00; // 禁止自动关闭源,默认关闭状态为1。 PATRCTL=0x1F; // 开启转向同步,全部输出,0x11 P3A 0x12 P3B 0x14 P3C 0x18 P3D PP4H=0X00; PP4L=0XFF; //T=(0X00FF+1)*(1/16MHz)*1=16us,F=1/T=62.5KHz PWM4L0=0X80; //初始化占空比0X0080/(0X00FF+1)=50% PWM4L1=0X00; /****T2使能******/ T2H=0; T2L=0; T2CTL=0X04; // 启动T2,T2分频比1 PWM4CTL0=0x0C; // 单输出模式,开启PWM4,默认有效状态高电平。 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm功能函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void pwm_function() { static uchar direction=0; if(direction) { PWM4L0++; if(PWM4L0>=255) { direction=0; } } else { PWM4L0--; if(PWM4L0==0) { direction=1; } } } /**************************************************************************************** * 函数名 :main * 函数功能:程序入口主函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void main() { init_mcu(); init_pwm(); Delay_ms(10); while(1) { pwm_function(); Delay_ms(10); } } //中断函数0:0X04入口地址 void int_fun0() __interrupt (0) { } //中断函数1:0x14入口地址 void int_fun1() __interrupt (1) { }
/**************************************************************************************** * * 文 件 名: main.c * 项 目 名: 07-Enganced PWM_Single_Output-PWM5 * 版 本: v1.0 * 日 期: 2016年05月16日 11时38分22秒 * 作 者: Administrator * 程序说明:增强型PWM参考例程。 * 单输出模式PWM5,分辨率16位 * 适用芯片:KF8FX156系列——KF8F2156、KF8F3156、KF8F4156 * KF8FX155系列——KF8F3155、KF8F4155 * KF8F4158系列——KF8F4158 * KF8VXXX系列——KF8V429 ****************************************************************************************/ #include<KF8F4156.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 = 0x70; //设置为16M /***端口初始化****/ TR0 = 0x08; //设置P03端口为输入,P0其他I/O口为输出 TR1 = 0x00; //设置P1端口为输出 TR2 = 0x00; //设置P2端口为输出 TR3 = 0x00; //设置P3端口为输出 P0 = 0; P1 = 0; P2 = 0; P3 = 0; P0LR = 0; //P0口输出低电平 P1LR = 0; //P1口输出低电平 P2LR = 0; //P2口输出低电平 P3LR = 0; //P3口输出低电平 } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm初始化函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void init_pwm() { /***PWM相关寄存器初始化****/ P5ASCTL = 0b00000000; //设置PWM5关闭时候PWM口输出电平 这里为默认设置,关闭PWM时候都输出0 PWM5CTL2 = 0b00000001; //PWM周期自动填充更新 PWM5CTL0 = 0b00001100; //单输出PWM高电平有效 PSTRCTL = 0b00010001; //PWM单项输出时候,和全桥输出时候,PWM信号控制是否输出到相应IO上, PSTRCTL(3:0)分别为P5D P5C P5B P5A,P5A=1则,PWM输出到P5A口,其他为设置为1输出到其他口 PP5H = 0; //高位 PP5L = 40; //设置PWM周期 周期时间为PP5+1进行计算 PWM5L1 = 0; //高位 PWM5L0 = 20; //设置PWM占空比 T2H = 0; T2L = 0; //PWM时钟源 T2相关设置 T2CTL0 = 0b00000000; T2ON = 1; } /**************************************************************************************** * 函数名 :init_pwm * 函数功能:pwm功能函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void pwm_function() { } /**************************************************************************************** * 函数名 :main * 函数功能:程序入口主函数 * 入口参数:无 * 返回 :无 ****************************************************************************************/ void main() { init_mcu(); init_pwm(); Delay_ms(10); while(1) { pwm_function(); Delay_ms(10); } } //中断函数0:0X04入口地址 void int_fun0() __interrupt (0) { } //中断函数1:0x14入口地址 void int_fun1() __interrupt (1) { }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
发帖类勋章
时间类勋章
人才类勋章
等级类勋章
20
254
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号