找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6874|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

STC15W204S單片機(jī)如何調(diào)用串口2來(lái)接收或發(fā)送資料?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
如題,我是成功用串口1來(lái)接收或發(fā)送資料,現(xiàn)在要從串口1換去串口2來(lái)做接收或發(fā)送。

串口1的設(shè)定單片機(jī)代碼
  1.         EA = 1;
  2.         ES = 1;

  3. //    38400
  4.                 SCON = 0x50;                 
  5.                 AUXR |= 0x01;               
  6.                 AUXR |= 0x04;               
  7.                 T2L = 0xB8;               
  8.                 T2H = 0xFF;               
  9.                 AUXR |= 0x10;
復(fù)制代碼

請(qǐng)問(wèn)如何設(shè)定串口2呢?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:94031 發(fā)表于 2019-1-31 17:06 | 只看該作者
UART2_config(2);        // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無(wú)效.
EA = 1;        //允許全局中斷

void        SetTimer2Baudraye(u16 dat)        // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
{
        AUXR &= ~(1<<4);        //Timer stop
        AUXR &= ~(1<<3);        //Timer2 set As Timer
        AUXR |=  (1<<2);        //Timer2 set as 1T mode
        TH2 = dat / 256;
        TL2 = dat % 256;
        IE2  &= ~(1<<2);        //禁止中斷
        AUXR |=  (1<<4);        //Timer run enable
}

void        UART2_config(u8 brt)        // 選擇波特率, 2: 使用Timer2做波特率, 其它值: 無(wú)效.
{
        /*********** 波特率固定使用定時(shí)器2 *****************/
        if(brt == 2)
        {
                SetTimer2Baudraye(65536UL - (MAIN_Fosc / 4) / Baudrate2);

                S2CON &= ~(1<<7);        // 8位數(shù)據(jù), 1位起始位, 1位停止位, 無(wú)校驗(yàn)
                IE2   |= 1;                        //允許中斷
                S2CON |= (1<<4);        //允許接收
                P_SW2 &= ~0x01;       
                P_SW2 |= 1;                        //UART2 switch to: 0: P1.0 P1.1,  1: P4.6 P4.7

                B_TX2_Busy = 0;
                TX2_Cnt = 0;
                RX2_Cnt = 0;
        }
}

void UART2_int (void) interrupt UART2_VECTOR
{
        if((S2CON & 1) != 0)
        {
                S2CON &= ~1;        //Clear Rx flag
                RX2_Buffer[RX2_Cnt] = S2BUF;
                if(++RX2_Cnt >= UART2_BUF_LENGTH)        RX2_Cnt = 0;
        }

        if((S2CON & 2) != 0)
        {
                S2CON &= ~2;        //Clear Tx flag
                B_TX2_Busy = 0;
        }

}

回復(fù)

使用道具 舉報(bào)

板凳
ID:463187 發(fā)表于 2019-1-31 18:39 | 只看該作者
void UartInit(void)                //9600bps@11.0592MHz
{
        S2CON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x04;                //定時(shí)器2時(shí)鐘為Fosc,即1T
        T2L = 0xE0;                //設(shè)定定時(shí)初值
        T2H = 0xFE;                //設(shè)定定時(shí)初值
        AUXR |= 0x10;                //啟動(dòng)定時(shí)器2
}
回復(fù)

使用道具 舉報(bào)

地板
ID:155507 發(fā)表于 2019-1-31 19:15 | 只看該作者
你確定STC15W204S單片機(jī)有串口2嗎?



STC15W204S-001.png (427.78 KB, 下載次數(shù): 145)

STC15W204S單片機(jī)

STC15W204S單片機(jī)
回復(fù)

使用道具 舉報(bào)

5#
ID:457181 發(fā)表于 2019-2-1 08:47 | 只看該作者
angmall 發(fā)表于 2019-1-31 19:15
你確定STC15W204S單片機(jī)有串口2嗎?

有!在P3.6和P3.7
回復(fù)

使用道具 舉報(bào)

6#
ID:47286 發(fā)表于 2019-2-1 10:18 | 只看該作者
jeffphoon 發(fā)表于 2019-2-1 08:47
有!在P3.6和P3.7

