找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 387|回复: 8
收起左侧

请教,单片机程序加的延时后编译不过是什么原因?

[复制链接]
ID:28942 发表于 2024-2-9 14:38 | 显示全部楼层 |阅读模式
#include<reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;

void delay(uint16 x)
{
         uint8i,j;
         for(i= x; i > 0; i --)
                   for(j= 114; j > 0; j --);                 
}

void main()
{
         uint8b = 0, way = 0;
         while(1)
         {
                    if(way == 0)         
                           P0=1;
              //    delay(200); //编译不过?
                    else
                           P0=0;
                            delay(200);

         }

}

回复

使用道具 举报

ID:1109793 发表于 2024-2-9 19:53 | 显示全部楼层
if(){}else{},如果代码超过一句,需要增加大括弧的。比如你这样的后面的那个delay(200);实际上也不受else的约束
回复

使用道具 举报

ID:883242 发表于 2024-2-9 20:01 | 显示全部楼层
你指出的那句并不是编译不过的原因,后面的else才是编译不过的原因。把你写的这句注释掉能编译通过,并不是这句写错了。

要看出错的信息,不能凭空想象,瞎改只能改到编译通过,不能改成对的。
回复

使用道具 举报

ID:28942 发表于 2024-2-10 06:25 | 显示全部楼层
xiaobendan001 发表于 2024-2-9 19:53
if(){}else{},如果代码超过一句,需要增加大括弧的。比如你这样的后面的那个delay(200);实际上也不受else ...

谢谢您,受教了
回复

使用道具 举报

ID:28942 发表于 2024-2-10 06:27 | 显示全部楼层
Hephaestus 发表于 2024-2-9 20:01
你指出的那句并不是编译不过的原因,后面的else才是编译不过的原因。把你写的这句注释掉能编译通过,并不是 ...

谢谢您的指教
回复

使用道具 举报

ID:427868 发表于 2024-2-10 06:57 | 显示全部楼层
应该改为:
  1. while(1)
  2.          {
  3.              if(way == 0)         
  4.                  {
  5.                      P0=1;
  6.                     delay(200);
  7.                   }
  8.                     else
  9.                       {
  10.                          P0=0;
  11.                          delay(200);
  12.                         }
  13.          }
复制代码

回复

使用道具 举报

ID:161164 发表于 2024-2-10 21:39 | 显示全部楼层
2024-02-10_213428.png
回复

使用道具 举报

ID:69038 发表于 2024-2-10 22:17 | 显示全部楼层

列文虎克,赞!
回复

使用道具 举报

ID:1109793 发表于 2024-2-11 08:07 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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