打印

求助!!关于51单片机定时器

[复制链接]
1503|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lin168335255|  楼主 | 2011-11-10 20:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
sbit latch1=P2^1;
sbit latch2=P2^2;
void delay(unsigned int t);
unsigned char weima[8]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char duanma[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char LED[]={0xcf,0xf3,0xfc,0xf3};
unsigned char tempdata[10];
void delay(unsigned int t);
void display(unsigned char firstbite,unsigned char num);
main(void)
{
unsigned int m=30,n,i=0;
P1=0xcf;
TMOD=0x10;
TH1=0x3c;      
  TL1=0xb0;         
  TR1=1;
while(1)
{
  if(TF1==1)
   {
    TF1=0;
    n++;
    TH1=0x3c;      
     TL1=0xb0;   
    if(n==20)
    {
     n=0;
     if(m>0) m--;
     if(m==0)
     {
         i++;
      P1=LED[i];
      if(i==3)i=0;
         m=30;
     }
   
     }
   }
    tempdata[0]=duanma[m/10];
   tempdata[1]=duanma[m%10];
    display(3,2);   
}
}
  void delay(unsigned int t)
{
while(t--);
}
void display(unsigned char firstbite,unsigned char num)
{
unsigned int i;
for(i=0;i<num;i++)
{
  P0=0;
  latch2=1;
  latch2=0;
  P0=weima[i+firstbite];
  latch1=1;
  latch1=0;
  P0=tempdata[i];
  latch2=1;
  latch2=0;
     delay(200);
}
}
这个程序的定时不准 我本来定的间隔是1s 结果运行时是1.04s左右,通过改初值也无法精确到一秒,总会多或少0.0几秒,请高手给看看是怎么回事?晶振是12MHZ的  谢谢

相关帖子

沙发
NE5532| | 2011-11-10 21:23 | 只看该作者
我看到一大堆跟定时器不相干的代码,先删干净了再来。

使用特权

评论回复
板凳
ayb_ice| | 2011-11-11 08:07 | 只看该作者
本帖最后由 ayb_ice 于 2011-11-11 11:04 编辑

//------------
// t0.c

void isr_t0(void) interrupt 1
{
    extern void reload_t0(void);
   
    reload_t0();
   
    other()....
}

//------------
// t0.asm
//---------------------------------------
// 系统定时器0初值重装载
//---------------------------------------
// void reload_t0(void);
    ?PR?reload_t0?SYSTEM SEGMENT CODE
    rseg    ?PR?reload_t0?SYSTEM
    $reguse reload_t0(a,psw)
    public  reload_t0
    T0_RELOAD   EQU     -1250   // 1.25MS*8=10MS
reload_t0:
        setb   c
        jbc     ea,$+3+1
        clr      c
        push    psw
        CLR     TR0
        MOV     A,TL0
        ADD     A,#LOW (T0_RELOAD + 7)
        MOV     TL0,A
        MOV     A,TH0
        ADDC    A,#HIGH (T0_RELOAD + 7)
        MOV     TH0,A
        SETB    TR0
        pop     psw
        mov     ea,c
        ret

使用特权

评论回复
地板
chenczy| | 2011-11-11 11:10 | 只看该作者
在网上随便就能找到个定时器程序,对比一下就知道问题在那了

使用特权

评论回复
5
冷血疯子鱼| | 2011-11-11 16:34 | 只看该作者
仿真时调试一下,装载时有时会这样,因为定时是一个累加的过程,个人见解

使用特权

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

本版积分规则

0

主题

12

帖子

1

粉丝