STC12C系列单片机PWM脉宽调制

  最近给别人做了一个小东西,MCU选的是STC12C5A60S2 ,需要用到PWM控制功能。

在网上找了一下,发现解释的不尽人意,无奈之下自己琢磨数据手册弄明白了。

  首先,STC12C5A60S2内置有两个 编程计数器阵列(PCA) 模块,分别用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制输出(PWM)。具体寄存器详见数据手册这里就不多累述了。

  这里就只讲PWM的实现,首先需要对PCA进行初始化配置,代码如下:

  

void Pwm0_init(void)    //PWM0初始化配置
{
    CCON = 0x00;                         //
    CL = 0;                                   //PCA计数器 低8位
    CH = 0;                                  //PCA计数器 高8位
    CMOD = 0x02;                       //选择时钟源为系统时钟源的1/2
    CCAP0H = CCAP0L = 0x00;           //设置占空比为 0
    CCAPM0 = 0x42;                   //0100 0010  允许比较器,允许PWM0引脚输出
    CR = 1;                          //启动 PCA 计数器阵列
}

上述代码设置了 P1.3作为 PWM0的输出脚,并初始化了PWM0,当然初始化完成后,默认占空比为0。

接下来对占空比进行控制:


//占空比设置 0-255
void Pwm0_outset(u8 grad)
{
CR = 0;              //先关闭计数
CCAP0H=CCAP0L= grad;      //设置占空比,有 0-255 阶 
CR = 1;                   //计数打开
}

这样就完成PWM0控制部分的编写了,当然还有PWM1没有写,相信聪明的读者也已经明白PWM1该如何配置了,具体参考数据手册,数据手册才是硬道理,其他都是虚的。

  希望对大家有所帮助,以上

  

时间: 2024-10-27 14:14:04

STC12C系列单片机PWM脉宽调制的相关文章

PIC18系列单片机I/O端口操作寄存器及应用

试验芯片:Microchip PIC 18F4550 集成开发环境:MPLAB IDE v8.53 编译器:Microchip C18 PIC18系列单片机是美国微芯公司(Microchip)8位单片机系列中的高档系列,其任一I/O引脚允许的最大灌电流或最大拉电流达25mA,可以直接驱动LED和继电器.PORTA.PORTB 和PORTE 的最大灌电流或最大拉电流总和为200mA,PORTC和PORTD的最大灌电流或最大拉电流总和为200mA,PORTF和PORTG的最大灌电流或最大拉电流总和为

STC15系列单片机教程之一:OneLED

STC15系列单片机教程之一:OneLED STC15系列单片机教程之一:OneLED一.开发软件准备二.STC15F2K60S单片机IO分配三.程序编写1.Keil 新建项目2.编写程序3. 程序的编译四.固件下载总结 本系列教程开始学习STC15系列单片机的C语言编程,读者需要有C语言的基础知识. 一.开发软件准备 1. 安装编程软件:Keil 2. 下载软件STC_Isp 3. 配置keil下的STC单片机编程环境 点击添加信号和头文件到Keil中,为 keil软件添加STC系列单片机器件

MSP430FR2系列单片机破解芯片解密多少钱?

MSP430FR2系列单片机破解芯片解密 MSP430FR2xx系列单片机芯片解密型号: MSP430FR2533.MSP430FR2110.MSP430FR2310.MSP430FR2311.MSP430FR2532.MSP430FR2111 MSP430FR2632.MSP430FR2633.MSP430FR2033.MSP430FR2032.MSP430FR2433 #####[微信:icpojie]##### MSP430FR2xx系列单片机特性: 放大器:运算放大器,超低漏电跨阻放大器

演示STC89xx系列单片机串行口功能 (8-bit/9-bit)

1 /*------------------------------------------------------------------------------------*/ 2 /* --- STC MCU Limited ---------------- ---------------------------------------*/ 3 /* ---演示STC89xx系列单片机串行口功能 (8-bit/9-bit) ----------------*/ 4 /* --- Mobil

freescale飞思卡尔 HCS12 系列单片机bootloader详解(二)

在上一篇文章中我们做了对HC9S12系列单片机存储空间的划分,但是相比于整个bootloader的工作而言,这只是非常基础的一步,有很多基础的概念在上一篇的操作中我们并没有涉及到.比如较复杂单片机中单片机的存储空间到底是什么样的,具体怎么用C语言对它进行寻址.因为我们单片机的存储空间一般由如下的构成,RAM,ROM以及EEPROM等等.比如在我在本篇中举例介绍的9S12G128单片机,它的RAM空间有8KB,EEPROM有4KB,FLASH有128KB.如何将这几个存储空间合理的组织起来想必单片

freescale飞思卡尔 HCS12 系列单片机bootloader详解(三)

在完成内存映射的内容后,接下来我们将进入一个简单Bootloader的实际设计中来.在第一节内容中,我们已经简单介绍了bootlaoder的作用,它实际上就是在单片机重启过程中的一个步骤:如果有bootloader的启动信号,则进入bootloader模式开始新程序的接收与flash的擦写,若没有bootloader的启动信号,则直接进入用户程序执行用户程序内容. bootloader的启动信号一般有如下两种: 1)外部引脚接地或者拉高电平:每次启动时先监测某一已经设定的引脚是否已经被操作到了b

NXP 飞思卡尔 S12Z 系列单片机 SCI 设置(解决SCI已经设置完成,但却无法通信的问题)

近日在使用了飞思卡尔S12Z设置SCI后总是不出数据,明明按照前代单片机S12Z的方法设置好了,为什么又不能用了呢? 下面是我简单对SCI1的设置,仅仅这样设置是出不来数据的: 1 SCI1BD = GLOBAL_BUS_CLOCK / SCI1_BAUD_RATE; 2 SCI1CR2 = SCI1CR2_RE_MASK + SCI1CR2_TE_MASK + SCI1CR2_RIE_MASK; 在上面的设置中我仅仅设置了SCI1的设置,假设了S12Z与S12一样,不存在同一口多个功能复用的情

freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置

Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到的数据或者程序写入Flash中进行程序或者数据的更新.当初做Flash的擦写也遇到了很多问题,网上搜罗下来也没有合适的帖子能够详细的将整个过程或者学习的思路以及最后实现的程序详细的加以解析,而本博文就是基于这个出发点来写的.技术本身应当是共享的才能真正让社会进步,不是么? 关于单片机Flash的基本

STMF103系列单片机无法调试和下载程序的原因及其解决

时间:2018/11月/15 经过实践中发现,使用stm32cubeMX 自动生成的代码,烧入单片机后第一次,断电重启后能够运行. 但是,再次对其进行操作的时候,发现无法进行调试,也无法对其下载程序. 怀疑是硬件问题,比如怀疑是硬件不稳定导致的.但是实际上原因并不是. 换了另外一块主芯片一样的不同设计的板子,依然发现了类似现象. 怀疑是软件问题. 经过同事指导,将boot0.boot1的跳线接到高电平,不从内部flash启动. 发现可以在IDE环境下(比如keil v5)对其进行下载程序.这一次