详细注解的PWM c程序初学者适用

发布者:温馨小屋最新更新时间:2013-04-07 来源: 21ic关键字:PWM  c程序  初学者 手机看文章 扫描二维码
随时随地手机看文章

#include "stc2052.h"

unsigned int pulse_width_MAX = 0xF0; // ;PWM 脉宽最大值, 占空比 = 93.75%

unsigned int pulse_width_MIN = 0x10; // ;PWM 脉宽最小值, 占空比 = 6.25%

unsigned int step =0x38;

unsigned int pulse_width;

unsigned int i,j;

unsigned char state;

void PCAinit(); //PCA模块初始化

void delay1ms(unsigned int TIME); //1ms延时程序(大概是1ms)

void zhankongbi(); //调节占空比

void st(); //用来表示pulse_width的状态函数

void main(void)

{

EA=0;

PCAinit(); //初始化PCA定时器

zhankongbi();

}

void PCAinit()

{

CMOD=0x80; //PCA 在空闲模式下停止 PCA 计数器工作

//PCA 时钟模式为fosc/12

//禁止 PCA 计数器溢出中断

CCON=0x00; //禁止 PCA 计数器工作, 清除中断标志、计数器溢出标志

CL=0X00; //清0计数器

CH=0X00;

//下面设置模块0为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.7(第11脚)输出

CCAPM0=0x42; //PCA(计数器阵列)模块0的工作模式 :8位PWM工作模式

PCA_PWM0=0x00; //赋值为0,pwm才能有高电平输出

//下面设置模块1为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.5(第9脚)输出

CCAPM1=0x42; //PCA(计数器阵列)模块1的工作模式 :8位PWM工作模式

PCA_PWM1=0x00; //赋值为0,pwm才能有高电平输出

EPCA=1; // 开 PCA 中断

EA =1; // 开总中断

CR=1; //将PCA 计数器打开

}[page]

void zhankongbi()

{

pulse_width=pulse_width_MIN;

while(1)

{

st();

if(state==0)

{

pulse_width+=step;

}

if(state==1)

{

pulse_width-=step;

}

CCAP0H=pulse_width; // 模块0站空比的比较值

CCAP1H=pulse_width; // 模块1站空比的比较值

delay1ms(1000);

}

}

void delay1ms(unsigned int TIME)

