[KungFu8位 MCU] KF8F PWM小练1

[复制链接]
 楼主| gaoxiansheng 发表于 2017-7-28 16:02 | 显示全部楼层 |阅读模式
  1. /****************************************************************************************
  2. *
  3. * 文  件  名: main.c
  4. * 项  目  名: 06-General PWM-1
  5. * 版         本: v1.0
  6. * 日         期: 2016年05月16日 11时38分22秒
  7. * 作         者: Administrator
  8. * 程序说明:普通PWM参考例程。
  9. *                         PWM时钟源由T1分频而来,T1时钟源为Fsys/4
  10. * 适用芯片:KF8FXXX系列——KF8F200、KF8F203、KF8F204、KF8F210、KF8F211、KF8F212、KF8F213、
  11. *                                                  KF8F214、KF8F221、KF8F222、KF8F232、KF8F233、KF8F300、KF8F303、
  12. *                                                  KF8F304、KF8F310、KF8F312、KF8F313、KF8F321、KF8F323、KF8F324、
  13. *                                                  KF8F333、KF8F334、KF8F335、KF8F336、···
  14. *                         KF8TS23XX系列——KF8TS2302、KF8TS2308、KF8TS2310、KF8TS2314、···
  15. *                         KF8TS24XX系列——KF8TS2402、KF8TS2408、KF8TS2410、KF8TS2414、···
  16. ****************************************************************************************/
  17. #include<KF8F312.h>

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

  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 = 0x50;          //设置为4M

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

  53. /****************************************************************************************
  54. * 函数名     :init_pwm
  55. * 函数功能:pwm初始化函数
  56. * 入口参数:无
  57. * 返回          :无
  58. ****************************************************************************************/
  59. void init_pwm()
  60. {
  61.         /***PWM相关寄存器初始化****/
  62.         T1CTL = 0X01;                        //T1预分频比=1,启动T1
  63.         T1L = 0;
  64.         T1H = 0;
  65.         PP1 = 0xff;                                //PWM1的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz
  66.         PP2 = 0xff;                                //PWM2的周期寄存器 ,分辨率为255,T=(255+1)*4*(1/4MHz)*1=256us,F=1/T=3.9KHz
  67.         PWM1L = PP1/2;                        //PWM1初始化占空比为50%
  68.         PWM2L = PP2/2;                        //PWM2初始化占空比为50%

  69.         PWMCTL = 0;                                //关闭PWM1、PWM2
  70. }

  71. /****************************************************************************************
  72. * 函数名     :init_pwm
  73. * 函数功能:pwm功能函数
  74. * 入口参数:无
  75. * 返回          :无
  76. ****************************************************************************************/
  77. void pwm_function()
  78. {
  79.         static uchar direction=0;
  80.         if(direction)
  81.         {
  82.                 PWM1L++;                                                //PWM1增大占空比
  83.                 PWM2L++;                                                //PWM2增大占空比
  84.                 if(PWM1L > (PP1-1) )
  85.                 {
  86.                         direction=0;                                //换向
  87.                 }
  88.         }
  89.         else
  90.         {
  91.                 PWM1L--;                                                //PWM1减小占空比
  92.                 PWM2L--;                                                //PWM1减小占空比
  93.                 if(PWM1L==0)
  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.         PWM1ON=1;                                                        //开启PWM1
  111.         PWM2ON=1;                                                        //开启PWM2
  112.         while(1)
  113.         {
  114.                 pwm_function();
  115.                 Delay_ms(10);
  116.         }
  117. }

  118. /****************************************************************************************
  119. * 函数名     :int_fun
  120. * 函数功能:中断入口
  121. * 入口参数:无
  122. * 返回          :无
  123. ****************************************************************************************/
  124. void int_fun() __interrupt
  125. {

  126. }


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

本版积分规则

22

主题

210

帖子

1

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