• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

小白关于定时器的白痴问题 大侠勿笑

开心的马骝 2015-03-05 浏览量:2028
#include "reg52.h"

void timerms();
void main()
{
	TMOD = 0x01;
	TL0  = 0xf0;
	TH0  = 0xd8;
	ET0  = 1;
	EA   = 1;
	timerms();
}

void timerms()
{
 TR0  = 1;    //定时器/计数器0启动
 while(TF0!=1)
 {}
 TF0 = 0;
 TL0  = 0xf0;
 TH0  = 0xd8;
}


请教 这段程序有什么问题 为什么不能正常启动定时器呢

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 需要TL0、TH0计满数,TF才置1,你可以全速运行观察一下TF值的变化,或者写个简单的程序下载到板子上验证

    • 发布于 2015-03-05
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:48
  • 谢谢啦 找到毛病了 我的程序有问题  查询模式不应该开启ET0 否则一溢出就直接响应中断去了 
    • 发布于2015-03-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 学习一下。好像就是中断处理的问题。
    • 发布于2015-03-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 我粗心了,当时着急抢着回帖

    看图,我的确实屏蔽了中断!
    中断后,TF0被复位,但是TL0和TH0满值,而这时候分频器没有被断开,于是再次溢出?
    但是哈!TF1不是这样的,在模式2中,同时触发TF2和复位TL0!于是不用非要进中断。同时,你可以尝试一下定时2,他比定时器0和1更加灵活。具体参考Proteus板块里面,我出的一个开发板。
    嗨,纠正错误的同时也不能忘了给自己的板块做广告啊!

    • 发布于2015-03-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果用STC的单片机如果只能MAIN();不断的初始化会有问题,修改成试试
    #include "reg52.h"
    
    void timerms();
    void main()
    {
    	TMOD = 0x01;
    	TL0  = 0xf0;
    	TH0  = 0xd8;
    	ET0  = 1;
    	EA   = 1;
         while(1){	timerms();}
    }
    
    void timerms()
    {
     TR0  = 1;    //定时器/计数器0启动
     while(TF0!=1)
     {}
     TF0 = 0;
     TL0  = 0xf0;
     TH0  = 0xd8;
    }

    • 发布于2015-03-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

小白关于定时器的白痴问题 大侠勿笑