找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机里 error c141语法错误该怎么改

[复制链接]
跳转到指定楼层
楼主
ID:165754 发表于 2017-2-21 15:55 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
                  #define off 1          //高电平时灯为关闭状态
                  #define on 0          //低电平时灯为开启状态
                  bit flag1 = 0;  //接收标志位
                  bit flag2 = 0;
                  bit flag3 = 0;
                  sbit led = P1^7;
                  void main()
                  {
                  TMOD = 0x21;
                  SCON = 0x90;           //串行方式2
                  SP = 0x07;           //初始推栈指针
                  IE = 0x90;           //允许串行中断
                  PCON = 0;
                  TCON = 0;
                  led = off;
                  while(1)
                   {
                  PCON = 1;
                   }
                  //当连续接收到字符串cccc5555时,将灯开启
        22行          intcom_isr() interrupt 4         //串口中断
        23行           {
                   unsigned int temp = 0;
                   temp = SBUF;
                   RI = 0;
                   if(temp == 0x0cc) //收到cc字符
                     {
                         if(flag1 == 0)           //如果是第一次收到cc,置位flag1
                           {
                           flag1 = 1;
                           }
                         else
                           {
                           if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
                             {
                                 flag1 = 0;
                                 flag2 = 0;
                                 flag3 = 0;
                                 led = off;
                                 }
                           else                //接收到两次cc时,置位第二个标志位
                             {
         flag2 = 1;
                                 }
                           }
                         }
                         else if(temp == 0x55)
                          {
                          if(flag1 == 1&&flag2 == 1)  //如果收到55,并且之前已经收到cccc
                            {
                                 if(flag3 == 0)                //如果第一次接收到55
                                 flag3 = 1;                       
                                  else                //如果已经收到一次55
                                  {
                                  led = on;
                                  flag1 = 0;
                                  flag2 = 0;
                                  flag3 = 0;
                                  }
                                }
                          else       //如果收到的数据为乱序
                            {
                     flag1 = 0;
                                 flag2 = 0;
                                 flag3 = 0;
                                 led = off;
                                }
                          }
                          else     //当收到其他字符串
                          {
                                   flag1 = 0;
                                 flag2 = 0;
                                 flag3 = 0;
                                 led = off;
                          }
                           }
                  }
       

