找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16593|回复: 6
收起左侧

求助! hanjia.c(75): error C141: syntax error near 'void', expected '__asm'

[复制链接]
ID:412580 发表于 2019-2-9 21:32 | 显示全部楼层 |阅读模式
3黑币

#include "reg51.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

//-----------------------------------------------

/* define constants */
#define FOSC 11059200L

#define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode

/* define SFR */
sbit TEST_LED = P1^0;               //work LED, flash once per second
sbit pwm1 = P1^1;
sbit pwm2 = P1^2;
sbit pwm3 = P1^3;
sbit pwm4 = P1^4;
sbit k1=P1^5;
sbit k2=P1^6;
sbit k3=P1^7;
sbit k4=P2^0;
/* define variables */
WORD count;                         //1000 times counter
WORD a,b,c;
WORD time;
WORD p1,p2,p3,p4;
//-----------------------------------------------

/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
    TL0 = T1MS;                     //reload timer0 low byte
    TH0 = T1MS >> 8;                //reload timer0 high byte
    if (count++ == 100)               //1ms * 1000 -> 1s
    {
        count = 0;               //reset counter
        TEST_LED = ! TEST_LED;      //work LED flash
    }
                if (count<=p1)
                {
                  pwm1=0;               
                }
                else{pwm1=1;}
         if (count<=p2)
                {
                  pwm2=0;               
                }
                else{pwm2=1;}
                if (count<=p3)
                {
                  pwm3=0;        
                }
                else{pwm3=1;}
                if (count<=p4)
                {
                  pwm4=0;               
                }
                else{pwm4=1;}
//-----------------------------------------------

/* main program */
void main()
{
    while (1){
        if (k1==0)
                {
                        for(a=0;a++;a<10000)
                        {
                        if(a<5000)
                        {
                                if(k1==1)
                                {
                                  for(b=0;b++;b<10000)
                                        {
                                           if(k1==0)
                                                 {
                                                         p1=80;
                                                         p2=60;
                                                         p3=90;
                                                         p4=80;
                                                         TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
               TL0 = T1MS;                     //initial timer0 low byte
               TH0 = T1MS >> 8;                //initial timer0 high byte
               TR0 = 1;                        //timer0 start running
                                                         ET0 = 1;                        //enable timer0 interrupt
                                                         EA = 1;                         //open global interrupt switch
                                                         count = 0;                                                         //initial counter
                                                   b=10000;
                                                         a=10000;
                                                 }
                                                 else
                                                 {
                                                 a=10000;
                                                 b=10000;
                                                 }
                                        }
                                }
                        }
                        if(a>4999)
                        {
                                if(k3==0&&k1==0)
                                {
                                p1=100;
                                p2=60;
                                p3=90;
                                p4=80;
                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                TL0 = T1MS;                     //initial timer0 low byte
                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                TR0 = 1;                        //timer0 start running
                                ET0 = 1;                        //enable timer0 interrupt
                                EA = 1;                         //open global interrupt switch
                                count = 0;                      //initial counter
                                }
                                else
                                {
                                        if(k1==0)
                                        {
                                        p1=100;
                                        p2=80;
                                        p3=80;
                                        p4=100;
                                        TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                        TL0 = T1MS;                     //initial timer0 low byte
                                        TH0 = T1MS >> 8;                //initial timer0 high byte
                                        TR0 = 1;                        //timer0 start running
                                        ET0 = 1;                        //enable timer0 interrupt
                                        EA = 1;                         //open global interrupt switch
                                        count = 0;                      //initial counter
                                        }
                                }
                        }
                        
                        }
                        if (k3==0)
                        {
                                p1=100;
                                p2=0;
                                p3=0;
                          p4=100;
                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                TL0 = T1MS;                     //initial timer0 low byte
                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                TR0 = 1;                        //timer0 start running
                                ET0 = 1;                        //enable timer0 interrupt
                                EA = 1;                         //open global interrupt switch
                                count = 0;                      //initial counter
                        }
                        else
                        {
                        p1=100;
                        p2=0;
                        p3=0;
                        p4=0;TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                        TL0 = T1MS;                     //initial timer0 low byte
                        TH0 = T1MS >> 8;                //initial timer0 high byte
                        TR0 = 1;                        //timer0 start running
                        ET0 = 1;                        //enable timer0 interrupt
                        EA = 1;                         //open global interrupt switch
                        count = 0;                      //initial counter
                        }
                }
                else
                {
                        if (k2==0)
                        {
                                p1=50;
                                p2=100;
                                p3=0;
                                p4=0;
                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                TL0 = T1MS;                     //initial timer0 low byte
                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                TR0 = 1;                        //timer0 start running
                                ET0 = 1;                        //enable timer0 interrupt
                                EA = 1;                         //open global interrupt switch
                                count = 0;                      //initial counter
                        }
                        else
                        {
                                if (k3==0)
                                {
                                  p1=0;
                                        p1=40;
                                        p1=100;
                                        p1=0;
                                        TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                        TL0 = T1MS;                     //initial timer0 low byte
                                        TH0 = T1MS >> 8;                //initial timer0 high byte
                                        TR0 = 1;                        //timer0 start running
                                        ET0 = 1;                        //enable timer0 interrupt
                                        EA = 1;                         //open global interrupt switch
                                        count = 0;                      //initial counter
                          }
                                else
                                {
                                        if (k4==0)
                                        {
                                          p1=0;
                                                p2=30;
                                                p3=0;
                                                p4=100;
                                                TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
                                                TL0 = T1MS;                     //initial timer0 low byte
                                                TH0 = T1MS >> 8;                //initial timer0 high byte
                                                TR0 = 1;                        //timer0 start running
                                                ET0 = 1;                        //enable timer0 interrupt
                                                EA = 1;                         //open global interrupt switch
                                                count = 0;                      //initial counter
                                        }
                                }
                        }
                }
  }
}       //loop
}


