标题: 12M的晶振,定时器定了一秒钟,为什么那么快,高手给我看看啊,谢谢了 [打印本页]

作者: 董亚伟    时间: 2014-12-19 10:07
标题: 12M的晶振,定时器定了一秒钟,为什么那么快,高手给我看看啊,谢谢了
  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.        
复制代码


作者: 忠信1314    时间: 2014-12-19 11:34
TH0=0X3C;
TL0=0XB0;

你那个u》=20     不需要重置(u=0)值吗    会跑飞的
作者: mqwu    时间: 2014-12-19 11:34
TH0 = 0x3C;
TL0 = 0xb0;

   if(u>=20)
                        {
                                 u=0;
                                P0=Digitron[n];        
                                n++;
                                if (n>=15)n=0;
                        }
作者: 董亚伟    时间: 2014-12-19 21:23
mqwu 发表于 2014-12-19 11:34
TH0 = 0x3C;
TL0 = 0xb0;

这里U为什么要等赋0
作者: xueyunmicheng    时间: 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++;
                }
        }
}
作者: 来自火星的蜗牛    时间: 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;
                        }

作者: qazxcvbnmklp    时间: 2014-12-22 18:06

作者: felixno1    时间: 2015-1-21 11:16

作者: 磨叽磨叽    时间: 2015-1-22 22:38
用汇编算了吧
作者: woaidpj    时间: 2015-1-22 22:48
好像还不能直接定时1秒钟那么长时间吧,得定个50毫秒再判断进入20次即为1秒。
作者: weijoyer    时间: 2021-10-26 22:13
定时器初始化有问题,可以去STC提供的ISP下载软件上面看看例程
作者: npn    时间: 2021-10-26 23:01
12Mhz晶振定时器定一次最长65536微秒。
作者: dzc3458    时间: 2021-11-1 16:22
不对吧,定时器就算最长时间也只有65535us,也就是0.065535s,不能定到1s的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1