定时器/计数器T1的定时实例

来源:本站
导读:目前正在解读《定时器/计数器T1的定时实例》的相关信息,《定时器/计数器T1的定时实例》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《定时器/计数器T1的定时实例》的详细说明。
简介:本文主要讲基于proteus的51单片机仿真实例,定时器/计数器T1的定时实例

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,电路原理图如下所示:

定时器/计数器T1的定时实例

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

定时器/计数器T1的定时实例

提醒:《定时器/计数器T1的定时实例》最后刷新时间 2024-03-14 01:17:38,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《定时器/计数器T1的定时实例》该内容的真实性请自行鉴别。