51单片机,无法进入串行口中断,求教

2019-07-15 18:22发布

main()中的check_gorge();可以传出一串“It's OK!”而void ser() interrupt 4中的check_gorge();什么也无法传出,也就是说无法进入串行口中断,求教这是什么原因?怎么解决?
  1. /*
  2.         agreement  =  0xff  +  ID_servo  +  ANGLE1  +  ANGLE2  +0xaa  
  3. */
  4. #include<reg51.h>
  5. #include<intrins.h>
  6. #include<stdio.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar count,angle;
  10. uchar ANGLE1,ANGLE2,ID_servo;
  11. uchar receive,step;
  12. uint flag_translate;
  13. sbit servo_01=P0^0;
  14. sbit servo_02=P0^1;
  15. sbit plus=P1^4;
  16. sbit minus=P1^5;
  17. //sbit dula=P2^6;
  18. //sbit wela=P2^7;
  19. /*void delayms(uint t)
  20. {
  21.         uint i,j;
  22.         for(i=t;t>0;t--)
  23.                 for(j=110;j>0;j--);
  24. } */
  25. void check_gorge();
  26. void init()
  27. {
  28.         TMOD=0x21;
  29.         SCON=0x50;
  30.         TH1=0xfd;
  31.         TL1=0xfd;
  32.         TH0=(65536-23)/256;
  33.         TL0=(65536-23)/256;
  34.         RI=1;
  35.         TR0=1;
  36.         TR1=1;
  37.         ET0=1;
  38.         ES=1;
  39.         EA=1;
  40. }
  41. void servo_time0() interrupt 1
  42. {
  43.         TH0=(65536-23)/256;
  44.         TL0=(65536-23)/256;
  45.         switch(ID_servo==1)
  46.         {
  47.                 case 1 :
  48.                         angle=ANGLE1*256+ANGLE2;
  49.                         if(count<angle)
  50.                                 servo_01=1;
  51.                         else
  52.                                 servo_01=0;
  53.                         count++;
  54.                         count=count%800;
  55.                         break;
  56.                 case 2 :
  57.                         angle=ANGLE1*256+ANGLE2;
  58.                         if(count<angle)
  59.                                 servo_02=1;
  60.                         else
  61.                                 servo_02=0;
  62.                         count++;
  63.                         count=count%800;
  64.                         break;
  65.         }               
  66. }
  67. void re_send(uchar receive)
  68. {
  69.         SBUF=receive;
  70.         while(!TI);
  71.         TI=0;
  72.         ES=1;
  73. }
  74. void check_gorge()
  75. {
  76.         ES=0;
  77.         TI=1;
  78.         puts("It's OK! ");
  79.         while(TI!=0);
  80.         TI=0;
  81.         ES=1;
  82. }
  83. //agreement  =  0xff  +  ID_servo  +  ANGLE1  +  ANGLE2  +0xaa
  84. void ser() interrupt 4
  85. {
  86.         check_gorge();
  87.         while(RI!=0);
  88.         RI=0;
  89.         receive=SBUF;
  90.         flag_translate=1;
  91. }
  92. void main()
  93. {
  94.         init();
  95.         check_gorge();
  96.         while(1)
  97.         {
  98.                 if(flag_translate==1)
  99.                 {
  100.                         ES=0;
  101.                         flag_translate=0;
  102.                         switch(step)
  103.                         {
  104.                                 case 0 :
  105.                                         if(receive==0xff)
  106.                                         {
  107.                                                 step++;
  108.                                                 re_send(receive);
  109.                                         }
  110.                                 else
  111.                                                 step=0;
  112.                                         break;
  113.                                 case 1 :
  114.                                         ID_servo=receive;
  115.                                         re_send(receive);
  116.                                         step++;       
  117.                                         break;
  118.                                 case 2 :
  119.                                         ANGLE1=receive;
  120.                                         re_send(receive);
  121.                                         step++;
  122.                                         break;
  123.                                 case 3 :
  124.                                         ANGLE2=receive;
  125.                                         re_send(receive);
  126.                                         step++;
  127.                                         break;
  128.                                 case 4 :
  129.                                         if(receive!=0xaa)
  130.                                                 puts("error ");
  131.                                         else
  132.                                                 re_send(receive);
  133.                                         step=0;
  134.                                 break;       
  135.                         }               
  136.                 ES=1;
  137.                 }                  
  138.         }
  139. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
as493428735
1楼-- · 2019-07-15 19:34
收藏啦,感觉好好的
阿信509
2楼-- · 2019-07-16 00:27
程序太复杂了,建议先到网上下个简单的程序,串口收到数据就点一个灯就行,你看看人家是怎么编的
木糖不够纯
3楼-- · 2019-07-16 01:04
程序挺多的,设置断点慢慢排查、、、、、、
fssq1993
4楼-- · 2019-07-16 04:07
求问楼主为什么我的只能调到0xf3 2400波特率才能正常传输,0xfc 9600就没用
lpfaivc
5楼-- · 2019-07-16 05:33
 精彩回答 2  元偷偷看……

一周热门 更多>