51单片机使用定时器中断模拟PWM控制端口电压

发布者:心若澄明最新更新时间:2019-01-26 来源: eefocus关键字:51单片机  定时器中断  模拟PWM控制  端口电压 手机看文章 扫描二维码
随时随地手机看文章

  最近应实验室需求写一篇51单片机产生PWM的文章供参考.


  单片机芯片STC89C52,晶振12MHz,编译环境Keil5.


  分析:若使单片机端口为高电平, 则单片机输出电压为恒值5V. 反之低电平输出电压为0V. 但是我们如果在周期为T的时间内使单片机高电平出现t1秒, 低电平出现t2秒, 那么在周期内, 高电平出现的时间为, 低电平时间为. 由于周期T的时间极短, 那么在连续的时间t内, 相应端口输出电压为.


  实验使用定时器0, 定时器0由两个寄存器进行控制,分别为定时器/计数器工作方式寄存器TMOD,  定时器/计数器控制寄存器TCON.


TMOD是一个八位寄存器,如下:

TMOD寄存器高4位控制定时器1低四位控制定时器0: 


1. GATE位为门控制位, 选择是否让外部中断控制定时器,此位一般置0, 即不让外部中断控制定时器.


2. C/T位为选择定时器/计数器模式选择, 此实验中使用定时器模拟时间周期T,  所以置0选择定时器模式.


3. M1和M0为定时器工作方式选择位, 控制方式如下:


 


一般在周期短,要求定时精度高的情况下选择方式2,但此实验选择方式1的16位计数器.


16位计数器的意思是周期T的长度不超过机器周期的倍,在12MHz晶振的作用下,机器周期为1us,故周期T不超过65536us.


TCON控制寄存器寄存器的高4位用于控制定时/计数器的启动和中断申请, 低4位用于控制外部中断(此处不介绍).


TF1:定时器1溢出中断请求标志位。定时器1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。定时器1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

TR1:定时器1运行控制位。TR1置1时,定时器1开始工作;TR1置0时,定时器1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。

TF0:定时器0溢出中断请求标志位,其功能与TF1类同。

TR0:定时器0运行控制位,其功能与TR1类同。

 


定时器工作方式: (以工作方式1为模板)


  方式1为16位计数,由定时器的低8位 和 定时器的高8位组成。定时器的低8位溢出时向定时器的高8位进位+1,定时器的高8位溢出时,置位TCON中的TF0标志,然后定时器高8为与低8位请零, 并向CPU发出中断请求.


TL0->TH0->TF0->产生中断(TL0/TH0/TF0清零)


下面介绍个定时器0实现PWM控制LED亮度的代码:


利用定时器0产生周期为100*100us, 低电平持续时间为100*20us的方波. 


方波如下:


