一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4951|回复: 17

[其他综合] 定时的程序有点不解,向师傅们请教解答

  [复制链接]
发表于 2012-3-5 22:54 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
//sbit led=P1^0;
void main()
{
uint8 contm;
TMOD=0X01;   
TH0=0xB1;   
TL0=0xE0;
TR0=1;
while(1)
{
  if(TF0==1)
  {
   TF0=0;
   TH0=0xB1;
   TL0=0xE0;
   contm++;
  }
  if(contm==50)
  {
   contm=0;
   P1=~P1;
  }
}
}
红色的部分该怎么理解呢
发表于 2012-3-5 23:09 | 显示全部楼层
红色部分是死循环部分,是由2个if语句组成。
也就是这段代码只做2件事:
1、看TF0 == 1?
2、看contm == 50?
TF0 == 1的话,就是说定时器0溢出了,要对它处理(清除标志+初始化计数器初值,最重要的就是contm增加1。)
contm不断的增加,总会从0增加到50的。一旦到了50,就马上清零,重新计数。同时P1取反,(我猜测P1接了LED,这样就会使LED闪烁)
回复

使用道具 举报

 楼主| 发表于 2012-3-6 09:38 | 显示全部楼层
if(TF0==1)
  {
   TF0=0;
   TH0=0xB1;
   TL0=0xE0;
   contm++;
这句话还是不理解到底是怎么进行的
回复

使用道具 举报

发表于 2012-3-6 09:48 | 显示全部楼层
if(TF0==1)
  {
   TF0=0;
   TH0=0xB1;
   TL0=0xE0;
   contm++;
这句话还是不理解到底是怎么进行的 ...
酷爱diy 发表于 2012-3-6 09:38 https://www.yleee.com.cn/images/common/back.gif

    TF0是定时器0的中断标志位,if语句是查询该中断标志位是否等于1,等于1的话表示发生中断了,进入if语句后先将标志位清0,然后重装计数值,变量++。
关于定时器的话建议看下Datasheet。
回复

使用道具 举报

 楼主| 发表于 2012-3-6 12:20 | 显示全部楼层
变量++后退出if(TF0==1)语句;执行下一条if(conmt==50)语句进行判断,如果conmt不到50,则返回到if(TF0==1)在循环执行 重装的计数初值,再重新计数20ms,TF0又等于1,conmt++,直到conmt==50;并清零if(conmt==50)内的conmt;且1S计数完毕,重新回到main 主函数重新执行;这样对吗
回复

使用道具 举报

发表于 2012-3-6 12:45 | 显示全部楼层
变量++后退出if(TF0==1)语句;执行下一条if(conmt==50)语句进行判断,如果conmt不到50,则返回到if(TF0==1) ...
酷爱diy 发表于 2012-3-6 12:20 https://www.yleee.com.cn/images/common/back.gif



    是这样的,有一点“如果conmt不到50,则返回到if(TF0==1)....”不到50就返回if(TF0==1),这时候条件是不一定成立的,要空循环到计数器满,才会重置计数器,然后再M++。
回复

使用道具 举报

 楼主| 发表于 2012-3-7 00:11 | 显示全部楼层
这时候条件是不一定成立的,从哪要空循环到计数满,才会重置计数器,然后再M++
回复

使用道具 举报

发表于 2012-3-7 07:29 | 显示全部楼层
执行过程可以软件仿真一下,就明白多了。
回复

使用道具 举报

发表于 2012-3-7 08:36 | 显示全部楼层
这时候条件是不一定成立的,从哪要空循环到计数满,才会重置计数器,然后再M++
酷爱diy 发表于 2012-3-7 00:11 https://www.yleee.com.cn/images/common/back.gif



    就是不停的执行两个判断,if(TF0==1),if(contM==50)
回复

使用道具 举报

 楼主| 发表于 2012-3-7 10:40 | 显示全部楼层
IF(CONMT==50)不成立,是退出重新执行IF(tf0==1)语句内的定时初值,还是什么的
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 20:17 , Processed in 0.034125 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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