一个51产生PWM的演示程序

发布者:乐呵的挑最新更新时间:2016-08-18 来源: eefocus关键字:产生PWM  演示程序 手机看文章 扫描二维码
随时随地手机看文章
这是一个51产生PWM的演示程序

其中P1.3 P1.4是两个输出,这个程序比较匆忙,没有严格验证,可能有错,如有错误请指正。


/*****************************************************************************
* 程序名称:PWM占空比调整演示程序                                        *
* 编写时间:2005.9.15 23:30分                                              *
* 程序版本:1.0                                                          *
        *
*                                                                         *
******************************************************************************
*程序思路说明:                                                          *
*                                                                         *
*关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数 *
*设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样*
*可以设定占空比可从1-100变化。即0.01ms*100=1ms                            *
******************************************************************************/
#i nclude

#define uchar unsigned char    
/*****************************************************************************
* TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;       *
* TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*
* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 *
* 间为1ms*65536=65.536ms                                                 *
******************************************************************************/
#define V_TH0 0XFF                
#define V_TL0 0XF6                
#define V_TMOD 0X01                

void init_sys(void);          /*系统初始化函数*/
void Delay5Ms(void);

unsigned char ZKB1,ZKB2;

void main (void)
{
init_sys();
ZKB1=40;          /*占空比初始值设定*/
ZKB2=70;          /*占空比初始值设定*/
while(1)
{
   if (!P1_1) //如果按了+键,增加占空比
{
   Delay5Ms();
   if (!P1_1) 
   {
   ZKB1++;
   ZKB2=100-ZKB1;
   }
}

   if (!P1_2) //如果按了-键,减少占空比
{
   Delay5Ms();
   if (!P1_2) 
   {
   ZKB1--;
   ZKB2=100-ZKB1;
   }
}
/*对占空比值限定范围*/
if (ZKB1>99) ZKB1=1;
if (ZKB1<1) ZKB1=99;
}
}


/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void init_sys(void)          /*系统初始化函数*/
{
/*定时器初始化*/
TMOD="V"_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA="1";
}


//延时
void Delay5Ms(void)
{
unsigned int TempCyc = 1000;
while(TempCyc--);
}

/*中断函数*/
void timer0(void) interrupt 1 using 2
{
static uchar click="0";                /*中断次数计数器变量*/
TH0=V_TH0;                                  /*恢复定时器初始值*/
TL0=V_TL0;
++click;
if (click>=100) click="0";

if (click<=ZKB1)    /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
P1_3=0;
else
P1_3=1;

if (click<=ZKB2)                      
P1_4=0;
else
P1_4=1;

}

关键字:产生PWM  演示程序 引用地址:一个51产生PWM的演示程序

上一篇:C51中精确的延时与计算的实现
下一篇:51单片机控制TC35 之发送TEXT短信——MADE BY lyq

推荐阅读最新更新时间:2024-03-16 15:06