因为这里我们是产生周期为10ms(100Hz)的PWM,所以可设置中断的时间基准为100us, 中断100次即为10ms. 并在中断里设置时间变量为n.


 1、当n>20时(0< n


 2、当20


 3、当n=100时,表明周期T已满,n清零;


 下面程序产生20%占空比的pwm:


#include

 

#define T 100     //定义时间进度为100个机器周期,即100us

 

sbit LED=P1^0;

 

unsigned int pwm_num=20;     //PWM中低电平出现的时间t2

 

void main()

{

TMOD = 0x01;            //选择为定时器0 工作方式1

TH0=(65536-T)/256;      //定时器高八位

TL0=(65536-T)%256;      //定时器低八位

TR0=1;                  //开启定时器

ET0=1;                  //开启定时器1的中断使能

EA=1;                   //开启总中断

while (1);              //等待中断发生

}

 

void Timer1() interrupt 1   //中断1(定时器0专用中断通道)

{

static unsigned char n; //静态变量n  可以看成每100us加一次的时间t

TH0=(65536-T)/256;      //重装定时器的值

TL0=(65536-T)%256;

n++;                    //表明周期T已到100*100us

if (n==100)

n=0;

LED = (n<=pwm_num) ? 0 : 1;   //判断时间是否超过t2

}

最终实验现象为:LED灯亮度变低.

关键字:51单片机  定时器中断  模拟PWM控制  端口电压 引用地址:51单片机使用定时器中断模拟PWM控制端口电压

上一篇:51DIY音乐频谱显示
下一篇:8051指令集和汇编语言程序设计

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

89C51单片机+X25045构成的看门狗电路
采用89C51单片机和X25045组成的 看门狗电路 ,X25045硬件连接图如图1所示。X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位。图1电路中,CPU的复位信号共有3个:上电复位(C1、R2),人工复位(S、R1、R2)和Watchdog复位(C2、R3),通过或门综合后加到RESET端。C2、R3的时间常数不必太大,有数百微秒即可,因为这时CPU的振荡器已经在工作。   
[电源管理]
89C<font color='red'>51单片机</font>+X25045构成的看门狗电路
基于AT89C51单片机的LED汉字显示屏设计方案
  O 引言   LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。   1 硬件电路组成及工作原理   本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵
[单片机]
基于AT89C<font color='red'>51单片机</font>的LED汉字显示屏设计方案
基于51单片机的频率计程序
这个是电路原理图 *********************************************** **************入门级频率计设计****************** ***************精度低,希望各位初学者在此基础上修改为精度更高的程序************* 本程序使用了,动态扫描,中断定时/计数等资源,电路图如上设计者:liujy 日期:2010/03/25*******************************/ #include reg52.h #define uchar unsigned char sbit w1=P2^0; sbit w2=P2^1; sbit w3
[单片机]
基于<font color='red'>51单片机</font>的频率计程序
51单片机-不支持连按
1.缺陷 上一讲讲解的“不支持连按”模式贴合了我们在生活中的实际应用,虽然我们仅用“while(KEY4==0);”就把按键模式给切换了,不过这条语句严格来说是有缺陷的。 现在我们编写的都是简单的程序,如果后面还有更多更复杂的程序时,“while(KEY4==0);”就成为BUG了。 如果我们对按键按下不松手,那程序就一直在循环等待,不遇到高电平就不往下执行代码,如果这时有重要的程序要执行,那岂不是因按键而耽误。 还有我们再看下面这些代码 while(1) { if(KEY4==0) { delay_ms(10);//等待抖动过去 if(KEY4==0) //二次判断 {
[单片机]
51单片机红外解码库文件
遥控器就是下面图上的那种 完整的程序源码下载地址:http://www.51hei.com/bbs/dpj-20623-1.html 红外解码文件 ir.h/*--------------------------------------------------- 名称:红外驱动 编写:YuMin_Dong 时间:2012.11.26 ---------------------------------------------------*/ #ifndef _IR_H_ #define _IR_H_ uint8 irtime; uint8 irdata /*,irprodata */; bit irreceive_ok,irpro_
[单片机]
<font color='red'>51单片机</font>红外解码库文件
AT89C51单片机数字逻辑无环流可逆调速系统设计
1 引言 生产中有许多机械要求既能正转,又能反转,而且常需要快速起动和制动,即需要可逆调速系统。由模拟电路实现的可逆调速系统,线路复杂,调整困难,可靠性低,缺乏灵活的控制。因此,这里给出一种基于单片机的逻辑无环流可逆调速控制系统设计方案。该系统设计采用全数字电路,实现数字脉冲触发、数字转速给定检测和数字PI算法等功能,由软件实现转速、电流调节及逻辑判断和复杂运算,具有不同于一般模拟电路的最优化、自适应、非线性、智能化等控制规律,而且更改灵活方便。 2 系统组成和控制原理 2.1 系统组成 该数字逻辑无环流可逆调速系统是由AT89C51单片机实现双闭环控制、无环流逻辑控制、触发脉冲的形成及相位控制,如图1所示。图1中,ASR为速
[单片机]
AT89C<font color='red'>51单片机</font>数字逻辑无环流可逆调速系统设计
51单片机的串口通信原理
一、并行和串行通信方式 通信有并行和串行两种通信方式。在单片机系统以及现代单片机测控系统中信息交换多采用串行通信方式。 1、并行通信方式 并行通信通常是将数据字节的各位用多条数据线同时进行传送,每一位数据都需要一条传输线。如下图所示,8位数据总线的通信系统,一次传送8位数据(1字节),需要8条数据线。还需要一条信号线和若干控制信号线,这种方式仅适合短距离的数据传输。 2、串行通信方式 串行通信方式是将数据字节分为一位一位的形式在一条传输线上逐个传输,此时只需要一条数据线,外加一条公共信号地线和若干控制信号线。因为一次只能传输一位,所以1字节的数据至少要分8位才能传输完毕。如下图所示 串行通信的必要过程是:发送时把并行数据变
[单片机]
<font color='red'>51单片机</font>的串口通信原理
基于51单片机与MXA2500GL传感器的振动信号分布式检测方法
  该检测方法以PC作为上位机,通过RS-485串行通讯,实现上位机与振动信号分布式检测系统的控制核心—C8051F020单片机之间的数据传输,并可以将检测结果在上位机上显示输出。 引言   由于加速度传感器及电荷放大器的连接线缆的距离限制,采用集中的数据采集和处理系统在空间距离较远的场合很难实现,其可靠性和抗干扰问题很难解决。常采用分布式检测方法:即设置多个数据采集站点,每个站点采用一套单独的数据采集和处理系统,通过网络通信将各站点相互连结起来,然后由一台系统机进行集中数据处理,提取相关特征信息。 C8051F020单片机性能特点   CYGNAL的C8051F020是集成模拟、数字信号的混合信号系统级SOC(System
[单片机]
基于<font color='red'>51单片机</font>与MXA2500GL传感器的振动信号分布式检测方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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