找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4031|回复: 5
收起左侧

单片机程序编译提示没有错误,但是烧录到C51就不能运行了

[复制链接]
ID:723125 发表于 2020-4-6 22:14 | 显示全部楼层 |阅读模式
  1. #include<reg52.h>
  2. sbit BY1=P0^0;
  3. sbit BY2=P0^1;
  4. int a[4]={0xfe,0xfd,0xfb,0xf7};    //正传
  5. int b[4]={0xf7,0xfb,0xfd,0xfe};    //反转

  6. void latetime(int t)   //延时函数
  7. {
  8. char j;
  9. while(t--)
  10. {
  11. for(j=0;j<125;j++);
  12. }
  13. }

  14. void moter()   //电机正传
  15. {
  16. int i;
  17. while(1)
  18. {
  19. for(i=0;i!=4;i++)
  20. {
  21. P1=a[i];
  22. latetime(5);
  23. }
  24. }
  25. }


  26. void retom()   //电机反转
  27. {
  28. int o    ;
  29. while(1)
  30. {
  31. for(o=0;o!=4;o++)
  32. {
  33. P1=b[o];
  34. latetime(5);
  35. }
  36. }
  37. }


  38. void stop()     //电机停止
  39. {

  40. while(1)
  41. {
  42.   P1=0xff;
  43. }
  44. }




  45. void main()         //主函数
  46. {
  47. if (BY1==0)     //按下P0.0的开关
  48. {
  49.     moter();
  50.    while(BY1!=0)    ;
  51.    ;
  52. }
  53. if (((BY1)==(BY2))==1)    // 同时按下或同时断开
  54. {
  55.    stop() ;
  56.    while((BY1==0)&&(BY2==0)==0);
  57.    ;
  58. }
  59. if (BY2==0)       //按下P0.1的开关
  60. {
  61.     retom() ;
  62.    while(BY2!=0);
  63.    ;
  64. }
  65. }
复制代码
无标题.png
回复

使用道具 举报

ID:235200 发表于 2020-4-7 08:04 | 显示全部楼层
编译没问题,只是程序语法没错,控制电机动作,需根据电机运行的电压和电流提供后才能看到现象
回复

使用道具 举报

ID:164602 发表于 2020-4-7 08:25 | 显示全部楼层
编译没有错误,只能说你的语法是正确的,不能说明你的程序功能是正确的。
从你的程序上简单地看,就知道你的按键程序是有大问题的。这个问题很简单,但你不知道,所以没能从程序中体现出来。
机械按键操作,是需要“消抖”的。问题给你找出来了,开始学习吧,祝成功
回复

使用道具 举报

ID:452950 发表于 2020-4-7 08:35 | 显示全部楼层
编译通过不等于功能可以实现,同时按下那段有问题,刚上电BY1肯定等于BY2,进去就死循环了
回复

使用道具 举报

ID:723125 发表于 2020-4-30 22:55 | 显示全部楼层
HC6800-ES-V2.0 发表于 2020-4-7 08:25
编译没有错误,只能说你的语法是正确的,不能说明你的程序功能是正确的。
从你的程序上简单地看,就知道你 ...

感谢解答
回复

使用道具 举报

ID:624817 发表于 2020-5-1 13:37 | 显示全部楼层
编译器只检测语法   应该是你的子函数里面的while没有停止循环的条件 while(1)一直在循环     
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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