浅谈8051单片机进行外部数据交换的3种方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了
[单片机]
51单片机学习:蜂鸣器实验
实验名称:蜂鸣器实验 接线说明: 实验现象:下载程序后蜂鸣器发出声音,一段时间后关闭 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; sbit BEEP=P2^5; //将P2.5管脚定义为BEEP /************************************************************
[单片机]
51单片机(AT89C52)A/D转换
#include reg52.h #define uchar unsigned char #define uint unsigned int #define PORT P3 #define dula_h P2|=0x40 #define dula_l P2&=0xbf #define wela_h P2|=0x80 #define wela_l P2&=0x7f sbit cs=P2^0; sbit rd=P2^1; sbit wr=P2^2; uchar read; uchar table ={ //共阳数码管 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0
[单片机]
<font color='red'>51</font>单片机(AT89C52)A/D转换
基于C8051F的磁流变控制器设计
前言 磁流变阻尼器(MRFD)的阻尼力调节主要依靠调节其内部励磁线圈电流的方式实现,一般通过控制器将外界控制端发出的控制信号转变为一定的输出电压(由线圈电阻大小决定)、电流(由线圈线径决定)输入励磁线圈。在工程控制过程中,磁流变阻尼器控制器的实时精确调节对阻尼器性能的影响很大。从设计原理来讲,MRFD控制器主要分成电压源控制器和电流源控制器两种。根据对励磁线圈的等效电路图分析可知电流源响应速度快于电压源。因此MPFD控制器的设计几乎都采用电流源控制方式。 MRFD控制器的性能指标有:磁流变阻尼器的控制电流与阻尼力的线性关系,要求控制电流连续可调并具有较高的线性度和较小的相对误差;振动控制的实时性要求控制器响应速度要快;用于现场
[应用]
51单片机系列之驱动蜂鸣器发声
名称:51单片机驱动蜂鸣器发声 平台:Keil 4, Ly-51S学习板 内容:模拟报警声,如闹钟 滴 滴 滴 滴 -----------------------------------------------------*/ #include reg52.h sbit SPK = P1^2; void delay_2us(unsigned char t) { while(--t); } void main() { while(1) { delay_2us(25); SPK = !SPK; } }
[单片机]
基于89C51单片机和CAN控制器实现老旧住宅供暖计量系统的改造设计
1、引言 CAN总线技术诞生于汽车控制领域,随着其技术的不断完善,应用领域也不断扩展。 CAN总线技术进入我国以来,在经历了引进、使用阶段后,自2000年以来,国内许多相关厂商对该总线技术进行了不懈的研究与开发,取得了一定的成果,目前,国内CAN总线技术已经在汽车控制、数控机床、医疗器械和楼宇自动化等众多领域得到了应用,是受到广泛关注的总线技术之一。 CAN总线具有现场总线的特点,适合于分布式系统的应用。目前,国内已具有一定的 CAN总线产品的开发能力,其应用成本也随之降低,所以,在传统控制系统的改造中 CAN总线技术得到了比较广泛的应用。随着热能商品化和供暖计费制度的改革,国内居民住宅供暖体制也将发生变化,其中最为重要的也是
[单片机]
基于89C<font color='red'>51</font>单片机和CAN控制器实现老旧住宅供暖计量系统的改造设计
89C2051实现的电子钟
  一、电路原理   本电路采用89C2051单片机设计硬件电路如图1所示。AT89C2051具有2k字节闪速可编程可擦除只读存储器(FLASH EEPROM)和128bytes的随机存取数据存储器(RAM),可重复擦写10000次,数据保存时间10年,工作电压范围:2.7V~6V,工作频率:0~24MHz,15根可编程I/0引线,2个16位定时器/计数器,一个5向量两级中断结构,—个全双工串行口,一个精密模拟比较器,两级程序加密,输出口可直接驱动LED显示,低功耗的闲置和调电保护工作方式,以及片内振荡器和时钟电路。本电路的设计,充分利用了单片机的硬件资源,结构简单。   89C2051单片机端口设置:Pl口分别接数码管的段码
[单片机]
89C20<font color='red'>51</font>实现的电子钟
采用单片机C8051F310实现光伏电池MPPT控制器的设计
1 引 言 能源是人类社会存在和发展的重要物质基础,随着社会的发展,能源日渐减少,并伴随着环境问题日益突出,使得越来越多的国家把目光投向可再生能源。太阳能作为重要能源之一,以其永不枯竭,无污染等优点,正得到迅速的发展。但是太阳能电池在其工作过程中,由于受环境(主要包括日照强度,温度)的影响,其输出具有明显的非线性特性,造成电池与负载之间的不匹配,从而不能使太阳能最大效率地转化为电能输出。为了实现光伏发电系统的功率输出最大化,就需要对光伏电池的最大功率点进行跟踪控制,即MPPT(MaximumPower Point Tracking)控制。 在光伏控制技术上,MPPT控制方法有很多种,目前市场上常用的是使用CVT(恒定电压跟踪)
[单片机]
采用单片机C80<font color='red'>51</font>F310实现光伏电池MPPT控制器的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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