最佳答案

查看完整内容

要养成规范书写的习惯。void tm0_isr() interrupt 1 using 1函数最后一行少了一个花括号,void main()函数最后一行多了一个花括号。
回复

使用道具 举报

ID:213173 发表于 2019-2-9 21:33 | 显示全部楼层
要养成规范书写的习惯。void tm0_isr() interrupt 1 using 1函数最后一行少了一个花括号,void main()函数最后一行多了一个花括号。
回复

使用道具 举报

ID:155507 发表于 2019-2-10 07:31 | 显示全部楼层
给你改了,对比一下就知道哪里错了。

  1. #include "reg51.h"

  2. typedef unsigned char BYTE;
  3. typedef unsigned int WORD;

  4. //-----------------------------------------------

  5. /* define constants */
  6. #define FOSC 11059200L

  7. #define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode

  8. /* define SFR */
  9. sbit TEST_LED = P1^0;               //work LED, flash once per second
  10. sbit pwm1 = P1^1;
  11. sbit pwm2 = P1^2;
  12. sbit pwm3 = P1^3;
  13. sbit pwm4 = P1^4;
  14. sbit k1=P1^5;
  15. sbit k2=P1^6;
  16. sbit k3=P1^7;
  17. sbit k4=P2^0;
  18. /* define variables */
  19. WORD count;                         //1000 times counter
  20. WORD a,b,c;
  21. WORD time;
  22. WORD p1,p2,p3,p4;
  23. //-----------------------------------------------

  24. /* Timer0 interrupt routine */
  25. void tm0_isr() interrupt 1 using 1
  26. {
  27.         TL0 = T1MS;                     //reload timer0 low byte
  28.         TH0 = T1MS >> 8;                //reload timer0 high byte
  29.         if (count++ == 100)               //1ms * 1000 -> 1s
  30.         {
  31.                 count = 0;               //reset counter
  32.                 TEST_LED = ! TEST_LED;      //work LED flash
  33.         }
  34.         if (count<=p1)
  35.         {
  36.                 pwm1=0;               
  37.         }
  38.         else{pwm1=1;}
  39.         if (count<=p2)
  40.         {
  41.                 pwm2=0;               
  42.         }
  43.         else{pwm2=1;}
  44.         if (count<=p3)
  45.         {
  46.                 pwm3=0;        
  47.         }
  48.         else{pwm3=1;}
  49.         if (count<=p4)
  50.         {
  51.                 pwm4=0;               
  52.         }
  53.         else{pwm4=1;}
  54.         //-----------------------------------------------
  55. } //<----------------- 这里错了  少这个
  56. /* main program */
  57. void main()
  58. {
  59.         while (1){
  60.                 if (k1==0)
  61.                 {
  62.                         for(a=0;a++;a<10000)
  63.                         {
  64.                                 if(a<5000)
  65.                                 {
  66.                                         if(k1==1)
  67.                                         {
  68.                                                 for(b=0;b++;b<10000)
  69.                                                 {
  70.                                                         if(k1==0)
  71.                                                         {
  72.                                                                 p1=80;
  73.                                                                 p2=60;
  74.                                                                 p3=90;
  75.                                                                 p4=80;
  76.                                                                 TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  77.                                                                 TL0 = T1MS;                     //initial timer0 low byte
  78.                                                                 TH0 = T1MS >> 8;                //initial timer0 high byte
  79.                                                                 TR0 = 1;                        //timer0 start running
  80.                                                                 ET0 = 1;                        //enable timer0 interrupt
  81.                                                                 EA = 1;                         //open global interrupt switch
  82.                                                                 count = 0;                                                         //initial counter
  83.                                                                 b=10000;
  84.                                                                 a=10000;
  85.                                                         }
  86.                                                         else
  87.                                                         {
  88.                                                                 a=10000;
  89.                                                                 b=10000;
  90.                                                         }
  91.                                                 }
  92.                                         }
  93.                                 }
  94.                                 if(a>4999)
  95.                                 {
  96.                                         if(k3==0&&k1==0)
  97.                                         {
  98.                                                 p1=100;
  99.                                                 p2=60;
  100.                                                 p3=90;
  101.                                                 p4=80;
  102.                                                 TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  103.                                                 TL0 = T1MS;                     //initial timer0 low byte
  104.                                                 TH0 = T1MS >> 8;                //initial timer0 high byte
  105.                                                 TR0 = 1;                        //timer0 start running
  106.                                                 ET0 = 1;                        //enable timer0 interrupt
  107.                                                 EA = 1;                         //open global interrupt switch
  108.                                                 count = 0;                      //initial counter
  109.                                         }
  110.                                         else
  111.                                         {
  112.                                                 if(k1==0)
  113.                                                 {
  114.                                                         p1=100;
  115.                                                         p2=80;
  116.                                                         p3=80;
  117.                                                         p4=100;
  118.                                                         TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  119.                                                         TL0 = T1MS;                     //initial timer0 low byte
  120.                                                         TH0 = T1MS >> 8;                //initial timer0 high byte
  121.                                                         TR0 = 1;                        //timer0 start running
  122.                                                         ET0 = 1;                        //enable timer0 interrupt
  123.                                                         EA = 1;                         //open global interrupt switch
  124.                                                         count = 0;                      //initial counter
  125.                                                 }
  126.                                         }
  127.                                 }
  128.                                
  129.                         }
  130.                         if (k3==0)
  131.                         {
  132.                                 p1=100;
  133.                                 p2=0;
  134.                                 p3=0;
  135.                                 p4=100;
  136.                                 TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  137.                                 TL0 = T1MS;                     //initial timer0 low byte
  138.                                 TH0 = T1MS >> 8;                //initial timer0 high byte
  139.                                 TR0 = 1;                        //timer0 start running
  140.                                 ET0 = 1;                        //enable timer0 interrupt
  141.                                 EA = 1;                         //open global interrupt switch
  142.                                 count = 0;                      //initial counter
  143.                         }
  144.                         else
  145.                         {
  146.                                 p1=100;
  147.                                 p2=0;
  148.                                 p3=0;
  149.                                 p4=0;TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  150.                                 TL0 = T1MS;                     //initial timer0 low byte
  151.                                 TH0 = T1MS >> 8;                //initial timer0 high byte
  152.                                 TR0 = 1;                        //timer0 start running
  153.                                 ET0 = 1;                        //enable timer0 interrupt
  154.                                 EA = 1;                         //open global interrupt switch
  155.                                 count = 0;                      //initial counter
  156.                         }
  157.                 }
  158.                 else
  159.                 {
  160.                         if (k2==0)
  161.                         {
  162.                                 p1=50;
  163.                                 p2=100;
  164.                                 p3=0;
  165.                                 p4=0;
  166.                                 TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  167.                                 TL0 = T1MS;                     //initial timer0 low byte
  168.                                 TH0 = T1MS >> 8;                //initial timer0 high byte
  169.                                 TR0 = 1;                        //timer0 start running
  170.                                 ET0 = 1;                        //enable timer0 interrupt
  171.                                 EA = 1;                         //open global interrupt switch
  172.                                 count = 0;                      //initial counter
  173.                         }
  174.                         else
  175.                         {
  176.                                 if (k3==0)
  177.                                 {
  178.                                         p1=0;
  179.                                         p1=40;
  180.                                         p1=100;
  181.                                         p1=0;
  182.                                         TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  183.                                         TL0 = T1MS;                     //initial timer0 low byte
  184.                                         TH0 = T1MS >> 8;                //initial timer0 high byte
  185.                                         TR0 = 1;                        //timer0 start running
  186.                                         ET0 = 1;                        //enable timer0 interrupt
  187.                                         EA = 1;                         //open global interrupt switch
  188.                                         count = 0;                      //initial counter
  189.                                 }
  190.                                 else
  191.                                 {
  192.                                         if (k4==0)
  193.                                         {
  194.                                                 p1=0;
  195.                                                 p2=30;
  196.                                                 p3=0;
  197.                                                 p4=100;
  198.                                                 TMOD |= 0x01;                    //set timer0 as mode1 (16-bit)
  199.                                                 TL0 = T1MS;                     //initial timer0 low byte
  200.                                                 TH0 = T1MS >> 8;                //initial timer0 high byte
  201.                                                 TR0 = 1;                        //timer0 start running
  202.                                                 ET0 = 1;                        //enable timer0 interrupt
  203.                                                 EA = 1;                         //open global interrupt switch
  204.                                                 count = 0;                      //initial counter
  205.                                         }
  206.                                 }
  207.                         }
  208.                 }
  209.         }   //loop
  210. }       //loop  <------- //main 这里错了
  211. //}   <--------------- 这里错了
复制代码
回复

使用道具 举报

ID:164602 发表于 2019-2-10 09:10 | 显示全部楼层
非常简单的错误:main()之前的函数少了一个},main()最后多了一个}而已。
看你的程序,好乱,出这样的错,很正常!!!!!
回复

使用道具 举报

ID:94031 发表于 2019-2-10 09:46 | 显示全部楼层
大括弧问题,把最下边 } 移到 main 上面就可以啦。
回复

使用道具 举报

ID:236982 发表于 2019-2-10 10:05 | 显示全部楼层
中断程序少了一个“}”,在void main前面+“}”即可解决
回复

使用道具 举报

ID:1004571 发表于 2022-2-12 22:51 | 显示全部楼层
void main前面+“}”即可解决,我也遇到相同的问题  解决了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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