51学习笔记之利用定时器0产生最大周期为16s的PWM波(STC12C5A60S2)

发布者:Yuexiang666最新更新时间:2024-07-24 来源: cnblogs关键字:51学习  定时器0  PWM波  STC12C5A60S2 手机看文章 扫描二维码
随时随地手机看文章

硬件:STC12C5A60S2 


功能:实现PWM波生成。该程序周期为256ms,输出端口为P1.3。


代码


#include 'reg51.h'

#include 'intrins.h'

#define FOSC 11059260L

#define T1MS  (65536-FOSC/12/1000)


//定时器产生的脉冲大约为1MS,PWM经过256分频后的时间是256ms

//通过调T1MS的数值,PWM的最大周期时间是16s。


typedef unsigned char BYTE;

typedef unsigned int WORD;


/*Declare SFR associated with the PCA */

sfr CCON = 0xD8; //PCA control register

sbit CCF0 = CCON^0; //PCA module-0 interrupt flag

sbit CCF1 = CCON^1; //PCA module-1 interrupt flag

sbit CR = CCON^6; //PCA timer run control bit

sbit CF = CCON^7; //PCA timer overflow flag

sfr CMOD = 0xD9; //PCA mode register

sfr CL = 0xE9; //PCA base timer LOW

sfr CH = 0xF9; //PCA base timer HIGH

sfr CCAPM0 = 0xDA; //PCA module-0 mode register

sfr CCAP0L = 0xEA; //PCA module-0 capture register LOW

sfr CCAP0H = 0xFA; //PCA module-0 capture register HIGH

sfr CCAPM1 = 0xDB; //PCA module-1 mode register

sfr CCAP1L = 0xEB; //PCA module-1 capture register LOW

sfr CCAP1H = 0xFB; //PCA module-1 capture register HIGH

sfr PCAPWM0 = 0xf2;

sfr PCAPWM1 = 0xf3;


void Delay_xms(unsigned int z){        

    unsigned char i, j;

    unsigned int k;

    for(k=0;k

        _nop_();

        _nop_();

        i = 12;

        j = 84;

        do{while (--j);} 

        while (--i);

    }

    

}


//定时器0初始化


void Time0Init()

{

    TMOD = 0x01;

    TL0=T1MS;

    TH0=T1MS>>8;

    TR0=1;

    ET0=1;

    EA=1;    

}


void PWMInit()

{

    CCON = 0; //Initial PCA control register

    //PCA timer stop running

    //Clear CF flag

    //Clear all module interrupt flag

    CL = 0; //Reset PCA base timer

    CH = 0;

//    CMOD = 0x00; //Set PCA timer clock source as Fosc/2

    CMOD = 0x04;

    //Disable PCA timer overflow interrupt

    CCAP0H = CCAP0L = 0x80; //PWM0 port output 50% duty cycle square wave

    CCAPM0 = 0x42; //设备为定时器0溢出脉冲

    CCAP1H = CCAP1L = 0xff; //PWM1 port output 0% duty cycle square wave

    PCAPWM1 = 0x03;

    CCAPM1 = 0x42; //PCA module-1 work in 8-bit PWM mode

    //and no PCA interrupt

    CR = 1; //PCA timer start run

}




void PWMSet(float a)   //输入a表示占空比

{

    CCAP0H =CCAP0L =(BYTE)((1-a)*256);

}


void main()

{


    Time0Init();

  PWMInit();

    PWMSet(0.1);

while(1)

{


        PWMSet(0.5);    //占空比为百分之50

    Delay_xms(2000);

}

}



//定时器0中断

void tm0_isr() interrupt 1 using 1

{

    TL0=T1MS;

    TH0=T1MS>>8;

}


关键字:51学习  定时器0  PWM波  STC12C5A60S2 引用地址:51学习笔记之利用定时器0产生最大周期为16s的PWM波(STC12C5A60S2)

上一篇:51学习笔记之以硬件spi与max6675通信实现K型热电偶测温
下一篇:51学习笔记之关键词data、bdata、idata、pdata、xdata、code的含义

推荐阅读最新更新时间:2026-03-20 12:17

