[KungFu8位 MCU] KF8F PWM小练3

[复制链接]
 楼主| gaoxiansheng 发表于 2017-7-28 16:04 | 显示全部楼层 |阅读模式
  1. /****************************************************************************************
  2. *
  3. * 文  件  名: main.c
  4. * 项  目  名: 06-General PWM-3
  5. * 版         本: v1.0
  6. * 日         期: 2016年05月16日 11时38分22秒
  7. * 作         者: Administrator
  8. * 程序说明:普通PWM参考例程
  9. *                         PWM时钟源可选择T1,T1时钟源可选择Fsys/4(T1CLKEN=0),也可以选择INTHF(T1CLKEN=1)
  10. * 适用芯片:KF8TS25XX系列——KF8TS2502、KF8TS2508、KF8TS2510、KF8TS2514、KF8TS2516
  11. *                         KF8TS27XX系列 ——KF8TS2702、KF8TS2708、KF8TS2710、KF8TS2714、KF8TS2716
  12. *                         KF8FX156系列    ——KF8F2156、KF8F3156、KF8F4156
  13. *                         KF8FX155系列    ——KF8F3155、KF8F4155
  14. *                         KF8FX158系列    ——KF8F4158
  15. ****************************************************************************************/
  16. #include<KF8TS2716.h>

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

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

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

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

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

  67.         T1CLKEN=1;                                //T1CLKEN=1,T1时钟选择内部高频振荡器时钟INTHF;T1CLKEN=0,T1时钟选择Fsys/4
  68.         T1CTL = 0X01;                        //T1预分频比=1,启动T1
  69.         T1L = 0;
  70.         T1H = 0;
  71.         PP1 = 0xff;                                //PWM1的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz
  72.         PP2 = 0xff;                                //PWM2的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz
  73.         PWM1L = PP1/2;                        //PWM1初始化占空比为50%
  74.         PWM2L = PP2/2;                        //PWM2初始化占空比为50%

  75.         PWMCTL = 0;                                //关闭PWM1、PWM2
  76. }

  77. /****************************************************************************************
  78. * 函数名     :init_pwm
  79. * 函数功能:pwm功能函数
  80. * 入口参数:无
  81. * 返回          :无
  82. ****************************************************************************************/
  83. void pwm_function()
  84. {
  85.         static uchar direction=0;
  86.         if(direction)
  87.         {
  88.                 PWM1L++;                                                //PWM1增大占空比
  89.                 PWM2L++;                                                //PWM2增大占空比
  90.                 if(PWM1L > (PP1-1) )
  91.                 {
  92.                         direction=0;                                //换向
  93.                 }
  94.         }
  95.         else
  96.         {
  97.                 PWM1L--;                                                //PWM1减小占空比
  98.                 PWM2L--;                                                //PWM1减小占空比
  99.                 if(PWM1L==0)
  100.                 {
  101.                         direction=1;                                //换向
  102.                 }
  103.         }
  104. }

  105. /****************************************************************************************
  106. * 函数名     :main
  107. * 函数功能:程序入口主函数
  108. * 入口参数:无
  109. * 返回          :无
  110. ****************************************************************************************/
  111. void main()
  112. {
  113.         init_mcu();
  114.         init_pwm();
  115.         Delay_ms(10);

  116.         PWM1ON=1;
  117.         PWM2ON=0;
  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. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

210

帖子

1

粉丝
快速回复 返回顶部 返回列表