找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这是一个用步进电机做的点光源跟踪系统,在中断函数处出问题了。请大佬帮忙看看,谢谢

[复制链接]
跳转到指定楼层
楼主
ID:838591 发表于 2020-11-30 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个用步进电机做的点光源跟踪系统,同时要在数码管显示步进电机的旋转角度。在中断函数处出问题了。

  1. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

  2. typedef unsigned int u16;          //对数据类型进行声明定义
  3. typedef unsigned char u8;

  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;
  7. sbit A1=P1^0;
  8. sbit B2=P1^1;
  9. sbit C3=P1^2;
  10. sbit D4=P1^3;
  11. sbit leftright=P2^1;
  12. #define A_ON {A1=1;B2=0;C3=0;D4=0;}
  13. #define B_ON {A1=0;B2=1;C3=0;D4=0;}
  14. #define C_ON {A1=0;B2=0;C3=1;D4=0;}
  15. #define D_ON {A1=0;B2=0;C3=0;D4=1;}
  16. #define AB_ON {A1=1;B2=1;C3=0;D4=0;}
  17. #define BC_ON {A1=0;B2=1;C3=1;D4=0;}
  18. #define CD_ON {A1=0;B2=0;C3=1;D4=1;}
  19. #define DA_ON {A1=1;B2=0;C3=0;D4=1;}
  20. #define ABCD_OFF {A1=0;B2=0;C3=0;D4=0;}

  21. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  22.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

  23. u8 sec,min;
  24. u8 DisplayData[8];
  25. /*******************************************************************************
  26. * 函 数 名         : delay
  27. * 函数功能                   : 延时函数,i=1时,大约延时10us
  28. *******************************************************************************/
  29. void delay(u16 i)
  30. {
  31.         while(i--);        
  32. }
  33. void delay1(unsigned int i)        //步进电机延时用
  34. {
  35. while(--i);
  36. }
  37. /*******************************************************************************
  38. * 函 数 名         : Timer0Init
  39. * 函数功能                   : 定时器0初始化
  40. * 输    入         : 无
  41. * 输    出         : 无
  42. *******************************************************************************/
  43. void Timer0Init()
  44. {
  45.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  46.         TH0=0Xd8;        //给定时器赋初值,定时10ms
  47.         TL0=0Xf0;        
  48.         ET0=1;//打开定时器0中断允许
  49.         EA=1;//打开总中断
  50.         TR0=1;//打开定时器                        
  51. }


  52. /*******************************************************************************
  53. * 函 数 名         : DigDisplay
  54. * 函数功能                   : 数码管动态扫描函数,循环扫描8个数码管显示
  55. *******************************************************************************/
  56. void DigDisplay()
  57. {
  58.         u8 i;
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 switch(i)         //位选,选择点亮的数码管,
  62.                 {
  63.                         case(0):
  64.                                 LSA=1;LSB=1;LSC=1; break;//显示第7位
  65.                         case(1):
  66.                                 LSA=0;LSB=1;LSC=1; break;//显示第6位
  67.                         case(2):
  68.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位        
  69.                 }
  70.                 P0=DisplayData[i];//发送段码
  71.                 delay(100); //间隔一段时间扫描        
  72.                 P0=0x00;//消隐
  73.         }
  74. }

  75. void datapros()
  76. {
  77.         DisplayData[0]=smgduan[min/100];
  78.         DisplayData[1]=smgduan[(min/10)%10];
  79.         DisplayData[2]=smgduan[min%10];        

  80. }
  81. void leftright1(char a) //右转
  82. {
  83. unsigned char i;
  84. for(i=0;i<a;i++)
  85. {
  86. A_ON
  87. delay1(1500);
  88. sec--;
  89. B_ON
  90. delay1(1500);
  91. sec--;
  92. C_ON
  93. delay1(1500);
  94. sec--;
  95. D_ON
  96. delay1(1500);
  97. sec--;
  98. }
  99. }
  100. void leftright2(char a) //左转
  101. {
  102. unsigned char i;
  103. for(i=0;i<a;i++)
  104. {
  105. D_ON
  106. delay1(1500);
  107. sec++;
  108. C_ON
  109. delay1(1500);
  110. sec++;
  111. B_ON
  112. delay1(1500);
  113. sec++;
  114. A_ON
  115. delay1(1500);
  116. sec++;
  117. }
  118. }
  119. /*******************************************************************************
  120. * 函 数 名       : main
  121. * 函数功能                 : 主函数
  122. * 输    入       : 无
  123. * 输    出             : 无
  124. *******************************************************************************/
  125. void main()
  126. {        
  127.         Timer0Init();  //定时器0初始化
  128.                     leftright=1;
  129.         while(1)
  130.         {
  131. if(leftright==1)
  132. {
  133. leftright2(1);
  134. }
  135. if(leftright==0)
  136. {
  137. leftright1(1);
  138. }
  139.                 datapros();
  140.                 DigDisplay();                        
  141. }

  142. /*******************************************************************************
  143. * 函 数 名         : void Timer0() interrupt 1
  144. * 函数功能                   : 定时器0中断函数
  145. * 输    入         : 无
  146. * 输    出         : 无
  147. *******************************************************************************/
  148. void Timer0() interrupt 1(这里出错了)
  149. {
  150.         TH0=0Xd8;        //给定时器赋初值,定时10ms
  151.         TL0=0Xf0;
  152.         if(sec>=11)  //
  153.         {
  154.                 min++;
  155.                 if(sec<0)
  156.                 {
  157.                         min=0;
  158.                         if(min>360)
  159.                         {
  160.                                 min=0;
  161.                         }
  162.                 }        
  163.         }        
  164. }
复制代码

软件显示Build target 'Target 1'
compiling main.c...
MAIN.C(169): error C141: syntax error near 'void'
Target not created在最后一个中断函数处
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:258566 发表于 2020-11-30 11:08 | 只看该作者
c141 记号错误,
主函数最后加上一个花括号‘}’就可以编译。

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:278840 发表于 2020-11-30 11:14 | 只看该作者
沙发正解
回复

使用道具 举报

地板
ID:838591 发表于 2020-11-30 11:46 来自手机 | 只看该作者
cccc888 发表于 2020-11-30 11:08
c141 记号错误,
主函数最后加上一个花括号‘}’就可以编译。

谢谢,可以了
回复

使用道具 举报

5#
ID:851596 发表于 2020-11-30 11:53 来自手机 | 只看该作者
c141记号有问题 主函数最后少了一个} 加了应该就可以了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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