单片机之呼吸灯(LED).docx_第1页
单片机之呼吸灯(LED).docx_第2页
单片机之呼吸灯(LED).docx_第3页
单片机之呼吸灯(LED).docx_第4页
单片机之呼吸灯(LED).docx_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

原理:用定时器模拟PWM,改变其占空比,用以控制LED的亮度。呼吸灯主要是控制好亮度显示的时间。顺便复习一下中断和定时/计数器的知识。一、先了解LED的连接情况:VCC接上1K的排阻,再连接LED,当单片机I/O口为0时,LED点亮,I/O口为1时,LED熄灭。二、有关中断和定时/计数器:(1)中断 第一个,是中断的理解图。如图,从左向右,可以很清楚的看出中断所需的条件。A、IP寄存器为优先级的选择(一般默认就OK了,不用管它)。B、IE寄存器为中断允许控制:EX0(IE.0),外部中断0允许位; ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位; ET1(IE.3),定时/计数器T1中断允许位; ES(IE.4),串行口中断允许位;EA (IE.7), CPU中断允许(总允许)位。(只要涉及中断,EA必须为1,即CPU开总中断)C、中断请求标志(TCON和SCON)主要说说TCON的中断标志,TCON寄存器:IT0(TCON.0),外部中断0触发方式控制位。 当IT0=0时,为电平触发方式。 当IT0=1时,为边沿触发方式(下降沿有效)。 IE0(TCON.1),外部中断0中断请求标志位。 IT1(TCON.2),外部中断1触发方式控制位。 IE1(TCON.3),外部中断1中断请求标志位。TF0(TCON.5),定时/计数器T0溢出中断请求标志位。 TF1(TCON.7),定时/计数器T1溢出中断请求标志位。中断响应条件1、中断源有中断请求;2、此中断源的中断允许位为1;3、CPU开中断(即EA=1)。以上三条同时满足时,CPU才有可能响应中断。如:EA=1;/开总中断 EX0=1;/开外部中断0TCON=0x01;/即IT0=0,此为电平触发方式最后,要写一个中断函数,如下:void timer0() interruptn using m此处写中断后要执行的程序其中n 对应中断的编号,以80C51 单片机为例,编号从04,分别对应外中断0、定时器0 中断、外中断1、定时器1 中断和串行口中断。使用usingm 指定,其中m的值是03,对应使用四组工作寄存器。例如可以这样来写: void timer0() interrupt 1 using 2 即表示在该中断程序中使用第2 组工作寄存器。说明:using最好不用,CPU会自动分配的。(2)定时/计数器(重要说说定时器)定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。说明:如果振荡频率为12MHZ,那么一个机器周期为(1/12)* 12 = 1us ,如果计数值为1000,则定时时间为1000 * 1us = 1ms 。1、工作方式寄存器TMOD 工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。如不需要其他功能,其他的保持默认值(0)即可。2、M1M0:工作方式设置位:本文主要是用方式1,所以TMDO = 0X01 。此时计数个数与计数初值的关系为:定时/计数器应用举例初始化程序应完成如下工作:1、对TMOD赋值,以确定T0和T1的工作方式。2、计算初值,并将其写入TH0、TL0或TH1、TL1。3、中断方式时,则对IE赋值,开放中断。4、使TR0或TR1置位,启动定时/计数器定时或计数。例如: TMOD=0x01;/设置定时器0为工作方式1TH0=(65536-10000)/256; /此处也可以用十六进制的数表示如0x7e等TL0=(65536-10000)%256; EA=1;/开总中断 ET0=1;/开定时器0中断TR0=1;/启动定时器0=到此基本的知识复习=呼吸灯的程序:/* 功能:LED灯慢慢变暗,再慢慢变亮。用定时器模拟的PWM调制。单片机:AT89S52 */#include #define V_TH0 0XFF /设定定时器0,高8位的初值#define V_TL0 0XF6 /设定定时器0,低8位的初值#define V_TMOD 0X01 /设定定时器0的工作方式为:方式1(计数位数是16位,由TL0作为低8位、TH0作为高8位)#define uchar unsigned char#define uint unsigned intvoid init_sys(); /系统初始化函数void delay(uint); /延时函数unsigned char ZKB;/占空比void main (void) init_sys();/初始化 while(1) for(ZKB=5;ZKB5;ZKB=ZKB-2)delay(8); void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=100;y0;y-);void init_sys() /*系统初始化函数*/ /*定时器初始化*/ TMOD=V_TMOD; TH0=V_TH0; TL0=V_TL0; TR0=1; ET0=1; EA=1;void timer0(void) interrupt 1 using 2static uchar click=0; /中断次数计数器变量TH0=V_TH0; /重新恢复定时器初始值TL0=V_TL0;+click;/每计数10次,产生一个中断,并且click增加一个if (click=100)click=0; /计满一百次,这重新计数。 /*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。 则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1100)*/if (click=ZKB)/当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论