STC12C5A60S2的PCA模块输出PWM
PCA是一个模块,是一个硬件结构,具体的如下图所示 16位PCA定时器/计数器相当于定时器0/1。每经过一个时钟周期会自动加1,时钟周期来源与下图几部分: 一个时钟周期可能为(SYSclk/1,SYSclk/2...),最后一个外部输入指的是给他外接的晶振源。 模块0/1是十六位的捕获/比较模块。这个模块的工作方式有四种: 1、上升/下降沿捕获 2、软件定时器 3、高速脉冲输出 4、克调制脉冲输出 至于要在哪一个模式下工作,可以通过配置寄存器来进行完成 在手册中有一个配置表格,我们按自己的要求来进行选择即可。例如我们选择 8位PWM,无中断模式 这是最简单的模式,去掉那些烦人的中断,对了虽然PC
[单片机]
<font color='red'>STC12C5A60S2</font>的PCA模块输出<font color='red'>PWM</font><font color='red'>波</font>
STM32Cubev6 PWM输出
工作环境: STM32CubeMXv6 Keil5 PWM波输出和时钟有关,所以我们需要先配置时钟,打开左侧的下拉框System Core,点击RCC选项; 我选用的是8M的外部高速时钟(以实际情况为准),在下方的配置框中更改High Speed Clock(HSE)为Crystal/Ceramic Resonator; 配置HSE为8Mhz,APB1为54Mhz; 打开左侧的下拉框Timers,点击TIM3选项; 打开PWM Channel1(通道一)和 PWM Channel2(通道二)选择为PWM Generation CH1和PWM Generation CH2,此时我们可得到两路频
[单片机]
CANape/vMeasure exp控制OUTMM输出PWM的方法
1.内容梗概 CSM OUT MiniModule是信号输出模块,可输出模拟变量和数字信号。可以通过CSMconfig来设置OUTMM功能,并使用CAN报文来控制OUTMM输出的数值大小。OUTMM一般用于测试台架和HIL测试等。 OUTMM可以输出以下信号: 电压(0V到10V);电流(0mA到20mA或者4mA到20mA);频率信号( 0Hz到100kHz);PWM波(占空比0%到100%);数字信号; 本文主要以示例的方式,展示使用CANape控制OUT MiniModule输出可调节占空比的PWM波的方法,CANape通过VN1610接口卡收发器发送 CAN报文到总线上,OUT MiniModule收到报文后根据转
[嵌入式]
CANape/vMeasure exp控制OUTMM输出<font color='red'>PWM</font><font color='red'>波</font>的方法
如何利用定时器产生PWM
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]
如何利用<font color='red'>定时器</font>产生<font color='red'>PWM</font><font color='red'>波</font>
工程师笔记|高精度定时器与高级控制定时器 PWM后再恢复的区别
引言 在高精度定时器中,可以使用外部事件来对 PWM 输出进行封锁,并可自动恢复;在高级控制定时器中,可以使用 Break 或是 Clr_input 来对 PWM 输出进行封锁, 然后也可以自动恢复,其中 Break 必须结合 AOE 置位来实现自动恢复。 虽然都可以实现封波后的自动恢复,但是在二者之间还是存在一些区别。 PWM 封波-自动恢复原理分析 在高精度定时器中,通过配置 PWM 的 Set 与 Reset 事件,当 Set/Reset 事件发生时,PWM 输出做出对应的响应。要实现封波-自动恢复,只需配置合适的 Reset 事件,Reset 发 生时,触发 PWM 输出 inactive 电平,当 Reset 事件
[单片机]
stm32f407之通用定时器产生PWM
1.初始化 1.定义相关变量 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; 2.打开定时器和GPIO时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); 3.配置GPIO口为复用功能输出 GPIO_PinAFConfig(GPIOF, GPI
[单片机]
MSP430F5529 DriverLib 库函数学习笔记(六)定时器A产生PWM
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 1.通过Timer_A_outputPWM配置产生PWM波 所选输出引脚为P1.2 初始化函数 #define TIMER_PERIOD 12500 void Timer_A_PWM_Init(void) { Timer_A_outputPWMParam htim = {0}; //P1.2复用输出 GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1, GPIO_
[单片机]
MSP430F5529 DriverLib 库函数<font color='red'>学习</font>笔记(六)<font color='red'>定时器</font>A产生<font color='red'>PWM</font><font color='red'>波</font>
STM32单片机一个定时器输出不同频率PWM
  在使用STM32单片机输出PWM波形的时候,通常可以直接使用定时器提供的PWM模式。可以通过自动重装载寄存器(TIMx_ARR)来设置定时器的输出频率,然后通过捕获/ 比较寄存器 1(TIMx_CCRx)来设置占空比。一个定时器只有一个自动重装载寄存器(TIMx_ARR),但是有4个通道的捕获/ 比较寄存器 1(TIMx_CCR1、TIMx_CCR2、TIMx_CCR3、TIMx_CCR4)。所以使用一个定时器输出PWM波形的时候,频率是统一调整的,4个通道的频率是相同的,但是占空比每个通道可以独立设置。比较寄存器TIMx_CCR1、TIMx_CCR2、TIMx_CCR3、TIMx_CCR4分别设置4个通道的占空比。   
[单片机]
STM32单片机一个<font color='red'>定时器</font>输出不同频率<font color='red'>PWM</font><font color='red'>波</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved