51单片机两路或多路pwm波输出程序.doc

上传人:hw****26 文档编号:3549691 上传时间:2019-06-04 格式:DOC 页数:35 大小:288KB
下载 相关 举报
51单片机两路或多路pwm波输出程序.doc_第1页
第1页 / 共35页
51单片机两路或多路pwm波输出程序.doc_第2页
第2页 / 共35页
51单片机两路或多路pwm波输出程序.doc_第3页
第3页 / 共35页
51单片机两路或多路pwm波输出程序.doc_第4页
第4页 / 共35页
51单片机两路或多路pwm波输出程序.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、利用 T2扩展多个软件定时器,彻底解决定时器不够用的问题/*SoftTimer.h利用定时器 T2模拟多个软件定时器作者:21icbbs LPC900,2005-08特点:只占用一个硬件定时器 T2,就可以扩展出多达数十个以上的软件定时器软件定时器基本定时单位是 10ms,定时范围很宽:0.01163.84s软件定时器数量可以按需要设定,每增加一个,只多消耗2个字节的 RAM空间利用定时器 T2的自动重装特性,能够实现所有软件定时器的精确定时所有软件定时器都工作在 14位倒计时方式,用 TR和 TF位控制,使用极为方便第 0号定时器专门用于 Delay()函数,其它定时器可供用户程序自由使用*

2、/#ifndef_SOFT_TIMER_H_#define_SOFT_TIMER_H_#include/定义软件定时器数量(至少 1个)#defineTIMER_N 8/定义时钟频率(单位:Hz)#defineMCLK 11059200L/定义软件定时器结构/每个定时器只占用 2个字节structvolatile unsignedTR:1; /起停标志,0停止运行,1开始运行volatile unsignedTF:1; /溢出标志,0未溢出,1溢出volatile unsignedTV:14; /14位定时值idataTimerTIMER_N;/软件定时器初始化voidTimerInit()u

3、nsigned intx;unsigned CHARi;EA = 0;for( i=0; i= 600L )x+;#endifx = 0 - x;RCAP2L = (unsigned CHAR)x;RCAP2H = (unsigned CHAR)(x 8);TL2 = RCAP2L;TH2 = RCAP2H;ET2 = 1;TR2 = 1;EA = 1;/*函数:TimerOn()功能:启动定时器参数:n:定时器序号t:定时器初值,取值 016383t0时,定时(0.01*t)st=0时,定时 163.84s*/voidTimerOn(unsigned CHARn,unsigned intt)

4、Timern.TR = 0;Timern.TF = 0;Timern.TV = t;Timern.TR = 1;/*函数:TimerOff()功能:关闭定时器参数:n:定时器序号*/voidTimerOff(unsigned CHARn)Timern.TR = 0;Timern.TF = 0;/*函数:T2_INTR_SVC()功能:定时器 T2中断服务函数,每 10ms中断 1次*/voidT2_INTR_SVC()interrupt5unsigned CHARi;TF2 = 0;for( i=0; i0时,延时(0.01*t)st=0时,延时 163.84s*/voidDelay(unsi

5、gned intt)TimerOn(0,t);for(;)PCON |= 0x01;if(Timer0.TF)TimerOff(0);break;#undefTIMER_N#undefMCLK来源:http:/ 程序 51单片机 T2定时器的应用/* 文 件 名:test.c* 功 能:使用 T2定时器实现 1秒精确定时并闪灯* 1.CPU型号:AT89S52* 2.晶振:11.0592MHz*/【例 2】这是一个跑马灯程序,使用了定时器 2。#include /包括一个 52标准内核的头文件sbit P10 = P10; /头文件中没有定义的 IO就要自己来定义了sbit P11 = P11

6、;sbit P12 = P12; sbit P13 = P13; bit ldelay=“0“; /长定时溢出标记,预置是 0/定时器中断方式的跑马灯void main(void) /主程序unsigned char code ledp4=0xfe,0xfd,0xfb,0xf7;/预定的写入 P1的值unsigned char ledi; /用来指示显示顺序RCAP2H =0x10; /赋 T2的预置值 0x1000,溢出 30次就是 1秒钟RCAP2L =0x00; TR2=1; /启动定时器ET2=1; /打开定时器 2中断EA=“0“; /打开总中断while(1) /主程序循环 if(

7、ldelay) /发现有时间溢出标记,进入处理ldelay=“0“; /清除标记P1=ledpledi; /读出一个值送到 P1口ledi+; /指向下一个if(ledi=4)ledi=0; /到了最后一个灯就换到第一个/定时器 2中断void timer2() interrupt 5 static unsigned char t;TF2=0;t+; if(t=15) /T2的预置值 0x1000,溢出 30次就是 1秒钟,晶振 11.0592MHZt=“0“; ldelay=“0“; /每次长时间的溢出,就置一个标记,以便主程序处理标签: S52 可编程时钟发生器 S52单片机 T2定时器的

8、可编程时钟发生器52单片机里面有一个 T2定时器,它比普通的 16为定时器功能要强大多了,今天研究了 T2定时器的一个应用可编程时钟输出功能。配置成500KHZ的时钟信号输出后,用示波器测量了时钟输出脚 P10,发现还真准。为了把定时器配置成时钟发生器,位 C/T2(T2CON.1)必须清 0,也就是选择定时模式,位 T2OE(T2MOD.1)必须置 1,使能定时器 2输出。位TR2(T2CON.2)启动、停止定时器。时钟输出频率取决于晶振频率和定时器 2捕捉寄存器(RCAP2H,RCAP2L)的重载值,如公式所示:定时器 2的可编程输出模式原理框图如下图 1 定时器 2的可编程输出模式上个测试用的程序/ 文件名: t2_clk.c/ 功能: T2 定时器的可编程时钟输出

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。