设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 3311|回复: 8
收起左侧

Virtual51单片机模拟器的定时器/计数器0模式(方式)3 存在BUG 并检测是否执行正确C源码

[复制链接]
发表于 2018-11-9 18:36:58 | 显示全部楼层 |阅读模式
本帖最后由 哒哒哒 于 2018-11-9 18:36 编辑

执行正确则3个LED交替闪烁,执行错误则2个LED交替闪烁,如下图同一个源码,两种不同的模拟器产生不同的模拟结果:
错误结果.png 正确结果.png



  1. #include "reg51.h"
  2. void delay250ms()   //@12Mhz
  3. {
  4.     unsigned char a,b,c;
  5.     for(c=11;c>0;c--)
  6.         for(b=92;b>0;b--)
  7.             for(a=122;a>0;a--);
  8. }


  9. bit is_virtual51(){        //定时器0模式3是否正确执行
  10. TMOD|=3;                //定时器0方式3,两个8位独立定时器/计数器(定时器1无此功能)
  11. TH0=0;                //TH0计数清零
  12. TR1=1;                //开定时器1的计数,由于定时器0方式3占用了定时器1的寄存器,所以TH0计数
  13. TR1=0;                //关闭计数

  14. return TH0 ?1:0;        //TH0没有计数则执行错误,否则正确
  15. }

  16. void main(){
  17.         P3=0;
  18.         if(is_virtual51()){        
  19.         while(1){                //执行正确(Proteus)
  20.         P2=0xE0;
  21.         delay250ms();
  22.         P2=0x07;
  23.         delay250ms();
  24.         }
  25.                 }
  26.         while(1){                 //执行错误(Virtual51)
  27.         P2=0xC0;
  28.         delay250ms();
  29.         P2=0x03;
  30.         delay250ms();
  31.         }

  32. }




复制代码

相关帖子

发表于 2018-11-9 20:56:38 | 显示全部楼层
这个bug来的措手不及
发表于 2018-12-20 13:11:15 | 显示全部楼层
看看吧哈哈哈
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-24 20:10 , Processed in 1.094063 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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