为什么我的51单片机没有进入接收中断,而是不断的发送数据

2019-07-15 09:56发布



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

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

  4. //#define TXX        P3^0//模块的TXD
  5. //#define RXX P3^1
  6. //sbit busyIO=P3^2;       

  7. void Uart_Send_String(u8 *string);


  8. /*******************************************************************************
  9. * 函数名         :Usartinit()
  10. * 函数功能                   :设置串口
  11. * 输入           : 无
  12. * 输出                  : 无
  13. *******************************************************************************/
  14. void UsartInit()
  15. {
  16.         SCON=0X50;                        //设置为工作方式1
  17.         TMOD=0X20;                        //设置计数器工作方式2
  18.         PCON=0X80;                        //波特率加倍
  19.         TH1=0XF4;                                //计数器初始值设置,注意波特率是4800的
  20.         TL1=0XF4;
  21.         ES=1;                                                //打开接收中断
  22.         EA=1;                                                //打开总中断
  23.         TR1=1;                                        //打开计数器
  24. }
  25. void Delay_Us(u8 us)
  26. {
  27. while(us--);
  28. }

  29. void delay1ms(void)   //误差 0us
  30. {
  31.     unsigned char a,b,c;
  32.     for(c=1;c>0;c--)
  33.         for(b=142;b>0;b--)
  34.             for(a=2;a>0;a--);
  35. }

  36. /*******************************************************************************
  37. * 函 数 名       : main
  38. * 函数功能                 : 主函数
  39. * 输    入       : 无
  40. * 输    出             : 无
  41. *******************************************************************************/
  42. void main()
  43. {       
  44.         EA = 1;
  45.         ES = 1;
  46.         UsartInit();
  47.         while(1)
  48.         {

  49.         delay1ms();
  50.         Uart_Send_String("    ");
  51.         Uart_Send_String("play,0001,$");
  52.         Uart_Send_String("    ");
  53.         delay1ms();       
  54.         delay1ms();
  55.         }
  56.        
  57.         delay1ms();       


  58.         }  //        串口初始化
  59.                


  60. /*******************************************************************************
  61. * 函数名         : Usart() interrupt 4
  62. * 函数功能                  : 串口通信中断函数
  63. * 输入           : 无
  64. * 输出                  : 无
  65. *******************************************************************************/
  66. void Usart() interrupt 4  //这里有问题
  67. {
  68.         u8 a;
  69.         if(RI)
  70.         {
  71.                 a = SBUF;
  72.                 delay1ms();
  73.         }               
  74.         else
  75.         {while(!TI);
  76.         TI = 0;        }
  77. }

  78. void sendtouart(u8 dat)
  79. {
  80.          ES = 0;
  81.          TI = 0;
  82.          SBUF = dat;  
  83.          while(!TI);  //这里没有执行
  84.          TI = 0;
  85.          ES = 1;
  86. }

  87. void Uart_Send_String(u8 *string)
  88. {
  89.         while(*string)
  90.         {
  91.                 sendtouart(*string++);
  92.                 Delay_Us(5);
  93.         }
  94. }
复制代码

0条回答

一周热门 更多>