找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2107|回復: 3
收起左側

stc15w404as單片機串口發(fā)送程序問題

[復制鏈接]
ID:849913 發(fā)表于 2021-11-18 15:05 | 顯示全部樓層 |閱讀模式
這個程序運行后 串口調試助手應該能收到10個“m”才對 可是實際只能收到一個  弄了好長時間也搞不懂 希望各位大神能指導一下 十分感謝!
單片機源程序如下:
  1. #include "stc15.h"
  2. # include <intrins.h>
  3. #define S1_S0 0x40              //P_SW1.6
  4. #define S1_S1 0x80              //P_SW1.7
  5. #define FOSC 11059200L          //系統(tǒng)頻率
  6. #define BAUD 4800             //串口波特率
  7. sbit k=P1^2;
  8. unsigned char i;

  9. void delay(unsigned int i)
  10. {
  11.         while(i--);
  12. }

  13. void qie_huan()           //串口引腳選擇函數(shù)
  14. {
  15.       
  16. /*   ACC = P_SW1;
  17.     ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
  18.     P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
  19. */

  20.   ACC = P_SW1;
  21.   ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
  22.   ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
  23.   P_SW1 = ACC;  
  24. /*  
  25.   ACC = P_SW1;
  26.   ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=1
  27.   ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
  28.   P_SW1 = ACC;  
  29. */
  30. }

  31. void main()
  32. {
  33.     P0M0 = 0x00;
  34.     P0M1 = 0x00;
  35.     P1M0 = 0x00;
  36.     P1M1 = 0x00;
  37.     P2M0 = 0x00;
  38.     P2M1 = 0x00;
  39.     P3M0 = 0x00;
  40.     P3M1 = 0x00;
  41.     P4M0 = 0x00;
  42.     P4M1 = 0x00;
  43.     P5M0 = 0x00;
  44.     P5M1 = 0x00;
  45.     P6M0 = 0x00;
  46.     P6M1 = 0x00;
  47.     P7M0 = 0x00;
  48.     P7M1 = 0x00;
  49.     qie_huan();

  50.         SCON = 0x50;
  51.     T2L = (65536 - (FOSC/4/BAUD));   //設置波特率重裝值
  52.     T2H = (65536 - (FOSC/4/BAUD))>>8;
  53.     AUXR = 0x14;                //T2為1T模式, 并啟動定時器2
  54.     AUXR |= 0x01;               //選擇定時器2為串口1的波特率發(fā)生器
  55.     ES = 1;                     //使能串口1中斷
  56.     EA = 1;

  57.   while(1)
  58.   {
  59.     if(k==0)
  60.         {
  61.                 delay(1000);
  62.                 if(k==0)
  63.                 {
  64.                                         for(i=0;i<10;i++)
  65.                        {
  66.                                       SBUF='m';
  67.                             }
  68.                                 while(!k);      
  69.                 }
  70.         }


  71.   }
  72.       

  73. }

  74. /*----------------------------
  75. UART 中斷服務程序
  76. -----------------------------*/
  77. void Uart() interrupt 4
  78. {
  79.     if (RI)
  80.     {
  81.         RI = 0;                 //清除RI位
  82.         P0 = SBUF;              //P0顯示串口數(shù)據(jù)

  83.     }
  84.     if (TI)
  85.     {
  86.         TI = 0;                 //清除TI位

  87.     }
  88. }
復制代碼



回復

使用道具 舉報

ID:401564 發(fā)表于 2021-11-18 16:42 | 顯示全部樓層
串口發(fā)送之后是要等待發(fā)送完成的
大概是這樣的
void Uart1_Isr() interrupt 4        //串口1中斷函數(shù),這里要參考數(shù)據(jù)手冊來編寫代碼
{
             
        if(TI)                                          //如果是發(fā)送中斷觸發(fā),就處理發(fā)送中斷
                   {                          
                         TI=0;                           //發(fā)送中斷
                        busy=0;
                }  
        if(RI)
                {
                        RI=0;               
                }       
}

void Send_Out_COM(unsigned char COM)        //發(fā)送一個字節(jié)數(shù)據(jù)
{
        while(busy);                                                //等待上次發(fā)送完成,Busy在串口2完成發(fā)送后清除       
        busy=1;
        SBUF=COM;       
}
回復

使用道具 舉報

ID:213173 發(fā)表于 2021-11-18 21:12 | 顯示全部樓層
  1. #include "stc15.h"
  2. #include <intrins.h>
  3. #define S1_S0 0x40              //P_SW1.6
  4. #define S1_S1 0x80              //P_SW1.7
  5. #define FOSC 11059200L          //系統(tǒng)頻率
  6. #define BAUD 4800             //串口波特率
  7. sbit k=P1^2;
  8. unsigned char i;

  9. void delay(unsigned int i)
  10. {
  11.         while(i--);
  12. }

  13. void qie_huan()           //串口引腳選擇函數(shù)
  14. {
  15.   ACC = P_SW1;
  16.   ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
  17.   ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
  18.   P_SW1 = ACC;  
  19. }

  20. void main()
  21. {
  22.         P0M0 = 0x00;
  23.         P0M1 = 0x00;
  24.         P1M0 = 0x00;
  25.         P1M1 = 0x00;
  26.         P2M0 = 0x00;
  27.         P2M1 = 0x00;
  28.         P3M0 = 0x00;
  29.         P3M1 = 0x00;
  30.         P4M0 = 0x00;
  31.         P4M1 = 0x00;
  32.         P5M0 = 0x00;
  33.         P5M1 = 0x00;
  34.         P6M0 = 0x00;
  35.         P6M1 = 0x00;
  36.         P7M0 = 0x00;
  37.         P7M1 = 0x00;
  38.         qie_huan();

  39.         S2CON = 0x50;                //8位數(shù)據(jù),可變波特率
  40.         AUXR |= 0x04;                //定時器時鐘1T模式
  41.         T2L = 0xE0;                //設置定時初始值
  42.         T2H = 0xFE;                //設置定時初始值
  43.         AUXR |= 0x10;                //定時器2開始計時

  44.         while(1)
  45.         {
  46.                 if(k==0)
  47.                 {
  48.                         delay(1000);
  49.                         if(k==0)
  50.                         {
  51.                                 for(i=0;i<10;i++)
  52.                                 {
  53.                                         SBUF='m';
  54.                                         while(!TI);
  55.                                         TI=0;
  56.                                 }
  57.                         }
  58.                 }
  59.         }
  60. }
復制代碼
回復

使用道具 舉報

ID:849913 發(fā)表于 2021-11-19 14:59 | 顯示全部樓層
謝謝 已經(jīng)解決了 按照2樓大師的辦法  3樓大師的做法是查詢方法也好用 多謝了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表