[51单片机] 初学者的定时器程序疑问。

[复制链接]
 楼主| 快鲨1 发表于 2019-1-1 09:35 | 显示全部楼层 |阅读模式
#include<reg52.h>

sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
    unsigned char cnt = 0;

    ENLED = 0;
    ADDR3 = 1;
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;

    TMOD = 0x01;
    TH0 = 0xB8;
    TL0 = 0x00;
    TR0 = 1;

    while(1)
    {
        if(1 == TF0)//
        {
            TF0 = 0;
            TH0 = 0xB8;
            TL0 = 0x00;
            cnt++;
            if(cnt>=50)
            {
                 cnt = 0;
                 LED = ~LED;
            }
               
        }
    }
}
我不是很明白这个TFO==1是什么意思,TFO不是监测T0是否有溢出吗,既然这样子的话那么TFO没有溢出啊,TH0才184,TL0才0,  怎么都没到65536啊,那么怎么会执行if里面的程序呢,if为假,那应该是程序直接就结束了,怎么会这样子。(晶振为11.0592M)
xuyaqi 发表于 2019-1-1 10:28 | 显示全部楼层
TFO==1是在定时0计满0xB800发出的,因为你设置了TH0 = 0xB8;TL0 = 0x00;,不会到65536。TH0才184,TL0才0,不就是TH0 = 0xB8;TL0 = 0x00;吗。
airwill 发表于 2019-1-1 15:14 | 显示全部楼层
这个TF0==1是什么意思,TF0 是监测T0是否有溢出
虽然 TH0才184,TL0才0,但是定时器硬件是在计数, 自动在增加,   这样子 那么到后来T0总是会有溢出的时候啊
rankey 发表于 2019-1-2 08:16 | 显示全部楼层
if(1 == TF0)//
        {
            TF0 = 0;
            TH0 = 0xB8;
            TL0 = 0x00;
            cnt++;
            if(cnt>=50)
            {
                 cnt = 0;
                 LED = ~LED;
            }
这些要写到中断服务程序里去的!主函数里写这些代码干嘛!
ayb_ice 发表于 2019-1-2 08:21 | 显示全部楼层

if(1 == TF0)//
表示溢出了,后面是重装初值而已
diy1997 发表于 2019-1-2 12:55 | 显示全部楼层
TH0,TL0是计数器本身,启动后按一定的时间一直自动加1。

TH0 = 0xB8;TL0 = 0x00; 赋值后,计数器在0xB800的基础上一直加1直到满0XFFFF后溢出, 然后TFO==1。
caijie001 发表于 2019-1-2 16:59 | 显示全部楼层
TH0 = 0xB8;
    TL0 = 0x00;

这不是这样子吗
376128791 发表于 2019-1-2 21:22 | 显示全部楼层
不是很理解
 楼主| 快鲨1 发表于 2019-1-3 07:04 | 显示全部楼层
谢谢各位的回答,我已经明白了。
lihui567 发表于 2019-1-3 15:30 | 显示全部楼层
这个就是51单片机中定时中断溢出啊,你所用的单片参考手册就知道了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

45

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部