找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AT89C52仿真为什么不能实现1秒啊,求大神!慢一点点

  [复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
sbit A = P1^0;
sbit C = P1^1;
sbit E = P1^2;
unsigned char code LedChar[]=
{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,
0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E
};
void main()
{
unsigned char cnt = 0;
unsigned char sec = 0;
   E = 0;
   C = 0;
   A = 0;
EA = 1;
ET0 = 1;
TMOD = 0X01;
TH0 = 0XB8;
TL0 = 0X00;
TR0 = 1;
while(1)
{
  if(TF0==1)
  {
   TF0 = 0;
   TH0 = 0XB8;
   TL0 = 0X00;
   cnt++;
   if(cnt>=50)
   {
        cnt = 0;
        P0 = LedChar[sec];
        sec++;
        if(sec>=16)
        sec = 0;
   }
  }
}
}

51hei截图20200129211855.png (50.87 KB, 下载次数: 92)

51hei截图20200129211855.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:235200 发表于 2020-1-30 09:51 | 只看该作者
定时计数器改用中断方式或者修改TH0和TL0的值(慢改大,快改小)
回复

使用道具 举报

板凳
ID:660069 发表于 2020-1-30 10:20 | 只看该作者
csmyldl 发表于 2020-1-30 09:51
定时计数器改用中断方式或者修改TH0和TL0的值(慢改大,快改小)

我还没有学中断,我看视频一样的程序,人家的可以实现1s,但是他直接用的板子,我这个仿真不知道为啥慢0.几秒,求大神指点
回复

使用道具 举报

地板
ID:660069 发表于 2020-1-30 10:23 | 只看该作者
csmyldl 发表于 2020-1-30 09:51
定时计数器改用中断方式或者修改TH0和TL0的值(慢改大,快改小)

10秒的话慢了2.7秒左右
回复

使用道具 举报

5#
ID:685478 发表于 2020-1-30 10:43 | 只看该作者
你好,你的TH0应该是B1,TL0应该是E0,才是20ms,然后cnt=50的时候才是1秒
回复

使用道具 举报

6#
ID:642838 发表于 2020-1-30 12:03 | 只看该作者
估计晶振频率没选对,这个对应的11.059M晶振
回复

使用道具 举报

7#
ID:660069 发表于 2020-1-30 13:37 | 只看该作者
王可乐_ 发表于 2020-1-30 10:43
你好,你的TH0应该是B1,TL0应该是E0,才是20ms,然后cnt=50的时候才是1秒

改成您这个又快了一点
回复

使用道具 举报

8#
ID:660069 发表于 2020-1-30 13:38 | 只看该作者
odfggf 发表于 2020-1-30 12:03
估计晶振频率没选对,这个对应的11.059M晶振

晶振是11.0592  不知道咋的就不对
回复

使用道具 举报

9#
ID:213173 发表于 2020-1-31 08:46 | 只看该作者
你的程序定时器是按晶振频率11.0592MHz设置20ms的,仿真时也得把单片机属性里的时钟设置一致,否则当然不准。


回复

使用道具 举报

10#
ID:152785 发表于 2020-1-31 21:22 | 只看该作者
用仿真做时钟,跑不准的因素太多.先不说运行仿真的硬件因素,晶振就是一大问题,51单片机不使用定时计数器做时钟,本身误差就很大.
回复

使用道具 举报

11#
ID:660069 发表于 2020-2-4 18:44 | 只看该作者
v115488 发表于 2020-1-31 21:22
用仿真做时钟,跑不准的因素太多.先不说运行仿真的硬件因素,晶振就是一大问题,51单片机不使用定时计数器做时 ...

谢谢您
回复

使用道具 举报

12#
ID:660069 发表于 2020-2-4 18:45 | 只看该作者
wulin 发表于 2020-1-31 08:46
你的程序定时器是按晶振频率11.0592MHz设置20ms的,仿真时也得把单片机属性里的时钟设置一致,否则当然不准 ...

谢谢您,参数是对的,就是不行
回复

使用道具 举报

13#
ID:240034 发表于 2020-2-4 19:54 | 只看该作者
if(cnt>=50)   50改成49,
回复

使用道具 举报

14#
ID:696129 发表于 2020-3-3 16:21 | 只看该作者
仿真和实际时间不一样,和你当前的CPU的运行情况有关
回复

使用道具 举报

15#
ID:407089 发表于 2020-3-3 17:51 | 只看该作者
试一下看看
  1. #include<reg52.h>
  2. sbit A = P1^0;
  3. sbit C = P1^1;
  4. sbit E = P1^2;
  5. unsigned char code LedChar[]=
  6. {0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,
  7. 0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E
  8. };

  9. void main()
  10. {
  11.         unsigned char cnt = 0;
  12.         unsigned char sec = 0;
  13.         E = 0;
  14.         C = 0;
  15.         A = 0;
  16.         EA = 1;
  17.         ET0 = 1;
  18.         TMOD = 0X01;
  19.         TH0 = 0XB8;
  20.         TL0 = 0X00;
  21.         TR0 = 1;

  22.         while(1);
  23. }

  24. void timer0_service(void) interrupt 1
  25. {
  26.         TH0 = 0XB8;
  27.         TL0 = 0X00;
  28.         cnt++;
  29.         if(cnt==50)
  30.         {
  31.                 cnt = 0;
  32.                 P0 = LedChar[sec];
  33.                 sec++;
  34.                 if(sec==16)sec = 0;
  35.         }
  36. }
复制代码



回复

使用道具 举报

16#
ID:687694 发表于 2020-3-4 16:27 | 只看该作者
修改89C52芯片属性的晶振频率。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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