打印
[51单片机]

初学者的定时器程序疑问。

[复制链接]
1224|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
快鲨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;
            }
这些要写到中断服务程序里去的!主函数里写这些代码干嘛!

使用特权

评论回复
5
ayb_ice| | 2019-1-2 08:21 | 只看该作者

if(1 == TF0)//
表示溢出了,后面是重装初值而已

使用特权

评论回复
6
diy1997| | 2019-1-2 12:55 | 只看该作者
TH0,TL0是计数器本身,启动后按一定的时间一直自动加1。

TH0 = 0xB8;TL0 = 0x00; 赋值后,计数器在0xB800的基础上一直加1直到满0XFFFF后溢出, 然后TFO==1。

使用特权

评论回复
7
caijie001| | 2019-1-2 16:59 | 只看该作者
TH0 = 0xB8;
    TL0 = 0x00;

这不是这样子吗

使用特权

评论回复
8
376128791| | 2019-1-2 21:22 | 只看该作者
不是很理解

使用特权

评论回复
9
快鲨1|  楼主 | 2019-1-3 07:04 | 只看该作者
谢谢各位的回答,我已经明白了。

使用特权

评论回复
10
lihui567| | 2019-1-3 15:30 | 只看该作者
这个就是51单片机中定时中断溢出啊,你所用的单片参考手册就知道了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

45

帖子

0

粉丝