历史上的今天
今天是:2025年06月11日(星期三)
2021年06月11日 | 定时器/计数器T1的定时实例
2021-06-11 来源:eefocus
1、本例使用定时器1的定时中断控制2个LED实现不同的闪烁频率。
2、实现方法:通过给定时器T1设置适当的初值,实现50MS的定时中断,由于要控制两个LED以不同的频率闪烁,因而需要设置两个变量来分别计算中断次数。
3、在keil c51中新建工程ex46,编写如下程序代码,编译并生成ex46.hex文件
#include //包含头文件
sbit LED1=P1^0; //端口位定义
sbit LED2=P1^1;
unsigned char counter1,counter2; //定义全局变量,用以存储定时器的中断溢出次数
//主函数
void main(void)
{
EA = 1; //开总中断
ET1 = 1; //定时器T1中断允许
TMOD = 0x10; //设置定时器的工作方式
TH0 = (65536-46083)/256; //定时器赋初值
TL0 = (65536-46083)%256;
TR1 = 1; //开启定时器
LED1 = 1; //关闭LED
LED2 = 1;
counter1 = 0; //中断次数初值为0
counter2 = 0;
while(1)
{
}
}
//定时器1的定时中断服务函数,定时时长50ms
void Time1(void) interrupt 3 using 0
{
counter1++; //中断次数加1
counter2++;
if(counter1 == 2)//如果记满2次。也即计时够100ms
{
LED1 = ~LED1;//,LED1端口取反
counter1 = 0;//计数值1清0
}
if(counter2 == 8)//如果记满2次。也即计时够400ms
{
LED2 = ~LED2; // LED2端口取反
counter2 = 0; //计数值2清0
}
TH0 = (65536-46083)/256; //定时器重新赋初值
TL0 = (65536-46083)%256;
}
4、在proteus中新建仿真文件ex46.dsn,电路原理图如下所示:

5、将ex46.hex文件载入at89c51中,启动仿真,按动按键,观察程序运行结果,下图是某一时刻程序运行结果

上一篇:51单片机如何模拟串口之计数法
下一篇:Keil C51键盘译码程序
史海拾趣
|
北京 两个项目急招两个职位: 工作内容: 1)参与公司嵌入平台方案和构架,系统设计和开发; 2)从事嵌入式产品的软件需求分析、软件设计与开发; 3)负责需求文档、设计文档、培训文档的编写; 任职要求: 电子、通信计算机软 ...… 查看全部问答> |
|
warning C4530: C++ exception handler used, but unwind semantics are not enable 这个警告是在编WINDWOS MOBILE工程时出现的,我查了一下,意思是说,使用了 try/catch 的异常处理结构。但编译器默认是不支持异常处理的。 请问怎样才可以加上 ...… 查看全部问答> |
|
诚聘单片机设计工程师: 1,会msp430,有设计经验 2,有msp430 C语言开发经验 3,懂信号处理,会用matlab 4,最好有工作经验1年以上 电话:010-81504648 公司网站:www.safezx.com 注:工作地点北京… 查看全部问答> |
|
论坛里有谁搞过RGB24 转YUV422吗?? 在网上搜了一下,资料不是很多而且讲的不是很清楚。我看到以下公式,但是YUV的U、V分量不是只有Y的一半吗?按照公式的话U、V分量和Y一样多啊,谁能点拨下我,不胜感激。Y = 0.299 R ...… 查看全部问答> |
|
直接将ACS安装至4200-SCS的嵌入式PC中能让功能强大 的ACS集成测试系统兼有两者优点。小尺寸但功能强大的 4200-SCS测量硬件结合了ACS软件的全自动化特性,能在极小的封装中实现令人印象深刻的测试功能和自动化。使用案例非常广并且包括: ...… 查看全部问答> |




