找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6528|回复: 6
收起左侧

单片机定时100ms中断10次就是1S的初始程序怎么写

[复制链接]
ID:67560 发表于 2014-11-28 22:26 | 显示全部楼层 |阅读模式
我需要显示的是1S
void timer0_init(void)  
{
TMOD=0X01;
TH0=0x9e;   //定时50ms,  x*12/6M=0.05 x=25000 ; T0=Y  X+Y=65536; Y=40536;  
TL0=0x58;      
}

void time0_int(void) interrupt 1
{
TR0=0;
EA=0;
TF0=0;
TMOD=0X01;
TH0=0x9e;
TL0=0x58;  //定时50  ms
cnt++;
if(sec==20)
  {sec++;
  }
  else
  {sec=0;
   cnt=0;
  }
EA=1;
TR0=1;
}
我显示的是cnt,结果显示出来的2位数,个位不是以秒显示,这是为什么 ,谢谢
回复

使用道具 举报

ID:1 发表于 2014-11-28 23:04 来自触屏版 | 显示全部楼层
void timer0_init(void)  这个初始化应该没问题吧
回复

使用道具 举报

ID:1 发表于 2014-11-28 23:09 来自触屏版 | 显示全部楼层
20次*每次50=1000毫秒
回复

使用道具 举报

ID:67560 发表于 2014-11-29 21:19 | 显示全部楼层
admin 发表于 2014-11-28 23:09
20次*每次50=1000毫秒

cnt++;
if(sec==20)
  {sec++;
  }
  else
  {sec=0;
   cnt=0;
  }
EA=1;
TR0=1;
}
这样写法对吗
回复

使用道具 举报

ID:69232 发表于 2014-11-29 23:22 | 显示全部楼层
void timer0_init()
回复

使用道具 举报

ID:66840 发表于 2014-12-2 17:00 | 显示全部楼层
void InitTimer0()
{
    TMOD = 0x01;//定时50 毫秒
    TH0 = 0x3C;
    TL0 = 0x0B0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}


void Timer0Interrupt() interrupt 1
{
    TH0 = 0x3C;
    TL0 = 0x0B0;
   
    sec++;
    if(sec==20)
    {
            sec = 0;//定时1S,cnt加1
            cnt++;
    }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:69862 发表于 2014-12-3 08:36 | 显示全部楼层
* 如何知道1秒钟需要多少个定时中断?
* 这个需要编写一段小程序测试,得到测试的结果后再按比例修正。
* 步骤:
* 第一步:在程序代码上先写入1秒钟大概需要200个定时中断。
* 第二步:基于以上1秒钟的基准,编写一个60秒的简单测试程序(如果编写超过
* 60秒的时间,这个精度还会更高)。比如,编写一个用蜂鸣器的声音来识别计时的
* 起始和终止的测试程序。
* 第三步:把程序烧录进单片机后,上电开始测试,手上同步打开手机里的秒表。
*         如果单片机仅仅跑了27秒。
* 第四步:那么最终得出1秒钟需要的定时中断次数是:const_time_1s=(200*60)/27=444
*/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表