標(biāo)題: 單片機(jī)雙串口通信程序問題 [打印本頁(yè)]

作者: wyx丶    時(shí)間: 2018-4-25 11:12
標(biāo)題: 單片機(jī)雙串口通信程序問題
  1. /***********************************************************************
  2. 時(shí)間:2012.11.24
  3. 芯片:STC12C5A60S2
  4. 晶振:22.1184MHz  波特率:9600bps
  5. 引腳定義:串行口1:發(fā)送————TxD/P3.1; 接收———.000—RxD/P3
  6.           串行口2:        發(fā)送————TxD2/P1.3;接收————RxD2/P1.2
  7. 功能描述:STC12雙串口通信(中斷方式)
  8.           當(dāng)串行口1接收數(shù)據(jù)后,將此數(shù)據(jù)由串行口2發(fā)送出去
  9.           當(dāng)串行口2接收數(shù)據(jù)后,將此數(shù)據(jù)由串行口1發(fā)送出去
  10. ***********************************************************************/
  11. #include<STC12C5A60S2.h>

  12. #define S2RI 0x01        //串口2接收中斷請(qǐng)求標(biāo)志位
  13. #define S2TI 0x02        //串口2發(fā)送中斷請(qǐng)求標(biāo)志位
  14. unsigned char flag1,flag2,temp1=0xaa,temp2=0x55;
  15. /****************串行口初始化函數(shù)****************/
  16. void InitUART(void)
  17. {
  18.     TMOD = 0x20;    //定時(shí)器1工作在方式2  8位自動(dòng)重裝
  19.     SCON = 0x50;    //串口1工作在方式1  10位異步收發(fā) REN=1允許接收
  20.     TH1 = 0xFA;           //定時(shí)器1初值
  21.     TL1 = TH1;
  22.     TR1 = 1;           //定時(shí)器1開始計(jì)數(shù)
  23.     EA =1;        //開總中斷
  24.     ES =1;        //開串口1中斷

  25.     S2CON = 0x50;   //串口2工作在方式1  10位異步收發(fā) S2REN=1允許接收
  26.     BRT = 0xFA;           //獨(dú)立波特率發(fā)生器初值
  27.     AUXR = 0x10;    //BRTR=1 獨(dú)立波特率發(fā)生器開始計(jì)數(shù)
  28.     IE2 =0x01;        //開串口2中斷  ES2=1
  29. }
  30. /****************串行口1發(fā)送****************/
  31. void UART_1SendOneByte(unsigned char c)
  32. {
  33.     SBUF = c;
  34.     while(!TI);           //若TI=0,在此等待
  35.     TI = 0;         
  36. }
  37. /****************串行口2發(fā)送****************/
  38. void UART_2SendOneByte(unsigned char c)
  39. {
  40.     S2BUF = c;
  41.     while(!(S2CON&S2TI));  //若S2TI=0,在此等待
  42.     S2CON&=~S2TI;          //S2TI=0
  43. }
  44. void delay(unsigned int z)
  45. {
  46.         unsigned int x,y;
  47.         for(x=z;x>0;x--)
  48.         for(y=600;y>0;y--);
  49. }
  50. /*****************主函數(shù)******************/
  51. void main(void)
  52. {
  53.     InitUART();        //串行口初始化

  54.         while(1)
  55.         {P0=temp2;
  56. //如果串口1接收到數(shù)據(jù),將此數(shù)據(jù)由串口2發(fā)送
  57.                 if(flag1==1)
  58.                 {

  59.                         flag1=0;
  60.                         UART_2SendOneByte(temp1);

  61.                 }
  62.                 delay(300);
  63.                 P0=temp1;
  64. //如果串口2接收到數(shù)據(jù),將此數(shù)據(jù)由串口1發(fā)送
  65.                 if(flag2==1)
  66.                 {

  67.                         flag2=0;
  68.                         UART_1SendOneByte(temp2);
  69.                 }
  70.                 delay(300);
  71.         }
  72. }
  73. /************串行口1中斷處理函數(shù)*************/
  74. void UART_1Interrupt(void) interrupt 4
  75. {
  76.         if(RI==1)
  77.         {

  78.                 RI=0;
  79.                 flag1=1;
  80.                 temp1=SBUF;
  81.         }
  82. }
  83. /************串行口2中斷處理函數(shù)*************/
  84. void UART_2Interrupt(void) interrupt 8
  85. {
  86.         if(S2CON&S2RI)
  87.         {

  88.                 S2CON&=~S2RI;
  89.                 flag2=1;
  90.                 temp2=S2BUF;
  91.         }
  92. }

復(fù)制代碼



作者: wyx丶    時(shí)間: 2018-4-25 11:13
提問:USB轉(zhuǎn)TTL接stc12c5a60s單片機(jī)再接GA6-GSM模塊,,,這個(gè)程序可用嗎
作者: wyx丶    時(shí)間: 2018-4-25 11:15
還有我的單片機(jī)晶振為11.0592,串口波特率為115200,在如上代碼中如何修改,謝謝
作者: wyx丶    時(shí)間: 2018-4-25 11:18
審核這么慢嗎?我就想問個(gè)問題啊~
作者: 最小似然估計(jì)    時(shí)間: 2018-4-26 16:17
將串口初始化程序相應(yīng)的改一下
作者: wyx丶    時(shí)間: 2018-4-28 16:11
最小似然估計(jì) 發(fā)表于 2018-4-26 16:17
將串口初始化程序相應(yīng)的改一下

初始化程序修改它的波特率和晶振之后,GSM模塊怎么寫進(jìn)去呢?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1