{

for(i=0;i

for(j=0;j<400;j++)

{;}

}

void st()

{

if(pulse_width==pulse_width_MIN)

state=0;

if(pulse_width==pulse_width_MAX)

state=1;

}

程序功能说明程序在P3.7和P3.5都输出3.9k的PWM信号其脉冲宽度从6.25% 慢慢递增到93.75%然后在从93.75%递减到6.25%程序完全由本人自己写的,非网摘。这也是本人自己写的第一个比较完善的程序,现分享给大家,希望给有心学习的初学者!~

关键字:PWM  c程序  初学者 引用地址:详细注解的PWM c程序初学者适用

上一篇:单片机串行口接收和发送数据的过程简述
下一篇:单片机初学者必看

推荐阅读最新更新时间:2024-03-16 13:21

单片机通用模拟串口C程序
//----------------------------------------------------------------------   // UART.C   // 通用模拟串口程序   // 资源需求:一个硬件计数器,两个I/O口   // 硬件计数器的计数时间设定为三倍波特率   // 定义的两个I/O口,用于发送和接收,分别用在receive()和transmit(char)中   // 设立了专门的接收缓冲区,用于存储接收数据   // 注意:必需根据波特率来设定定时器;   // 每次通信开始必须调用初始化函数init_uart()   //--------------------
[单片机]
STM32 基础系列教程 8 - 互补PWM
前言 PWM及互补PWM是电机控制的基础,前面我们已经学习了PWM的产生,今天来学习一下互补PWM的产生,互补PWM就是两个互补的PWM的组合,用stm32 的高级定时器可以直接产生两路互补的PWM(即互补PWM)。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 高级定时器TIM1配置
[单片机]
STM32 基础系列教程 8 - 互补<font color='red'>PWM</font>
STM32 自定义频率与占空比PWM输出的方法
图一 图二 PWM应用非常广泛,但是不同的项目对输出的PWM又有特殊要求,为满足这些要求我们需要更多的实验来验证。接下来讲述图一显示波形的输出方法步骤(图二为异常波形)。 一、本实例所使用资源: 1、TIM4_CH3(对应管脚PB8)用于输出PWM波形 2、TIM3用于产生中断 3、MDK 软件仿真方法 二、执行过程: 1、初始化配置TIM4_CH3对应管脚的PWM输出功能(频率与占空比可变)。 2、初始化配置使用TIM3定时器中断功能,中断时间的配置需要根据PWM输出波形配置(定时器中断时间可变)。 3、在main()函数中调用TIM4与TIM3的初始化函数。 三、具体代码: int main(void) //主函数
[单片机]
STM32 自定义频率与占空比<font color='red'>PWM</font>输出的方法
如何编写漂亮的PLC程序
对于PLC程序的编写,我认为无须天马行空的标新立异,也无须花枝招展的炫弄技巧。只要在内容和质量这两方面把好关,具有正确性、可靠性、方便性、简洁性和可读性就是很好的程序! 一 PLC程序的内容 PLC应用程序应最大限度地满足被控对象的控制要求,在构思程序主体的框架后,要以它为主线,逐一编写实现各控制功能或各子任务的程序。经过不断他调整和完善。使程序能完成所要求的控制功能。另外,PLC应用程序通常还应包括以下几个方面的内容: 1、初始化程序在PLC上电后,一般都要做一些初始化的操作。其作用是为启动作必要的准备,并避免系统发生误动作。初始化程序的主要内容为:将某些数据区、计数器进行清零;使某些数据区恢复所需数据;对某些输出量置位或复
[嵌入式]
如何编写漂亮的PL<font color='red'>C程序</font>
新型非PWM功率单元在完美无谐波高压变频器中的应用
1 引言   随着变频调速技术的发展,作为大容量传动的高压变频调速技术得到了广泛应用。高压电动机利用高压变频器可以实现无级调速,既可满足生产工艺过程对电动机调速控制的要求,又可节约能源,降低生产成本[1]。自1994年美国罗宾康公司推出第一代完美无谐波高压变频器以来,由于其性能好、可靠性高、维修简单等优点,在欧美、日本、中国等市场一直处于领先地位,完美无谐波高压变频器较之普通高压变频器,无论从变频器控制性能、可靠性保证、制造工艺等方面都提高了很大的一个档次[1]。但是,到目前为止,这种完美高压变频器的功率单元的整流部分采用单向二极管串联,逆变器部分输出采用多电平移相式pwm技术,每个功率单元脉冲控制都是采用pwm控制,逆变器的
[电源管理]
新型非<font color='red'>PWM</font>功率单元在完美无谐波高压变频器中的应用
ds1302 ICC程序
//串行数码管显示 年-月-日 时-分-秒 //芯片 ATMEGA16L //时钟 4MHz 内部 // DS1302 上升沿读写数据 // DS1302 读数据时 IO口上拉无效 //短延时 2us wait(); 长延时 n ms delay_nms(); #include iom16v.h //164数据线置1 #define hc164_da ta_SET PORTD |= 0x01 //164数据线清0 #define hc164_da ta_CLR PORTD &= ~0x01 //164时钟线置1 #define hc164_clk_SET PORTD |= 0x02 //164时钟
[单片机]
STM32F7普通定时器的使用(定时+中断+PWM
基本计时功能 最简单的,定时器嘛,基本的定时器就是定时功能,简单来说就是TIMx- CNT会跟随着输入时钟的脉冲而计数。 初始化定时器的参数,大家都好理解,因为TIM2的输入时钟是108Mhz,这里进行10800分频,输入频率为10K,重装载值设置为20K,每2秒溢出一次。 在HAL_TIM_Base_Init的执行过程中,会先调用HAL_TIM_Base_MspInit再进行其他参数的配置,即先开时钟。 TIM_HandleTypeDef TIM2_Handler; static void MX_TIM2_Init(void) { TIM2_Handler.Instance = TIM2; TIM2_Hand
[单片机]
STM32F7普通定时器的使用(定时+中断+<font color='red'>PWM</font>)
一种电流型DC/DC变换器的研制
1 引言   开关变换器通常采用电压型和电流型两种控制方式[1]。电压型控制器只有电压反馈控制,电流型控制器增加了电流反馈控制,电流型控制比电压型控制的 PWM 具有许多优点,它能自动对称校正、可实现逐周限流、输出并联工作方便、更快的负载动态响应及简单的回路补偿等特性。 2 高频电流型脉宽控制器 UC3825B   UC3825B 是高性能脉宽控制器[2]。该控制器包含精确的电压基准、微功率启动电路、软启动、高频振荡器、宽带误带放大器、快速电流限制比较器、双脉冲抑制逻辑和双图腾柱输出驱动器。信号经过电流限制和比较器,逻辑和输出驱动器,具有很短的传输延时。   UC3825B 具有以下特点:适用于电压型或电流型开关电源电路;
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved