找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3945|回复: 13
收起左侧

请问STC8单片机怎么用定时器0溢出率改变PWM频率,定时器如何设置

[复制链接]
ID:531986 发表于 2019-9-18 20:43 | 显示全部楼层 |阅读模式
麻烦大家
回复

使用道具 举报

ID:94031 发表于 2019-9-19 09:48 | 显示全部楼层
不是改变频率,而是改变脉宽比例,这种东西网上搜一搜很容易找到。
回复

使用道具 举报

ID:65956 发表于 2019-9-19 15:46 | 显示全部楼层
用单片机自身的PCA功能就好了
回复

使用道具 举报

ID:230975 发表于 2019-9-19 16:05 | 显示全部楼层
STC8系统列硬件的PWM可以直接使用,不用定时器了。
回复

使用道具 举报

ID:230975 发表于 2019-9-19 16:05 | 显示全部楼层
可以设置,频率和占空比
回复

使用道具 举报

ID:611078 发表于 2019-9-19 21:18 | 显示全部楼层
STC8-.jpg
我刚买的,写的不错。
回复

使用道具 举报

ID:531986 发表于 2019-9-27 15:09 | 显示全部楼层
xuyaqi 发表于 2019-9-19 09:48
不是改变频率,而是改变脉宽比例,这种东西网上搜一搜很容易找到。

嗯,你这个叫做改变占空比,我知道
回复

使用道具 举报

ID:531986 发表于 2019-11-3 14:33 | 显示全部楼层
吴卫革 发表于 2019-9-19 21:18
我刚买的,写的不错。

我也买了,以前的51不够用
回复

使用道具 举报

ID:634800 发表于 2019-11-3 15:25 | 显示全部楼层
如果使用通用定时器的话,可以直接设置指向该定时器的寄存器的值,调整定时器的溢出时间和启动条件就可以了,具体寄存器的代码和设置可以直接查芯片的数据手册
回复

使用道具 举报

ID:155507 发表于 2019-11-3 18:29 | 显示全部楼层
我给你来个试试


  1. //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
  2. //若无特别说明,工作频率一般为11.0592MHz

  3. #include "reg51.h"
  4. #include "intrins.h"

  5. //测试工作频率为11.0592MHz

  6. sfr     CCON        =   0xd8;   //     //PCA控制寄存器
  7. sbit    CF          =   CCON^7; // PCA计数器溢出(CH,CL由FFFFH变为0000H)标志。PCA计数器溢出后由硬件置位,必须由软件清0。
  8. sbit    CR          =   CCON^6;        // 1: 允许PCA计数器计数,必须由软件清0。
  9. sbit    CCF3        =   CCON^3;        // PCA 模块3中断标志,由硬件置位,必须由软件清0。      
  10. sbit    CCF2        =   CCON^2;        // PCA 模块2中断标志,由硬件置位,必须由软件清0。      
  11. sbit    CCF1        =   CCON^1;        // PCA 模块1中断标志,由硬件置位,必须由软件清0。      
  12. sbit    CCF0        =   CCON^0;        // PCA 模块0中断标志,由硬件置位,必须由软件清0。   
  13. sfr     CMOD        =   0xd9;      //     //PCA模式寄存器
  14. sfr     CL          =   0xe9;      //PCA模块 16位寄存器 低字节
  15. sfr     CH          =   0xf9;      //PCA模块 16位寄存器 高字节
  16. sfr     CCAPM0      =   0xda;      //PCA模块0的工作模式寄存器。   //PCA模块0模式控制寄存器
  17. sfr     CCAP0L      =   0xea;      //PCA模块0的捕捉/比较寄存器低8位。
  18. sfr     CCAP0H      =   0xfa;      //PCA模块0的捕捉/比较寄存器高8位。
  19. sfr     PCA_PWM0    =   0xf2;      //PCA模块0 PWM寄存器。
  20. sfr     CCAPM1      =   0xdb;      //PCA模块1的工作模式寄存器。
  21. sfr     CCAP1L      =   0xeb;      //PCA模块1的捕捉/比较寄存器低8位。
  22. sfr     CCAP1H      =   0xfb;      //PCA模块1的捕捉/比较寄存器高8位。
  23. sfr     PCA_PWM1    =   0xf3;      //PCA模块1 PWM寄存器。
  24. sfr     CCAPM2      =   0xdc;      //PCA模块2的工作模式寄存器。
  25. sfr     CCAP2L      =   0xec;      //PCA模块2的捕捉/比较寄存器低8位。
  26. sfr     CCAP2H      =   0xfc;      //PCA模块2的捕捉/比较寄存器高8位。
  27. sfr     PCA_PWM2    =   0xf4;      //PCA模块2 PWM寄存器。
  28. sfr     CCAPM3      =   0xdd;      //PCA模块3的工作模式寄存器。
  29. sfr     CCAP3L      =   0xed;      //PCA模块3的捕捉/比较寄存器低8位。
  30. sfr     CCAP3H      =   0xfd;      //PCA模块3的捕捉/比较寄存器高8位。
  31. sfr     PCA_PWM3    =   0xf5;      //PCA模块3 PWM寄存器。
  32. sfr     AUXR        =   0x8E;      //辅助寄存器
  33. sfr     INTCLKO     =   0x8f;      //中断与时钟输出控制寄存器

  34. void main()
  35. {
  36.     AUXR &= 0x7F;                          //定时器时钟12T模式
  37.     TMOD &= 0xF0;                          //设置定时器模式       
  38.     TMOD = 0x00;                                //定时器T0 模式0 16位自动重装载模式
  39.     TL0 = 0x66;                                 //65536-11.0592M/12/1000
  40.     TH0 = 0xfc;                                 //1000微秒@11.0592MHz
  41.     TF0 = 0;                                            //清除TF0标志       
  42.     TR0 = 1;                                    //启动定时器
  43.     INTCLKO = 0x01;                             //使能时钟输出
  44.        
  45.     CCON = 0x00;
  46. //    CMOD = 0x08;                                //PCA时钟为系统时钟
  47.     CMOD = 0x04;                                //PCA时钟为定时器T0的溢出脉冲
  48.     CL = 0x00;
  49.     CH = 0x00;
  50.     CCAPM0 = 0x42;                              //PCA模块0为PWM工作模式
  51.     PCA_PWM0 = 0x80;                            //PCA模块0输出6位PWM P1.7
  52.     CCAP0L = 0x20;                              //PWM占空比为50%[(40H-20H)/40H]
  53.     CCAP0H = 0x20;
  54.     CCAPM1 = 0x42;                              //PCA模块1为PWM工作模式
  55.     PCA_PWM1 = 0x40;                            //PCA模块1输出7位PWM  P1.6
  56.     CCAP1L = 0x20;                              //PWM占空比为75%[(80H-20H)/80H]
  57.     CCAP1H = 0x20;
  58.     CCAPM2 = 0x42;                              //PCA模块2为PWM工作模式
  59.     PCA_PWM2 = 0x00;                            //PCA模块2输出8位PWM P1.5
  60.     CCAP2L = 0x20;                              //PWM占空比为87.5%[(100H-20H)/100H]
  61.     CCAP2H = 0x20;
  62.     CCAPM3 = 0x42;                              //PCA模块3为PWM工作模式
  63.     PCA_PWM3 = 0xc0;                            //PCA模块3输出10位PWM P1.4
  64.     CCAP3L = 0x20;                              //PWM占空比为96.875%[(400H-20H)/400H]
  65.     CCAP3H = 0x20;
  66.     CR = 1;                                     //启动PCA计时器

  67.        
  68.     while (1);
  69. }

复制代码
回复

使用道具 举报

ID:531986 发表于 2019-11-3 23:04 | 显示全部楼层
我已经做来了,谢谢,这个51的也能实现
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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