找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7086|回复: 24
收起左侧

keil编译错误missing';' before'i'

  [复制链接]
ID:268064 发表于 2018-5-23 13:31 | 显示全部楼层 |阅读模式
20黑币
missing';' before'i'
大神们那里出问题

FL4S}69E_WZ)95I0QZL](%6.png
7XK)DD}JF_O)I17U~MWXH4P.png
回复

使用道具 举报

ID:319344 发表于 2018-5-23 19:28 | 显示全部楼层
有问题,如果你这个for循环是实现延时,那肯定需要调用啊,调用的话你不是写的子函数,也不是放在main内,你把它写成子函数问题就解决了
回复

使用道具 举报

ID:296970 发表于 2018-5-23 20:50 | 显示全部楼层
你这for是死循环吗
回复

使用道具 举报

ID:295783 发表于 2018-5-24 09:17 | 显示全部楼层
你这段程序加的位置不对
可以写成子函数
希望对你有帮助
回复

使用道具 举报

ID:307829 发表于 2018-5-24 10:26 | 显示全部楼层
这个for语句一般不直接写在定义函数下面的,而且你这个for函数是个死循环,0开始减的话永远到不了200啊,如果函数是为了延时的话可以写一个delay函数
回复

使用道具 举报

ID:337301 发表于 2018-5-24 14:46 | 显示全部楼层
这个程序段的位置不对,应该写在一个子程序里面
回复

使用道具 举报

ID:331575 发表于 2018-5-24 18:29 来自手机 | 显示全部楼层
for函数放置位置不对
回复

使用道具 举报

ID:268016 发表于 2018-5-24 20:26 | 显示全部楼层
我认为程序段的位置确实不对,应该位于某个子程序中。但死循环,我觉得不是,是可以执行一次的。执行一次后就脱离循环了。

评分

参与人数 1黑币 +8 收起 理由
hedianzi + 8 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:155507 发表于 2018-5-24 23:45 | 显示全部楼层
你写漏了
应该位于delay()延时子程序中。

  1. #include <reg51.h>
  2. #include "AT24C02.h"
  3. sbit AT24C02_SDA = P3^6;        //定义数据线
  4. sbit AT24C02_SCL = P3^7;        //定义时钟线

  5. void delay()
  6. {
  7.         uchar i;
  8.         for(i=0; i<200; i--);
  9. }
  10. void I2C_Start()
  11. {
  12.         AT24C02_SDA = 1;   delay();
  13.         AT24C02_SCL = 1;   delay();
  14.         AT24C02_SDA = 0;   delay();
  15.         AT24C02_SCL = 0;
  16. }                      //钳位I2C总线,准备发送数据
复制代码

回复

使用道具 举报

ID:328769 发表于 2018-5-25 01:51 来自手机 | 显示全部楼层
对,。那个肯定是延时函数。你抄low了
回复

使用道具 举报

ID:168295 发表于 2018-5-25 02:37 | 显示全部楼层
uchar是无符号字符型变量类型错误 i--后i < 0,属于
回复

使用道具 举报

ID:168295 发表于 2018-5-25 02:41 | 显示全部楼层
angmall 发表于 2018-5-24 23:45
你写漏了
应该位于delay()延时子程序中。

变量i是uchar(无符号字符型的),当执行i--后,i < 0,属于变量类型错误
回复

使用道具 举报

ID:268016 发表于 2018-5-25 07:42 | 显示全部楼层
uchar变量 i=0 后i-- 结果i=0xff ,是255,不是负数,不存在变量类型错误之说

评分

参与人数 1黑币 +8 收起 理由
hedianzi + 8 赞一个!

查看全部评分

回复

使用道具 举报

ID:337790 发表于 2018-5-25 08:37 | 显示全部楼层

这个for语句一般不直接写在定义函数下面的,而且你这个for函数是个死循环,0开始减的话永远到不了200啊,如果函数是为了延时的话可以写一个delay函数
回复

使用道具 举报

ID:141132 发表于 2018-5-25 11:38 | 显示全部楼层
根据错误提示来看,你 uchar i ;这个语句后面缺了一个分号,要知道分号必须紧贴最后一个字符,改成下面这样应该就没问题了 uchar i;
回复

使用道具 举报

ID:338204 发表于 2018-5-25 17:02 | 显示全部楼层
应该是for(i=0;i<200;i++);
回复

使用道具 举报

ID:338264 发表于 2018-5-25 18:18 | 显示全部楼层
这个for循环没有写在一个延时函数里面比如void delay(){for(i=0;<200;i--);}。
回复

使用道具 举报

ID:338264 发表于 2018-5-25 18:20 | 显示全部楼层
写一个像这样的函数void delay (int x) { int i,j; for (i=0;i<x;i++)  for(j=0;j<600;j++); },然后在主程里面调用
回复

使用道具 举报

ID:338264 发表于 2018-5-25 18:21 | 显示全部楼层
写一个这样的延时函数void delay (int x) { int i,j; for (i=0;i<x;i++)  for(j=0;j<600;j++); },然后直接调用函数。
回复

使用道具 举报

ID:338273 发表于 2018-5-25 19:11 | 显示全部楼层
uchar 没有定义,define unsigned char uchar
回复

使用道具 举报

ID:331292 发表于 2018-5-25 20:48 | 显示全部楼层
你把uchar改为int试一试。
回复

使用道具 举报

ID:331292 发表于 2018-5-25 21:03 | 显示全部楼层
uchar预定义了吗?改成int试一试
回复

使用道具 举报

ID:338398 发表于 2018-5-25 21:28 | 显示全部楼层
这个for语句一般不直接写在定义函数下面的,而且你这个for函数是个死循环,0开始减的话永远到不了200啊,如果函数是为了延时的话可以写一个delay函数
回复

使用道具 举报

ID:338412 发表于 2018-5-25 21:59 | 显示全部楼层
i定义附初值为0,本身就小于200,改成大于200,i++,
回复

使用道具 举报

ID:390775 发表于 2018-9-4 18:26 | 显示全部楼层
你把 uchar i   ;
改为  uchar   i;  //把逗号“;”  与 ‘i’  中间不要有空格试下

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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