永发信息网

89c51 protuse仿真时间是不是不准?

答案:1  悬赏:50  手机版
解决时间 2021-08-15 19:01
  • 提问者网友:斑駁影
  • 2021-08-15 04:44
RT.自己写了个表的程序.还没有设置按键载入数据.现在已经一分钟差3秒了.晶振是11.0592的.用中断算的1s大概差万分之几.不知道咋就这样了.实际如果做出来硬件会和protuse差多少啊?程序有点傻.新手上路.老鸟多指教..谢谢啦

程序见下:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char
uint s,m,h,k=8;uchar ns,nm,nh;
uchar code DSY_CODE[]={  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void Delay(uint x){  uchar i; while(x--) { for(i=0;i<120;i++); }}

void T0_time() interrupt 1{ TH0=(65536-45872)/256; TL0=(65536-45872)%256; ns++; if(ns==20) { ns=0; s++; nm++; } if(nm==60) { nm=0; m++; nh++; } if(nh==60) { nh=0; h++; if(h==24) { s=m=h=ns=nm=nh=0; } }
}
void main(){ TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1;
while(1) { for(s=0;s<60;) { P2=0x1f; P0=DSY_CODE[s%10]; Delay(k); P2=0x2f; P0=DSY_CODE[s/10]; Delay(k); P2=0x37 ; P0=DSY_CODE[m%10]; Delay(k); P2=0x3b; P0=DSY_CODE[m/10]; Delay(k); P2=0x3d; P0=DSY_CODE[h%10]; Delay(k); P2=0x3e; P0=DSY_CODE[h/10]; Delay(k); }  }}


最佳答案
  • 五星知识达人网友:行雁书
  • 2021-08-15 05:10
51用定时器做时钟的话建议使用12M晶振误差更小 如果想提高精度可以单独使用一个定时器专门处理定时 不过无论如何 51做时钟的误差还是挺大的 想日常使用的话可以加上专用时钟芯片 比如ds1302 5毛一个 精度也很高
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