[KungFu8位 MCU] ChipON系列增强型PWM操作例程分享

[复制链接]
1567|6
 楼主| yysforever 发表于 2017-10-31 20:58 | 显示全部楼层 |阅读模式
  1. /****************************************************************************************
  2. *
  3. * 文件名: main.c
  4. * 项目名: 08-Enganced PWM-Half_Bridg_Output-PWM3
  5. * 版 本: v1.0
  6. * 日 期: 2016年05月19日 10时48分57秒
  7. * 作 者: Administrator
  8. * 程序说明:增强型PWM参考例程。
  9. *                         半桥输出模式PWM3
  10. * 适用芯片:KF8FXXX系列——KF8F211、KF8F212、KF8F213、
  11. *                                                  KF8F214、KF8F221、KF8F222、KF8F232、KF8F233、
  12. *                                                  KF8F312、KF8F313、KF8F321、KF8F323、
  13. *                                                  KF8F334、KF8F335、KF8F336、···
  14. ****************************************************************************************/
  15. #include<KF8F312.h>

  16. #define uchar unsigned char
  17. #define uint  unsigned int

  18. /****************************************************************************************
  19. * 函数名     :Delay_ms
  20. * 函数功能:长时间延时
  21. * 入口参数:延时基数 uchar ms_data
  22. * 返回          :无
  23. ****************************************************************************************/
  24. void Delay_ms(uint ms_data)
  25. {
  26.         uchar i;
  27.         while(ms_data--)
  28.         {
  29.                 i = 124;
  30.                 while(i--);
  31.         }
  32. }

  33. /****************************************************************************************
  34. * 函数名     :init_mcu
  35. * 函数功能:mcu初始化函数
  36. * 入口参数:无
  37. * 返回          :无
  38. ****************************************************************************************/
  39. void init_mcu()
  40. {
  41.         /***时钟初始化****/
  42.         OSCCTL = 0X60;      // 8M时钟

  43.         /***端口初始化****/
  44.         TR0 = 0x08;                                //设置P03端口为输入,P0其他I/O口为输出
  45.         TR1 = 0x00;                                //设置P1端口为输出
  46.         TR2 = 0x00;                                //设置P2端口为输出
  47.         P0 = 0;                                        //P0口输出低电平
  48.         P1 = 0;                                        //P1口输出低电平
  49.         P2 = 0;                                        //P2口输出低电平
  50. }

  51. /****************************************************************************************
  52. * 函数名     :init_pwm
  53. * 函数功能:pwm初始化函数
  54. * 入口参数:无
  55. * 返回          :无
  56. ****************************************************************************************/
  57. void init_pwm()
  58. {
  59.         /***PWM相关寄存器初始化****/
  60.         PWM3CTL1=0x0F;        // 不开启自动使能,死区时间设定为0x0f   即当前延时T = 15*(4*(1/8M)) = 15*500ns = 7.5us
  61.         P3ASCTL=0x00;        // 禁止自动关闭源,默认关闭状态为1。
  62.         PATRCTL=0x10;        // 开启转向同步。
  63.         PWM3CTL0=0x80;  // 半桥输出模式,暂不开启PWM3,默认有效状态高电平。

  64.         PWM3L=0x32;                // 占空比初始化 50%,=(PWM3L:(PDT1:PDT0))/(4*(PP3+1))=00110010:00/4*(0X63+1)=50%
  65.         PDT1=0;                        // IN PWM3CTL0 bit 5
  66.         PDT0=0;                        // IN PWM3CTL0 bit 4
  67.         PP3=0x63;                // 4倍数值构成PWM周期最小单位=(99+1)*4*(1/8MHz)*1=50us,F=1/T=20KHz
  68.         // PWM使能
  69.         T2=0;
  70.         T2CTL=0x04;                // 启动T2,分频器1为1分频
  71.         P3ON1=1;                // IN PWM3CTL0 bit 3
  72.         P3ON0=1;                // IN PWM3CTL0 bit 2
  73. }

  74. /****************************************************************************************
  75. * 函数名     :init_pwm
  76. * 函数功能:pwm功能函数
  77. * 入口参数:无
  78. * 返回          :无
  79. ****************************************************************************************/
  80. void pwm_function()
  81. {

  82. }

  83. /****************************************************************************************
  84. * 函数名     :main
  85. * 函数功能:程序入口主函数
  86. * 入口参数:无
  87. * 返回          :无
  88. ****************************************************************************************/
  89. void main()
  90. {
  91.         init_mcu();
  92.         init_pwm();
  93.         Delay_ms(10);
  94.         while(1)
  95.         {
  96.                 pwm_function();
  97.                 Delay_ms(100);
  98.         }
  99. }

  100. /****************************************************************************************
  101. * 函数名     :int_fun
  102. * 函数功能:中断入口
  103. * 入口参数:无
  104. * 返回          :无
  105. ****************************************************************************************/
  106. void int_fun() __interrupt
  107. {

  108. }


 楼主| yysforever 发表于 2017-10-31 20:58 | 显示全部楼层
  1. /****************************************************************************************
  2. *
  3. * 文件名: main.c
  4. * 项目名: 08-Enganced PWM-Half_Bridg_Output-PWM4
  5. * 版 本: v1.0
  6. * 日 期: 2016年05月19日 10时48分57秒
  7. * 作 者: Administrator
  8. * 程序说明:增强型PWM参考例程。
  9. *                         半桥输出模式PWM4
  10. * 适用芯片:KF8VXXX系列——KF8V216、KF8V218
  11. ****************************************************************************************/
  12. #include<KF8V216.h>

  13. #define uchar unsigned char
  14. #define uint  unsigned int

  15. /****************************************************************************************
  16. * 函数名     :Delay_ms
  17. * 函数功能:长时间延时
  18. * 入口参数:延时基数 uchar ms_data
  19. * 返回          :无
  20. ****************************************************************************************/
  21. void Delay_ms(uint ms_data)
  22. {
  23.         uchar i;
  24.         while(ms_data--)
  25.         {
  26.                 i = 124;
  27.                 while(i--);
  28.         }
  29. }

  30. /****************************************************************************************
  31. * 函数名     :init_mcu
  32. * 函数功能:mcu初始化函数
  33. * 入口参数:无
  34. * 返回          :无
  35. ****************************************************************************************/
  36. void init_mcu()
  37. {
  38.         /***时钟初始化****/
  39.         OSCCTL = 0X70;      // 16M时钟

  40.         /***端口初始化****/
  41.         TR0 = 0x08;                                //设置P03端口为输入,P0其他I/O口为输出
  42.         TR1 = 0x00;                                //设置P1端口为输出
  43.         TR2 = 0x00;                                //设置P2端口为输出
  44.         P0 = 0;
  45.         P1 = 0;
  46.         P2 = 0;
  47.         P0LR = 0;                                //P0口输出低电平
  48.         P1LR = 0;                                //P1口输出低电平
  49.         P2LR = 0;                                //P2口输出低电平
  50. }

  51. /****************************************************************************************
  52. * 函数名     :init_pwm
  53. * 函数功能:pwm初始化函数
  54. * 入口参数:无
  55. * 返回          :无
  56. ****************************************************************************************/
  57. void init_pwm()
  58. {
  59.         /***PWM相关寄存器初始化****/
  60.         PWM4CTL1=0x0F;        // 不开启自动使能,死区时间设定为0x0f   即当前延时T = 15*(1/16M) = 15*62.5ns = 937.5ns
  61.         P4ASCTL=0x00;        // 禁止自动关闭源,默认关闭状态为1。
  62.         PATRCTL=0x10;        // 开启转向同步,全部输出,0x11 P3A 0x12 P3B  0x14 P3C 0x18 P3D

  63.         PP4H=0X00;
  64.         PP4L=0XFF;                //T=(0X00FF+1)*(1/16MHz)*1=16us,F=1/T=62.5KHz

  65.         PWM4L0=0X80;        //初始化占空比0X0080/(0X00FF+1)=50%
  66.         PWM4L1=0X00;

  67.         /****T2使能******/
  68.         T2H=0;
  69.         T2L=0;
  70.         T2CTL=0X04;                // 启动T2,T2分频比1

  71.         PWM4CTL0=0x8C;  //  半桥输出模式,默认有效状态高电平。
  72. }

  73. /****************************************************************************************
  74. * 函数名     :init_pwm
  75. * 函数功能:pwm功能函数
  76. * 入口参数:无
  77. * 返回          :无
  78. ****************************************************************************************/
  79. void pwm_function()
  80. {
  81.         static uchar direction=0;
  82.         if(direction)
  83.         {
  84.                 PWM4L0++;
  85.                 if(PWM4L0>=200)
  86.                 {
  87.                         direction=0;
  88.                 }
  89.         }
  90.         else
  91.         {
  92.                 PWM4L0--;
  93.                 if(PWM4L0<100)
  94.                 {
  95.                         direction=1;
  96.                 }
  97.         }
  98. }

  99. /****************************************************************************************
  100. * 函数名     :main
  101. * 函数功能:程序入口主函数
  102. * 入口参数:无
  103. * 返回          :无
  104. ****************************************************************************************/
  105. void main()
  106. {
  107.         init_mcu();
  108.         init_pwm();
  109.         Delay_ms(10);
  110.         while(1)
  111.         {
  112.                 pwm_function();
  113.                 Delay_ms(10);
  114.         }
  115. }

  116. //中断函数0:0X04入口地址
  117. void int_fun0() __interrupt (0)
  118. {

  119. }


  120. //中断函数1:0x14入口地址
  121. void int_fun1() __interrupt (1)
  122. {

  123. }
 楼主| yysforever 发表于 2017-10-31 20:58 | 显示全部楼层
  1. /****************************************************************************************
  2. *
  3. * 文  件  名: main.c
  4. * 项  目  名: 08-Enganced PWM-Half_Bridg_Output-PWM5
  5. * 版         本: v1.0
  6. * 日         期: 2016年05月16日 11时38分22秒
  7. * 作         者: Administrator
  8. * 程序说明:增强型PWM参考例程。
  9. *                         半桥输出模式PWM5
  10. * 适用芯片:KF8FX156系列——KF8F2156、KF8F3156、KF8F4156
  11. *                         KF8FX155系列——KF8F3155、KF8F4155
  12. *                         KF8F4158系列——KF8F4158
  13. *                         KF8VXXX系列——KF8V429
  14. ****************************************************************************************/
  15. #include<KF8F4156.h>

  16. #define uchar unsigned char
  17. #define uint  unsigned int

  18. /****************************************************************************************
  19. * 函数名     :Delay_ms
  20. * 函数功能:长时间延时
  21. * 入口参数:延时基数 uchar ms_data
  22. * 返回          :无
  23. ****************************************************************************************/
  24. void Delay_ms(uint ms_data)
  25. {
  26.         uchar i;
  27.         while(ms_data--)
  28.         {
  29.                 i = 124;
  30.                 while(i--);
  31.         }
  32. }

  33. /****************************************************************************************
  34. * 函数名     :init_mcu
  35. * 函数功能:mcu初始化函数
  36. * 入口参数:无
  37. * 返回          :无
  38. ****************************************************************************************/
  39. void init_mcu()
  40. {
  41.         /***时钟初始化****/
  42.         OSCCTL = 0x70;          //设置为16M

  43.         /***端口初始化****/
  44.         TR0 = 0x08;                                //设置P03端口为输入,P0其他I/O口为输出
  45.         TR1 = 0x00;                                //设置P1端口为输出
  46.         TR2 = 0x00;                                //设置P2端口为输出
  47.         TR3 = 0x00;                                //设置P3端口为输出
  48.         P0 = 0;
  49.         P1 = 0;
  50.         P2 = 0;
  51.         P3 = 0;
  52.         P0LR = 0;                                //P0口输出低电平
  53.         P1LR = 0;                                //P1口输出低电平
  54.         P2LR = 0;                                //P2口输出低电平
  55.         P3LR = 0;                                //P3口输出低电平
  56. }

  57. /****************************************************************************************
  58. * 函数名     :init_pwm
  59. * 函数功能:pwm初始化函数
  60. * 入口参数:无
  61. * 返回          :无
  62. ****************************************************************************************/
  63. void init_pwm()
  64. {
  65.         /***PWM相关寄存器初始化****/

  66.         P5ASCTL                = 0b00000000;                        //设置PWM5关闭时候PWM口输出电平                这里为默认设置,关闭PWM时候都输出0
  67.         PWM5CTL2        = 0b00000001;                        //PWM周期自动填充更新
  68.         PWM5CTL0        = 0b10001100;                         //半桥输出PWM  高电平有效    PWM5A  PWM5B作为互补输出
  69.         PWM5CTL1        = 0b00000011;                        //死区时间设置   死区时间为  一个T2时间基准          这里设置为3基准时间
  70.         PP5H                = 0;                                        //高位
  71.         PP5L                = 40;                                        //低位                        设置PWM周期  周期时间为PP5+1进行计算
  72.         PWM5L1                = 0;                                        //高位
  73.         PWM5L0                = 20;                                        //地位                            设置PWM占空比
  74.         T2H                        = 0;
  75.         T2L                        = 0;                                        //PWM时钟源 T2相关设置
  76.         T2CTL0                = 0b00000000;
  77.         T2ON                = 1;
  78. }

  79. /****************************************************************************************
  80. * 函数名     :init_pwm
  81. * 函数功能:pwm功能函数
  82. * 入口参数:无
  83. * 返回          :无
  84. ****************************************************************************************/
  85. void pwm_function()
  86. {

  87. }

  88. /****************************************************************************************
  89. * 函数名     :main
  90. * 函数功能:程序入口主函数
  91. * 入口参数:无
  92. * 返回          :无
  93. ****************************************************************************************/
  94. void main()
  95. {
  96.         init_mcu();
  97.         init_pwm();
  98.         Delay_ms(10);

  99.         while(1)
  100.         {
  101.                 pwm_function();
  102.                 Delay_ms(10);
  103.         }
  104. }

  105. //中断函数0:0X04入口地址
  106. void int_fun0() __interrupt (0)
  107. {

  108. }


  109. //中断函数1:0x14入口地址
  110. void int_fun1() __interrupt (1)
  111. {

  112. }
 楼主| yysforever 发表于 2017-10-31 20:59 | 显示全部楼层
  1. /****************************************************************************************
  2. *
  3. * 文件名: main.c
  4. * 项目名: 09-Enganced PWM-Full_Bridge_Output-PWM3
  5. * 版 本: v1.0
  6. * 日 期: 2016年05月19日 10时48分57秒
  7. * 作 者: Administrator
  8. * 程序说明:增强型PWM参考例程。
  9. *                         全桥输出模式PWM3
  10. * 适用芯片:KF8FXXX系列——KF8F211、KF8F212、KF8F213、
  11. *                                                  KF8F214、KF8F221、KF8F222、KF8F232、KF8F233、
  12. *                                                  KF8F312、KF8F313、KF8F321、KF8F323、
  13. *                                                  KF8F334、KF8F335、KF8F336、···
  14. ****************************************************************************************/
  15. #include<KF8F312.h>

  16. #define uchar unsigned char
  17. #define uint  unsigned int

  18. unsigned char Full_Bridge_Way;  //全桥正向反向标记 1 正向   0 反向
  19. unsigned char Full_PWM_Bak;                //占空比高位备份,全桥转向防直通措施

  20. /****************************************************************************************
  21. * 函数名     :Delay_ms
  22. * 函数功能:长时间延时
  23. * 入口参数:延时基数 uchar ms_data
  24. * 返回          :无
  25. ****************************************************************************************/
  26. void Delay_ms(uint ms_data)
  27. {
  28.         uchar i;
  29.         while(ms_data--)
  30.         {
  31.                 i = 124;
  32.                 while(i--);
  33.         }
  34. }

  35. /****************************************************************************************
  36. * 函数名     :init_mcu
  37. * 函数功能:mcu初始化函数
  38. * 入口参数:无
  39. * 返回          :无
  40. ****************************************************************************************/
  41. void init_mcu()
  42. {
  43.         /***时钟初始化****/
  44.         OSCCTL = 0X60;      // 8M时钟

  45.         /***端口初始化****/
  46.         TR0 = 0x0C;                                //设置P03端口为输入,P0其他I/O口为输出,P02设为自动关断源,所以设为上拉输入
  47.         TR1 = 0x00;                                //设置P1端口为输出
  48.         TR2 = 0x00;                                //设置P2端口为输出
  49.         P0 = 0;                                        //P0口输出低电平
  50.         P1 = 0;                                        //P1口输出低电平
  51.         P2 = 0;                                        //P2口输出低电平

  52.         PUPH = 0;                // 使能总上拉 PUPH
  53.         PUR = 0X04;         // 使能P02上拉,P02设为自动关断源,所以设为上拉输入
  54. }

  55. /****************************************************************************************
  56. * 函数名     :init_pwm
  57. * 函数功能:pwm初始化函数
  58. * 入口参数:无
  59. * 返回          :无
  60. ****************************************************************************************/
  61. void init_pwm()
  62. {
  63.         /***PWM相关寄存器初始化****/
  64.         PWM3CTL1=0x80;        // 开启自动使能,死区仅对半桥有效
  65.         P3ASCTL=0x44;        // 选择自动关闭源 INT0(P02)为低电平   关闭状态下P3A、P3C端口为高电平    P3B、P3D端口为低电平
  66.         PATRCTL=0x10;        // 开启转向同步。
  67.         PWM3CTL0=0x40;  // 全桥正向输出模式,暂不开启,默认有效状态高电平。

  68.         Full_Bridge_Way=1;

  69.         PWM3L=0x32;                // 占空比初始化 50%,=(PWM3L:(PDT1:PDT0))/(4*(PP3+1))=00110010:00/4*(0X63+1)=50%
  70.         PDT1=0;                        // IN PWM3CTL0 bit 5
  71.         PDT0=0;                        // IN PWM3CTL0 bit 4
  72.         PP3=0x63;                // 4倍数值构成PWM周期最小单位=(99+1)*4*(1/8MHz)*4=200us,F=1/T=5KHz
  73.         // PWM使能
  74.         T2=0;
  75.         T2CTL=0x05;                // 启动T2,分频器1为4分频
  76.         P3ON1=1;                // IN PWM3CTL0 bit 3
  77.         P3ON0=1;                // IN PWM3CTL0 bit 2
  78. }

  79. /****************************************************************************************
  80. * 函数名     :init_pwm
  81. * 函数功能:pwm功能函数
  82. * 入口参数:无
  83. * 返回          :无
  84. ****************************************************************************************/
  85. void pwm_function()
  86. {
  87.         //全桥转向,需防止接近百分百占空比下的,开关管导通时间小于截止时间时的直通,-
  88.         //如果占空比运行模式均小于一定值,可以不考虑直通现象,详细介绍见数据手册。
  89.         if(Full_Bridge_Way)
  90.         {
  91.                 Full_PWM_Bak=PWM3L;
  92.                 PWM3L=0x3F;                                // 暂时降低占空比
  93.                 Delay_ms(1);                        // 延后1个周期的时间,使占空比生效
  94.                 PWM3CTL0|=0x80;
  95.                 Full_Bridge_Way=0;
  96.                 PWM3L=Full_PWM_Bak;                // 占空比还原
  97.         }
  98.         else
  99.         {
  100.                 Full_PWM_Bak=PWM3L;
  101.                 PWM3L=0x3F;                                // 暂时降低占空比
  102.                 Delay_ms(1);                        // 延后1个周期的时间,使占空比生效
  103.                 PWM3CTL0&=0x7F;
  104.                 Full_Bridge_Way=1;
  105.                 PWM3L=Full_PWM_Bak;                // 占空比还原
  106.         }
  107. }

  108. /****************************************************************************************
  109. * 函数名     :main
  110. * 函数功能:程序入口主函数
  111. * 入口参数:无
  112. * 返回          :无
  113. ****************************************************************************************/
  114. void main()
  115. {
  116.         init_mcu();
  117.         init_pwm();
  118.         Delay_ms(10);
  119.         while(1)
  120.         {
  121.                 pwm_function();
  122.                 Delay_ms(50);
  123.         }
  124. }

  125. /****************************************************************************************
  126. * 函数名     :int_fun
  127. * 函数功能:中断入口
  128. * 入口参数:无
  129. * 返回          :无
  130. ****************************************************************************************/
  131. void int_fun() __interrupt
  132. {

  133. }
 楼主| yysforever 发表于 2017-10-31 20:59 | 显示全部楼层
  1. /****************************************************************************************
  2. *
  3. * 文件名: main.c
  4. * 项目名: 09-Enganced PWM-Full_Bridge_Output-PWM4
  5. * 版 本: v1.0
  6. * 日 期: 2016年05月19日 10时48分57秒
  7. * 作 者: Administrator
  8. * 程序说明:增强型PWM参考例程。
  9. *                         全桥输出模式PWM4
  10. * 适用芯片:KF8VXXX系列——KF8V216、KF8V218
  11. ****************************************************************************************/
  12. #include<KF8V216.h>

  13. #define uchar unsigned char
  14. #define uint  unsigned int

  15. unsigned char Full_Bridge_Way;  //全桥正向反向标记 1 正向   0 反向
  16. unsigned char Full_PWM_Bak;                //占空比高位备份,全桥转向防直通措施

  17. /****************************************************************************************
  18. * 函数名     :Delay_ms
  19. * 函数功能:长时间延时
  20. * 入口参数:延时基数 uchar ms_data
  21. * 返回          :无
  22. ****************************************************************************************/
  23. void Delay_ms(uint ms_data)
  24. {
  25.         uchar i;
  26.         while(ms_data--)
  27.         {
  28.                 i = 124;
  29.                 while(i--);
  30.         }
  31. }

  32. /****************************************************************************************
  33. * 函数名     :init_mcu
  34. * 函数功能:mcu初始化函数
  35. * 入口参数:无
  36. * 返回          :无
  37. ****************************************************************************************/
  38. void init_mcu()
  39. {
  40.         /***时钟初始化****/
  41.         OSCCTL = 0X70;      // 16M时钟

  42.         /***端口初始化****/
  43.         TR0 = 0x0C;                                //设置P03端口为输入,P0其他I/O口为输出,P02设为自动关断源,所以设为上拉输入
  44.         TR1 = 0x00;                                //设置P1端口为输出
  45.         TR2 = 0x00;                                //设置P2端口为输出
  46.         P0 = 0;
  47.         P1 = 0;
  48.         P2 = 0;
  49.         P0LR = 0;                                //P0口输出低电平
  50.         P1LR = 0;                                //P1口输出低电平
  51.         P2LR = 0;                                //P2口输出低电平

  52.         PUPH = 0;                        // 使能总上拉 PUPH
  53.         PUR = 0X04;                 // 使能P02上拉,P02设为自动关断源,所以设为上拉输入
  54. }

  55. /****************************************************************************************
  56. * 函数名     :init_pwm
  57. * 函数功能:pwm初始化函数
  58. * 入口参数:无
  59. * 返回          :无
  60. ****************************************************************************************/
  61. void init_pwm()
  62. {
  63.         /***PWM相关寄存器初始化****/
  64.         PWM4CTL1=0x80;        // 开启自动使能,死区仅对半桥有效
  65.         P4ASCTL=0x44;        // 选择自动关闭源 INT0(P02)为低电平   关闭状态下P3A、P3C端口为高电平    P3B、P3D端口为低电平
  66.         PATRCTL=0x10;        // 开启转向同步

  67.         PP4H=0X00;
  68.         PP4L=0XFF;                //T=(0X00FF+1)*(1/16MHz)*1=16us,F=1/T=62.5KHz

  69.         PWM4L0=0X80;        //初始化占空比0X0080/(0X00FF+1)=50%
  70.         PWM4L1=0X00;

  71.         /****T2使能******/
  72.         T2H=0;
  73.         T2L=0;
  74.         T2CTL=0X04;                // 启动T2,T2分频比1

  75.         PWM4CTL0=0x4C;  // 全桥正向输出模式,默认有效状态高电平。

  76.         Full_Bridge_Way=1;
  77. }

  78. /****************************************************************************************
  79. * 函数名     :init_pwm
  80. * 函数功能:pwm功能函数
  81. * 入口参数:无
  82. * 返回          :无
  83. ****************************************************************************************/
  84. void pwm_function()
  85. {
  86.         //全桥转向,需防止接近百分百占空比下的,开关管导通时间小于截止时间时的直通,-
  87.         //如果占空比运行模式均小于一定值,可以不考虑直通现象,详细介绍见数据手册。
  88.         if(Full_Bridge_Way)
  89.         {
  90.                 Full_PWM_Bak=PWM4L0;
  91.                 PWM4L0=0x3F;                                // 暂时降低占空比
  92.                 Delay_ms(1);                        // 延后1个周期的时间,使占空比生效
  93.                 PWM4CTL0|=0x80;
  94.                 Full_Bridge_Way=0;
  95.                 PWM4L0=Full_PWM_Bak;                // 占空比还原
  96.         }
  97.         else
  98.         {
  99.                 Full_PWM_Bak=PWM4L0;
  100.                 PWM4L0=0x3F;                                // 暂时降低占空比
  101.                 Delay_ms(1);                        // 延后1个周期的时间,使占空比生效
  102.                 PWM4CTL0&=0x7F;
  103.                 Full_Bridge_Way=1;
  104.                 PWM4L0=Full_PWM_Bak;                // 占空比还原
  105.         }
  106. }

  107. /****************************************************************************************
  108. * 函数名     :main
  109. * 函数功能:程序入口主函数
  110. * 入口参数:无
  111. * 返回          :无
  112. ****************************************************************************************/
  113. void main()
  114. {
  115.         init_mcu();
  116.         init_pwm();
  117.         Delay_ms(10);
  118.         while(1)
  119.         {
  120.                 pwm_function();
  121.                 Delay_ms(10);
  122.         }
  123. }

  124. //中断函数0:0X04入口地址
  125. void int_fun0() __interrupt (0)
  126. {

  127. }


  128. //中断函数1:0x14入口地址
  129. void int_fun1() __interrupt (1)
  130. {

  131. }
 楼主| yysforever 发表于 2017-10-31 20:59 | 显示全部楼层
  1. /****************************************************************************************
  2. *
  3. * 文  件  名: main.c
  4. * 项  目  名: 09-Enganced PWM-Full_Bridge_Output-PWM5
  5. * 版         本: v1.0
  6. * 日         期: 2016年05月16日 11时38分22秒
  7. * 作         者: Administrator
  8. * 程序说明:增强型PWM参考例程。
  9. *                         全桥输出模式PWM5
  10. * 适用芯片:KF8FX156系列——KF8F2156、KF8F3156、KF8F4156
  11. *                         KF8FX155系列——KF8F3155、KF8F4155
  12. *                         KF8F4158系列——KF8F4158
  13. *                         KF8VXXX系列——KF8V429
  14. ****************************************************************************************/
  15. #include<KF8F4156.h>

  16. #define uchar unsigned char
  17. #define uint  unsigned int

  18. unsigned char  TimeCnt;
  19. unsigned char  PSTRCTLTEMP;
  20. unsigned char         PWM5CTL0TEMP;

  21. /****************************************************************************************
  22. * 函数名     :Delay_ms
  23. * 函数功能:长时间延时
  24. * 入口参数:延时基数 uchar ms_data
  25. * 返回          :无
  26. ****************************************************************************************/
  27. void Delay_ms(uint ms_data)
  28. {
  29.         uchar i;
  30.         while(ms_data--)
  31.         {
  32.                 i = 124;
  33.                 while(i--);
  34.         }
  35. }

  36. /****************************************************************************************
  37. * 函数名     :init_mcu
  38. * 函数功能:mcu初始化函数
  39. * 入口参数:无
  40. * 返回          :无
  41. ****************************************************************************************/
  42. void init_mcu()
  43. {
  44.         /***时钟初始化****/
  45.         OSCCTL = 0x70;          //设置为16M

  46.         /***端口初始化****/
  47.         TR0 = 0x08;                                //设置P03端口为输入,P0其他I/O口为输出
  48.         TR1 = 0x00;                                //设置P1端口为输出
  49.         TR2 = 0x00;                                //设置P2端口为输出
  50.         TR3 = 0x00;                                //设置P3端口为输出
  51.         P0 = 0;
  52.         P1 = 0;
  53.         P2 = 0;
  54.         P3 = 0;
  55.         P0LR = 0;                                //P0口输出低电平
  56.         P1LR = 0;                                //P1口输出低电平
  57.         P2LR = 0;                                //P2口输出低电平
  58.         P3LR = 0;                                //P3口输出低电平
  59. }

  60. /****************************************************************************************
  61. * 函数名     :init_pwm
  62. * 函数功能:pwm初始化函数
  63. * 入口参数:无
  64. * 返回          :无
  65. ****************************************************************************************/
  66. void init_pwm()
  67. {
  68.         /***PWM相关寄存器初始化****/

  69.         P5ASCTL                = 0b00000000;                        //设置PWM5关闭时候PWM口输出电平                这里为默认设置,关闭PWM时候都输出0
  70.         PWM5CTL2        = 0b00000001;                        //PWM周期自动填充更新
  71.         PWM5CTL0        = 0b01001100;                         //初始化先先正向全桥输出
  72.         PSTRCTL                = 0b00011001;                        //PWM单项输出时候,和全桥输出时候,PWM信号控制是否输出到相应IO上, PSTRCTL(3:0)分别为P5D P5C P5B P5A
  73.         PP5H                = 0;                                        //高位
  74.         PP5L                = 40;                                        //低位                        设置PWM周期  周期时间为PP5+1进行计算
  75.         PWM5L1                = 0;                                        //高位
  76.         PWM5L0                = 20;                                        //  地位    设置PWM占空比
  77.         T2H                        = 0;
  78.         T2L                        = 0;                                        //PWM时钟源 T2相关设置
  79.         T2CTL0                = 0b00000000;
  80.         T2ON                = 1;
  81. }


  82. /********************************************
  83. *函数名称:T0TimeTurnOnFun
  84. *函数功能:开启定时器0
  85. *输入参数:无
  86. *输出参数:无
  87. * **********************************************/
  88. void   T0TimeTurnOnFun()
  89. {
  90.         T0CS = 0;
  91.         PSA = 0;
  92.         PS2 = 1;
  93.         PS1 = 1;
  94.         PS0 = 1;
  95.         T0=        240;
  96.         T0IE = 1;
  97.         AIE = 1;
  98. }

  99. /****************************************************************************************
  100. * 函数名     :init_pwm
  101. * 函数功能:pwm功能函数
  102. * 入口参数:无
  103. * 返回          :无
  104. ****************************************************************************************/
  105. void pwm_function()
  106. {
  107.          if(TimeCnt>25)                        //25ms变化一次    周期为50HZ
  108.          {
  109.                  TimeCnt = 0 ;
  110.                  PSTRCTLTEMP = PSTRCTL;
  111.                  PSTRCTLTEMP ^= 0b00001111;                        //取反全桥模式,正向和反向切换
  112.                  PWM5CTL0TEMP = PWM5CTL0;
  113.                  PWM5CTL0TEMP ^= 0b10000000;
  114.                  PSTRCTL         = 0;
  115.                  PWM5CTL0    =0;
  116.                  _NOP();                                //全桥  模式  正向和反向切换进行延时
  117.                  _NOP();
  118.                  _NOP();
  119.                  _NOP();
  120.                  PSTRCTL = PSTRCTLTEMP;
  121.                  PWM5CTL0 = PWM5CTL0TEMP;
  122.          }
  123. }

  124. /****************************************************************************************
  125. * 函数名     :main
  126. * 函数功能:程序入口主函数
  127. * 入口参数:无
  128. * 返回          :无
  129. ****************************************************************************************/
  130. void main()
  131. {
  132.         init_mcu();
  133.         init_pwm();
  134.         T0TimeTurnOnFun();
  135.         Delay_ms(10);

  136.         while(1)
  137.         {
  138.                 pwm_function();
  139.         }
  140. }

  141. //中断函数0:0X04入口地址
  142. void int_fun0() __interrupt (0)
  143. {
  144.         if(T0IF)                                //定时中断   1ms
  145.         {
  146.                 T0IF = 0;
  147.                 T0=        240;
  148.                 TimeCnt++;
  149.         }
  150. }


  151. //中断函数1:0x14入口地址
  152. void int_fun1() __interrupt (1)
  153. {

  154. }
haolaishi 发表于 2017-11-22 20:18 | 显示全部楼层
支持下,就是中断有点乱的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

254

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部