剛學定時器,想寫一個程序,讓單片機數碼管每秒顯示的數字加1,用的定時器定時,但是現在發現這個速度比較慢,我用手機一起計數發現手機每經過10s,單片機就會慢2s,就是手機秒表顯示10的時候,單片機數碼管顯示8,有沒有人幫我看一下是哪里的問題?單片機機器周期是1.085us。數碼管顯示數字全對,感覺只有定時器那里有問題。
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit WE=P2^7;
- sbit DU=P2^6;
- uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void delay(uchar x) //@11.0592MHz
- {
- unsigned char i, j;
- while(x>0)
- {
- _nop_();
- i = 2;
- j = 199;
- do
- {
- while (--j);
- } while (--i);
- x--;
- }
- }
- void display(uchar z)
- {
- uchar ge,shi,bai;
- ge=z%10;
- shi=z%100/10;
- bai=z/100;
- P0=0XFF;
- WE=1;
- P0=0XFB;
- WE=0;
- DU=1;
- P0=table[ge];
- DU=0;
- delay(5);
- P0=0XFF;
- WE=1;
- P0=0XFD;
- WE=0;
- DU=1;
- P0=table[shi];
- DU=0;
- delay(5);
- P0=0XFF;
- WE=1;
- P0=0XFE;
- WE=0;
- DU=1;
- P0=table[bai];
- DU=0;
- delay(5);
- }
- void timer0Init()//50ms
- {
- TR0=1;
- TMOD=0x01;
- TH0=(65535-46082)/256;
- TL0=(65535-46082)%256;
- }
- void main()
- {
- uchar msec,sec;
- timer0Init();
- while(1)
- {
- if(TF0==1)
- {
- msec++;
- TF0=0;
- TH0=(65536-46080)/256;
- TL0=(65536-46080)%256;
-
- }
- if(msec==20)
- {
- sec++;
- msec=0;
- }
- display(sec);
- }
- }
復制代碼
|