找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6303|回复: 12
打印 上一主题 下一主题
收起左侧

12M的晶振,定时器定了一秒钟,为什么那么快,高手给我看看啊,谢谢了

  [复制链接]
跳转到指定楼层
楼主
ID:65770 发表于 2014-12-19 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. sbit a_138=P2^2;
  3. sbit b_138=P2^3;
  4. sbit c_138=P2^4;                                                                       
  5. unsigned char code Digitron []=
  6. {
  7.         0x3f,0x06,0x5b,0x4f,0x66,
  8.         0x6d,0x7d,0x07,0x7f,0x6f,
  9.         0x77,0x7c,0x39,0x5e,0x79,
  10.         0x71
  11. };

  12. void main()
  13. {
  14.         unsigned int n,u;
  15.         TMOD = 0x01;
  16.         TH0 = 0x3Cb0;
  17.         TL0 = 0x00;
  18.         TR0 = 1;
  19.        
  20.         a_138=0;
  21.         b_138=0;
  22.         c_138=0;
  23.        
  24.         while(1)
  25.         {
  26.                 if(TF0 == 1)
  27.                 {
  28.                         TF0 = 0;
  29.                         TH0 = 0x3Cb0;
  30.                         TL0 = 0x00;
  31.                         u++;
  32.                         if(u>=20)
  33.                         {
  34.                                 P0=Digitron[n];       
  35.                                 n++;
  36.                         }
  37.                                                
  38.                 }
  39.         }

  40. }

  41.        
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:70012 发表于 2014-12-19 11:34 | 只看该作者
TH0=0X3C;
TL0=0XB0;

你那个u》=20     不需要重置(u=0)值吗    会跑飞的

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:66032 发表于 2014-12-19 11:34 | 只看该作者
TH0 = 0x3C;
TL0 = 0xb0;

   if(u>=20)
                        {
                                 u=0;
                                P0=Digitron[n];        
                                n++;
                                if (n>=15)n=0;
                        }

评分

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

查看全部评分

回复

使用道具 举报

地板
ID:65770 发表于 2014-12-19 21:23 | 只看该作者
mqwu 发表于 2014-12-19 11:34
TH0 = 0x3C;
TL0 = 0xb0;

这里U为什么要等赋0
回复

使用道具 举报

5#
ID:63997 发表于 2014-12-19 21:55 | 只看该作者
定时器0 不是自动从装的吗 不需要这样写吧 一般的定时器使用的时候 写法和你的不一样哦

#include <reg51.h>

sbit a_138=P2^2;

sbit b_138=P2^3;

sbit c_138=P2^4;

unsigned int u;

unsigned char code Digitron []=

{

        0x3f,0x06,0x5b,0x4f,0x66,

        0x6d,0x7d,0x07,0x7f,0x6f,

        0x77,0x7c,0x39,0x5e,0x79,

        0x71

};


//*****************定时器初始化********************//
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0FF;
    TL0 = 0x9C;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
//***************定时器函数**********************
void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x0FF;
    TL0 = 0x9C;
    u++;
}

void main(void)
{
    unsigned int n;
        InitTimer0();
        a_138=0;
        b_138=0;
        c_138=0;
        while(1)
        {
                if(u>=20)        //经过20个50ms 的时间后
                {
                        u=0;        //这一句必须有 定时器定时50ms  没50ms u自加一次 当加到20次后是一秒钟 此时u需要置零 进行下一个循环 就像秒钟走到59 下一次 就是00了
                        P0=Digitron[n];        
                        n++;
                }
        }
}

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:70653 发表于 2014-12-20 11:27 | 只看该作者
        TMOD = 0x01;
        TH0 = 0x3C;
        TL0 = 0xB0;
        TR0 = 1;
        
        a_138=0;
        b_138=0;
        c_138=0;
        
        while(1)
        {
                if(TF0 == 1)
                {
                        TF0 = 0;
                        TH0 = 0x3C;
                        TL0 = 0xB0;
                        u++;
                        if(u==20)
                        {
                                P0=Digitron[n];        
                                n++;
                                u=0;
                        }

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:68416 发表于 2014-12-22 18:06 | 只看该作者
回复

使用道具 举报

8#
ID:71996 发表于 2015-1-21 11:16 | 只看该作者
回复

使用道具 举报

9#
ID:72662 发表于 2015-1-22 22:38 | 只看该作者
用汇编算了吧
回复

使用道具 举报

10#
ID:66137 发表于 2015-1-22 22:48 | 只看该作者
好像还不能直接定时1秒钟那么长时间吧,得定个50毫秒再判断进入20次即为1秒。

评分

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

查看全部评分

回复

使用道具 举报

11#
ID:339654 发表于 2021-10-26 22:13 | 只看该作者
定时器初始化有问题,可以去STC提供的ISP下载软件上面看看例程
回复

使用道具 举报

12#
ID:57657 发表于 2021-10-26 23:01 | 只看该作者
12Mhz晶振定时器定一次最长65536微秒。
回复

使用道具 举报

13#
ID:964308 发表于 2021-11-1 16:22 来自手机 | 只看该作者
不对吧,定时器就算最长时间也只有65535us,也就是0.065535s,不能定到1s的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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