找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4626|回复: 2
打印 上一主题 下一主题
收起左侧

STC12C5A60S2单片机之PWM程序

[复制链接]
跳转到指定楼层
楼主
ID:167223 发表于 2017-8-27 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC12C5A60S2单片机之PWM

单片机源程序如下:

  1. #include <intrins.h>
  2. #define U8 unsigned char

  3. sfr CCON     = 0xD8; //PCA控制寄存器
  4. sfr CMOD     = 0xD9; //PCA模式寄存器
  5. sfr CCAPM0   = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)   
  6. sfr CCAPM1   = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
  7. sfr CL       = 0xE9; //PCA 定时寄存器 低位
  8. sfr CH       = 0xF9; //PCA 定时寄存器 高位
  9. sfr CCAP0L   = 0xEA; //PCA模块0的 捕获寄存器 低位
  10. sfr CCAP0H   = 0xFA; //PCA模块0的 捕获寄存器 高位
  11. sfr CCAP1L   = 0xEB; //PCA模块1的 捕获寄存器 低位
  12. sfr CCAP1H   = 0xFB; //PCA模块1的 捕获寄存器 高位
  13. sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
  14. sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
  15. sbit CF   = 0xDF;    //PCA计数溢出标志位
  16. sbit CR   = 0xDE;    //PCA计数器 运行控制位
  17. sbit CCF1 = 0xD9;    //PCA模块1中断标志
  18. sbit CCF0 = 0xD8;    //PCA模块0中断标志

  19. //* CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25%
  20. //* CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50%
  21. //* CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%

  22. void PWM_clock(U8 clock);
  23. void PWM_start(U8 module,U8 mode);

  24. void PWM_clock(U8 clock)
  25. {
  26. CMOD |= (clock<<1);
  27. CL = 0x00;
  28. CH = 0x00;
  29. }

  30. void PWM_start(U8 module,U8 mode)
  31. {
  32. CCAP0L = 0XC0;
  33. CCAP0H = 0XC0;   //模块0初始输出 占空因数为25%
  34. CCAP1L = 0XC0;
  35. CCAP1H = 0XC0;   //模块1初始输出 占空因数为25%

  36. if(module==0)
  37.    {
  38.     switch(mode)
  39.      {
  40.    case 0: CCAPM0 = 0X42;break; //模块0设置为8位PWM输出,无中断
  41.    case 1: CCAPM0 = 0X53;break; //模块0设置为8位PWM输出,下降沿产生中断
  42.    case 2: CCAPM0 = 0X63;break; //模块0设置为8位PWM输出,上升沿产生中断
  43.    case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM输出,跳变沿产生中断
  44.    default: break;
  45.    }
  46. }
  47. else
  48.     if(module==1)
  49.      {
  50.       switch(mode)
  51.        {
  52.    case 0: CCAPM1 = 0X42;break; //模块1设置为8位PWM输出,无中断
  53.    case 1: CCAPM1 = 0X53;break; //模块1设置为8位PWM输出,下降沿产生中断
  54.    case 2: CCAPM1 = 0X63;break; //模块1设置为8位PWM输出,上升沿产生中断
  55.    case 3: CCAPM1 = 0X73;break; //模块1设置为8位PWM输出,跳变沿产生中断
  56.    default: break;
  57.    }
  58.    }
  59.    else
  60.      if(module==2)
  61.         {
  62.         switch(mode)
  63.     {
  64.       case 0: CCAPM0 = CCAPM1 = 0X42;break; //模块0和1设置为8位PWM输出,无中断
  65.       case 1: CCAPM0 = CCAPM1 = 0X53;break; //模块0和1设置为8位PWM输出,下降沿产生中断
  66.       case 2: CCAPM0 = CCAPM1 = 0X63;break; //模块0和1设置为8位PWM输出,上升沿产生中断
  67.       case 3: CCAPM0 = CCAPM1 = 0X73;break; //模块0和1设置为8位PWM输出,跳变沿产生中断
  68. ……………………

  69. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
025、STC12C5A60S2单片机之PWM.rar (49.23 KB, 下载次数: 98)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:57896 发表于 2017-8-28 20:59 | 只看该作者
谢谢!学习一下PCA模块使用。
回复

使用道具 举报

板凳
ID:266164 发表于 2019-12-14 17:07 | 只看该作者
这个程序如何修改PWM的频率和正脉宽
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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