Error c141: syntax error near ‘{’         
Error c141: syntax error near ‘interrupt’
Warning        c206: ‘intcom_isr’ :missing function prototype

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:91114 发表于 2017-2-21 17:55 | 只看该作者
语法错误,中断函数写在主函数外,不要写在主函数里。

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:165733 发表于 2017-2-21 18:49 | 只看该作者
不能在函数内定义函数,中断服务函数放到主函数外面定义

评分

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

查看全部评分

回复

使用道具 举报

地板
ID:155507 发表于 2017-2-21 19:10 | 只看该作者
  1. #include<reg52.h>
  2. #define off 1          //高电平时灯为关闭状态
  3. #define on 0          //低电平时灯为开启状态
  4. bit flag1 = 0;  //接收标志位
  5. bit flag2 = 0;
  6. bit flag3 = 0;
  7. sbit led = P1^7;

  8. void main()
  9. {
  10.         TMOD = 0x21;
  11.         SCON = 0x90;           //串行方式2
  12.         SP = 0x07;           //初始推栈指针
  13.         IE = 0x90;           //允许串行中断
  14.         PCON = 0;
  15.         TCON = 0;
  16.         led = off;
  17.         while(1)
  18.         {
  19.                 PCON = 1;
  20.         }
  21.        
  22. }
  23. //当连续接收到字符串cccc5555时,将灯开启
  24. intcom_isr() interrupt 4         //串口中断
  25. {
  26.         unsigned int temp = 0;
  27.         temp = SBUF;
  28.         RI = 0;
  29.         if(temp == 0x0cc) //收到cc字符
  30.         {
  31.                 if(flag1 == 0)           //如果是第一次收到cc,置位flag1
  32.                 {
  33.                         flag1 = 1;
  34.                 }
  35.                 else
  36.                 {
  37.                         if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
  38.                         {
  39.                                 flag1 = 0;
  40.                                 flag2 = 0;
  41.                                 flag3 = 0;
  42.                                 led = off;
  43.                         }
  44.                         else                //接收到两次cc时,置位第二个标志位
  45.                         {
  46.                                 flag2 = 1;
  47.                         }
  48.                 }
  49.         }
  50.         else if(temp == 0x55)
  51.         {
  52.                 if(flag1 == 1&&flag2 == 1)  //如果收到55,并且之前已经收到cccc
  53.                 {
  54.                         if(flag3 == 0)                //如果第一次接收到55
  55.                         flag3 = 1;                        
  56.                         else                //如果已经收到一次55
  57.                         {
  58.                                 led = on;
  59.                                 flag1 = 0;
  60.                                 flag2 = 0;
  61.                                 flag3 = 0;
  62.                         }
  63.                 }
  64.                 else       //如果收到的数据为乱序
  65.                 {
  66.                         flag1 = 0;
  67.                         flag2 = 0;
  68.                         flag3 = 0;
  69.                         led = off;
  70.                 }
  71.         }
  72.         else     //当收到其他字符串
  73.         {
  74.                 flag1 = 0;
  75.                 flag2 = 0;
  76.                 flag3 = 0;
  77.                 led = off;
  78.         }
  79. }

复制代码

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:149988 发表于 2017-2-22 09:11 | 只看该作者

RE: 51单片机里 error c141语法错误该怎么改

#include<reg52.h>
#define off 1          //高电平时灯为关闭状态
#define on 0          //低电平时灯为开启状态
bit flag1 = 0;  //接收标志位
bit flag2 = 0;
bit flag3 = 0;
sbit led = P1^7;
void main()
{
  TMOD = 0x21;
  SCON = 0x90;           //串行方式2
  SP = 0x07;           //初始推栈指针
  IE = 0x90;           //允许串行中断
  PCON = 0;
  TCON = 0;
  led = off;
  while(1)
  {
    PCON = 1;
  }
}
  //当连续接收到字符串cccc5555时,将灯开启22行
intcom_isr() interrupt 4         //串口中断23行           
{
  unsigned int temp = 0;
  temp = SBUF;
  RI = 0;
  if(temp == 0x0cc) //收到cc字符
  {
    if(flag1 == 0)           //如果是第一次收到cc,置位flag1
    {
      flag1 = 1;
    }
    else
    {
      if(flag2 == 1)//如果已经接收到两次cc,说明接收字符为非法,取消所有标志位
      {
        flag1 = 0;
        flag2 = 0;
        flag3 = 0;
        led = off;
      }
      else                //接收到两次cc时,置位第二个标志位
      {
        flag2 = 1;
      }
    }
  }
  else if(temp == 0x55)
  {
    if(flag1 == 1&&flag2 == 1)  //如果收到55,并且之前已经收到cccc
    {
      if(flag3 == 0)                //如果第一次接收到55
      flag3 = 1;                        
      else                //如果已经收到一次55
      {
        led = on;
        flag1 = 0;
        flag2 = 0;
        flag3 = 0;
      }
    }
    else       //如果收到的数据为乱序
    {
      flag1 = 0;
      flag2 = 0;
      flag3 = 0;
      led = off;
    }
  }
  else     //当收到其他字符串
  {
    flag1 = 0;
    flag2 = 0;
    flag3 = 0;
    led = off;
  }
}

评分

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

查看全部评分

回复

使用道具 举报

6#
ID:165754 发表于 2017-2-22 14:33 来自手机 | 只看该作者
1783695984 发表于 2017-2-21 18:49
不能在函数内定义函数,中断服务函数放到主函数外面定义

谢谢,编译成功了
回复

使用道具 举报

7#
ID:165754 发表于 2017-2-22 14:34 来自手机 | 只看该作者
angmall 发表于 2017-2-21 19:10

谢谢,编译成功了
回复

使用道具 举报

8#
ID:165754 发表于 2017-2-22 14:34 来自手机 | 只看该作者
不倒翁.WZT 发表于 2017-2-22 09:11
#include
#define off 1          //高电平时灯为关闭状态
#define on 0          //低电平时灯为开启状 ...

谢谢,编译成功了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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