沒(méi)有兩個(gè) 只有一個(gè)串口 人家手冊(cè)上寫(xiě)的是 一組異步串行口 可以在兩組管腳間切換 分時(shí)復(fù)用可當(dāng)兩組串口用 明白么 就是一組串口干兩組串口的事 但不能同時(shí)
回復(fù)

使用道具 舉報(bào)

7#
ID:457181 發(fā)表于 2019-2-1 10:57 | 只看該作者
dzbj 發(fā)表于 2019-2-1 10:18
沒(méi)有兩個(gè) 只有一個(gè)串口 人家手冊(cè)上寫(xiě)的是 一組異步串行口 可以在兩組管腳間切換 分時(shí)復(fù)用可當(dāng)兩組串口用  ...

明白了,謝謝哦!如何要調(diào)用P3.6和P3.7為接收和發(fā)送,要怎樣寫(xiě)呢?
我的代碼還是不能收
  1. void UartInit(void)
  2. {

  3.                 EA = 1;
  4.                 ES = 1;
  5.        
  6. //            38400
  7.                 S2CON = 0x50;               
  8.                 AUXR |= 0x04;               
  9.                 T2L = 0xB8;               
  10.                 T2H = 0xFF;               
  11.                 AUXR |= 0x10;               
  12. }

  13. void Delay100us()                //@11.0592MHz
  14. {
  15.         unsigned char i, j;

  16.         _nop_();
  17.         _nop_();
  18.         i = 2;
  19.         j = 15;
  20.         do
  21.         {
  22.                 while (--j);
  23.         } while (--i);
  24. }

  25. void main()
  26. {
  27.         UartInit();
  28.         while(1)
  29.         {
  30.                 if(flag==1)
  31.                 {
  32.                         ES=0;
  33.                         flag=0;
  34.                         S2BUF=a;
  35.                        
  36.                         while(!TI);
  37.                                 TI=0;
  38.                                 ES=1;
  39.                         Delay100us();
  40.                 }
  41.         }
  42. }

  43. void ser() interrupt 4
  44. {
  45.         RI=0;
  46.         a=S2BUF;
  47.         flag=1;
  48. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

8#
ID:94031 發(fā)表于 2019-2-1 16:03 | 只看該作者
jeffphoon 發(fā)表于 2019-2-1 10:57
明白了,謝謝哦!如何要調(diào)用P3.6和P3.7為接收和發(fā)送,要怎樣寫(xiě)呢?
我的代碼還是不能收

#define                S1_USE_P36P37()                P_SW1 = (P_SW1 & ~0xc0) | 0x40        //UART1 使用P36 P37口
回復(fù)

使用道具 舉報(bào)

9#
ID:474217 發(fā)表于 2019-2-1 23:01 來(lái)自手機(jī) | 只看該作者
第一次接觸proteus 8這個(gè)軟件,
求大佬解釋一下這個(gè)是為什么?
該怎樣解決。

15490331691370.5000705698561064.jpg (1.52 MB, 下載次數(shù): 133)

15490331691370.5000705698561064.jpg
回復(fù)

使用道具 舉報(bào)

10#
ID:123289 發(fā)表于 2019-2-2 23:26 | 只看該作者
需要習(xí)慣并學(xué)會(huì)看手冊(cè)
回復(fù)

使用道具 舉報(bào)

11#
ID:457181 發(fā)表于 2019-2-14 12:26 | 只看該作者
本帖最后由 jeffphoon 于 2019-2-14 13:59 編輯
xuyaqi 發(fā)表于 2019-2-1 16:03
define                S1_USE_P36P37()                P_SW1 = (P_SW1 & ~0xc0) | 0x40        //UART1 使用P36 P37口

請(qǐng)問(wèn)要如何調(diào)用呢?我加了,但還是不能
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. unsigned char        a,flag;        
  4. #define S1_USE_P36P37() P_SW1 = (P_SW1 & ~0xc0) | 0x40
  5. void UartInit(void)
  6. {
  7.         EA = 1; //′ò¿a×üÖD¶Ï
  8.         ES = 1; //′ò¿a′®¿úÖD¶Ï
  9.         
  10. //  9600
  11. //        SCON = 0x50;
  12. //        AUXR |= 0x01;
  13. //        AUXR |= 0x04;
  14. //        T2L = 0xE0;
  15. //        T2H = 0xFE;
  16. //        AUXR |= 0x10;
  17.         
  18. //    38400
  19.                 SCON = 0x50;    // SCON: Ä£ê½ 1, 8-bit UART, ê1Äü½óêÕ               
  20.                 AUXR |= 0x01;               
  21.                 AUXR |= 0x04;               
  22.                 T2L = 0xB8;               
  23.                 T2H = 0xFF;               
  24.                 AUXR |= 0x10;   

  25. //    57600
  26. //                SCON = 0x50;               
  27. //                AUXR |= 0x01;               
  28. //                AUXR |= 0x04;               
  29. //                T2L = 0xD0;               
  30. //                T2H = 0xFF;               
  31. //                AUXR |= 0x10;   

  32. }


  33. void Delay100us()                //@11.0592MHz
  34. {
  35.         unsigned char i, j;

  36.         _nop_();
  37.         _nop_();
  38.         i = 2;
  39.         j = 15;
  40.         do
  41.         {
  42.                 while (--j);
  43.         } while (--i);
  44. }

  45. void main()
  46. {
  47.         UartInit();
  48.         while(1)
  49.         {
  50.                 if(flag==1)
  51.                 {
  52.                         ES=0;
  53.                         flag=0;
  54.                         SBUF=a;
  55.                         
  56.                         while(!TI);
  57.                                 TI=0;
  58.                                 ES=1;
  59.                         Delay100us();
  60.                 }
  61.         }
  62. }

  63. void ser() interrupt 4
  64. {
  65.         RI=0;
  66.         a=SBUF;
  67.         flag=1;
  68. }




復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

12#
ID:457181 發(fā)表于 2019-2-14 14:19 | 只看該作者
本帖最后由 jeffphoon 于 2019-2-15 09:45 編輯

我成功調(diào)用串口了。
以下分享給需要的朋友
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. unsigned char        a,flag;       
  4. sfr P_SW1   = 0xA2;            
  5. #define S1_S0 0x40              //P_SW1.6
  6. #define S1_S1 0x80              //P_SW1.7

  7. void UartInit(void)
  8. {
  9.        
  10. //         ACC = P_SW1;
  11. //   ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
  12. //   P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
  13.    
  14.   ACC = P_SW1;
  15.   ACC &= ~(S1_S0 | S1_S1);    //S1_S0=1 S1_S1=0
  16.   ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
  17.   P_SW1 = ACC;  
  18.        
  19.         EA = 1; //′ò¿a×üÖD¶Ï
  20.         ES = 1; //′ò¿a′®¿úÖD¶Ï
  21.        
  22. //  9600
  23. //        SCON = 0x50;
  24. //        AUXR |= 0x01;
  25. //        AUXR |= 0x04;
  26. //        T2L = 0xE0;
  27. //        T2H = 0xFE;
  28. //        AUXR |= 0x10;
  29.        
  30. //    38400
  31.                 SCON = 0x50;    // SCON: Ä£ê½ 1, 8-bit UART, ê1Äü½óêÕ               
  32.                 AUXR |= 0x01;               
  33.                 AUXR |= 0x04;               
  34.                 T2L = 0xB8;               
  35.                 T2H = 0xFF;               
  36.                 AUXR |= 0x10;   

  37. //    57600
  38. //                SCON = 0x50;               
  39. //                AUXR |= 0x01;               
  40. //                AUXR |= 0x04;               
  41. //                T2L = 0xD0;               
  42. //                T2H = 0xFF;               
  43. //                AUXR |= 0x10;   

  44. }


  45. void Delay100us()                //@11.0592MHz
  46. {
  47.         unsigned char i, j;

  48.         _nop_();
  49.         _nop_();
  50.         i = 2;
  51.         j = 15;
  52.         do
  53.         {
  54.                 while (--j);
  55.         } while (--i);
  56. }

  57. void main()
  58. {
  59.         UartInit();
  60.         while(1)
  61.         {
  62.                 if(flag==1)
  63.                 {
  64.                         ES=0;
  65.                         flag=0;
  66.                         SBUF=a;
  67.                        
  68.                         while(!TI);
  69.                                 TI=0;
  70.                                 ES=1;
  71.                         Delay100us();
  72.                 }
  73.         }
  74. }

  75. void ser() interrupt 4
  76. {
  77.         RI=0;
  78.         a=SBUF;
  79.         flag=1;
  80. }
復(fù)制代碼

謝謝大家之前的回復(fù)。

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表