1726|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

定时器T0,T1的常用基本设置 [复制链接]

有时候带手机不方便,可以又想知道时间,这时候可以用蜂鸣器做一个音频的时间提醒器,每60秒发一声提醒


提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时)


代码如下


#include "reg52.h"

#define uint unsigned int
#define uchar unsigned char

#define time_set0 5000//设置定时器0的计时长度

#define th0 (65536-time_set0)/256//计算定时器高8位装入值

#define tl0 (65536-time_set0)%256 //计算定时器低8位装入值
#define time_set1 256-200//设置定时器1的计时长度

sbit P1_1=P1^1;//系统运行指示灯管脚

sbit beep=P1^7;//蜂鸣器管脚

uint cnt=0;//计数器
uint cnt2=0;//计数器
uint cnt3=0;//计数器

void delay(uint i)//延时函数
{
uchar k;
for(;i>0;i--)
for(k=0;k<200;k++);
}

timer0()interrupt 1 using 1//定时器0设置
{
    cnt++;//每次中断增加一
if(cnt>100)//计数时间5ms*100=500ms
{
cnt=0;
}

    TH0=th0;//重装定时器
    TL0=tl0;
}

timer1()interrupt 3 using 2//定时器1设置
{
    cnt2++;
if(cnt2>=5000)//计数时间0.2ms*5000=1s
{
cnt2=0;
cnt3++;//秒计数器增加一
P1_1=!P1_1;//指示灯每秒翻转一次
}
}

void main()
{
    TMOD=0x21;//设置定时器1方式2(高4位0010,自动重装TH->TL,计满255),定时器0方式1(低4位0001,16位定时器,可计满65535)
    TH0=th0;//装载定时器初始值
    TL0=tl0;
    TH1=time_set1;
    TL1=time_set1;
    EA=1;//开总中断
    ET0=1;//开定时器0中断
    ET1=1;//开定时器1中断
    TR0=1;//打开定时器0
    TR1=1;//打开定时器1
while(1)
{
  if(cnt3>=60)//计时60秒
  {
  cnt3=0;//计时清零
beep=0;//打开蜂鸣器
delay(100);//延时100
beep=1;//关闭蜂鸣器
  }
}
}


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表