找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序写keil里面没有报错,生成hex文件就放在proteus里面,就是仿真不出来怎...

[复制链接]
跳转到指定楼层
楼主
这个就是模拟仿真控制电压输出波形的一个程序,用原先的hex文件是可以运行的,但是后面重新生成的hex文件放到仿真当中就没有用了,请问是怎么回事,有什么解决方法吗
程序及仿真图如下:


单片机源程序如下:
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define _nop_  _nop_()
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar a,flang;

  7. sbit U3CS=P2^4;        //DA引脚
  8. sbit U3WR=P2^5;
  9. sbit U2CS=P2^6;
  10. sbit U2WR=P2^7;
  11. sbit fudu_up=P1^2;        //幅度
  12. sbit fudu_dn=P1^3;        //幅度
  13. sbit L1=P2^0;
  14. sbit L2=P2^1;

  15. bit flag;
  16. uchar n=25;//幅度初始2.5v

  17. unsigned char code ledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  18.                                0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};        // 数码管编码
  19. uchar jj;
  20. uchar k;
  21. uint dingshi=0;
  22. uint SET_PL=50;
  23. uchar Tempho,Templo;
  24. uchar display_data[8];// 显示缓存                                                                                          
  25. void set_time();
  26. void timetoseg();  //数据转换成段码
  27. void delay(uint z)
  28. {
  29.    uint a,b;
  30.    for(a=z;a>0;a--)
  31.      for(b=20;b>0;b--);
  32. }
  33. void init()// 定时器初始化
  34. {
  35.         TMOD=0x01;
  36.   EA=1;
  37.         TR0=1;
  38.         ET0=1;
  39. }
  40. void key()
  41. {
  42.    if(fudu_up==0)//幅度控制
  43.     { delay(1);
  44.      if(fudu_up==0)
  45.       {      
  46.        n++;if(n==50)n=0;
  47.        P3=0XFF;
  48.        U3CS=1;_nop_;_nop_;//数据锁存                        
  49.        P3=n*5.1;//数据读入 幅度按一次0.1                                
  50.        U2CS=0;_nop_;_nop_; //数据写入弧度控制DA
  51.        U2CS=1;//DA数据锁存
  52.        U3CS=0;//恢复数据输出
  53.                          while(fudu_up==0);
  54.        }                  
  55.      }
  56.                 if(fudu_dn==0)//幅度控制-
  57.     { delay(1);
  58.      if(fudu_dn==0)
  59.       {
  60.                          if(n>2)n--;
  61.                                 else  n=1;                        
  62.        P3=0XFF;
  63.        U3CS=1;_nop_;_nop_;//数据锁存                        
  64.        P3=n*5.1;//数据读入 幅度按一次0.1                                
  65.        U2CS=0;_nop_;_nop_; //数据写入弧度控制DA
  66.        U2CS=1;//DA数据锁存
  67.        U3CS=0;//恢复数据输出
  68.                          while(fudu_dn==0);
  69.        }                  
  70.      }   
  71. }
  72. void set_time()//从新计算定时值
  73. {
  74.   dingshi=200;
  75.         Tempho =(65536-dingshi+15)/256;
  76.         Templo =(65536-dingshi+15)%256;
  77.         TH0=Tempho;
  78.         TL0=Templo;
  79. }
  80. void main()
  81. {
  82.    U3WR=0;
  83.    U2WR=0;
  84.    U3CS=1;
  85.    U2CS=1;
  86.     P3=n*5.1;//数据读入 幅度按一次0.1                                
  87.                  U2CS=0;_nop_;_nop_; //数据写入弧度控制DA
  88.                  U2CS=1;//DA数据锁存
  89.                  U3CS=0;//恢复数据输出
  90.                         flang=1;
  91.       set_time();
  92.                         init();
  93.         while(1)
  94.   {
  95.    key();        
  96.             //数码管扫描程序
  97.      //数据转换成段码
  98.                                 P0=ledcode[n/10]&0X7F;//幅度
  99.                                 L1=1;
  100.                           delay(5);
  101.                                 L1=0;               
  102.                           P0=ledcode[n%10];//幅度
  103.                                 L2=1;
  104.                           delay(5);
  105.                                 L2=0;
  106. }               
  107. }
  108. void time0() interrupt 1 //中断
  109. {  
  110.                  TH0=Tempho;
  111.                         TL0=Templo;        
  112.         if(flag==0)
  113.         {
  114.     a++;        
  115.           if(a==255)
  116.                 {
  117.                 flag=1;
  118.                 }
  119.         }
  120.         else
  121.         {
  122.            a--;        
  123.           if(a==0)
  124.                 {
  125.                  flag=0;
  126.                 }
  127.         }
  128.          P3=a;        // 加载波形码  
  129. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342822 发表于 2022-1-19 13:31 | 只看该作者
仿真完全没得问题可以运行(调试状态和HEX状态)
回复

使用道具 举报

板凳
ID:968470 发表于 2022-1-20 10:28 | 只看该作者
taotie 发表于 2022-1-19 13:31
仿真完全没得问题可以运行(调试状态和HEX状态)

但是就是我在仿真的时候,用hex文件仿真的时候就是没有效果,之前的hex文件进行仿真是没有问题的,就让我感到很奇怪
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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