久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 求指教 stc12c5a60s2雙串口單片機第二串口通訊問題 [打印本頁]

作者: 西瓜易冷    時間: 2017-4-10 20:14
標題: 求指教 stc12c5a60s2雙串口單片機第二串口通訊問題
本人以前學的一直是at89c51型單片機   現在學校里做一個甲醛檢測儀  原來的串口用于傳感器傳送數據  因為要做一個RS232和上位機通信  所以選用了 stc12c5a60s2雙串口單片機 。。無奈啊 第二個串口死活弄不通  

問題大概是這樣的 不用串口二初始化 不用串口二發送數據的時候好好的   單把串口二初始化程序添加進去并傳送數據后  串口一串口二都不工作了  也顯示不出檢測數據了。。想問問有沒有大神會改  幫忙弄一下串口二的初始化程序和發送程序

PS  串口二只用發送  不用接受   波特率都是9600  晶振都是11.0592
作者: 西瓜易冷    時間: 2017-4-10 20:15
  1. #include <12c5a60s2.h>
  2. #include <intrins.h>
  3. #include<absacc.h>
  4. #include <string.h>

  5. #define uchar unsigned char       
  6. #define uint unsigned int
  7. #define busy 0x80


  8. uint jiaquan_mg,jiaquan_ppm;                 

  9. uchar  NRxBuff;   //通訊接收緩沖區記數
  10. uchar  inbuff[20];//通訊接收緩沖區數據
  11. uchar  outbuff[20];//通訊發射緩沖區數據

  12. sbit RS=P3^3;
  13. sbit RW=P3^4;
  14. sbit E=P3^5;






  15. //毫秒延時子程序
  16. void delay_nms(uint n)
  17. {uint i,j;
  18. for (i=0;i<n;i++){for(j=0;j<1900 ;j++);}}  

  19. //串口1   初始化
  20. void UartInit(void)                //9600bps@11.0592MHz
  21. {
  22.         PCON |= 0x80;                //使能波特率倍速位SMOD         
  23.         SCON = 0x50;                //8位數據,可變波特率
  24.         AUXR=AUXR&0x5a;
  25.         TMOD &= 0x0f;                //清除定時器1模式位
  26.         TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
  27.         TL1 = 0xFA;                //設定定時初值
  28.         TH1 = 0xFA;                //設定定時器重裝值
  29.         ET1 = 0;                //禁止定時器1中斷
  30.         TR1 = 1;                //啟動定時器1

  31. }


  32. //串口2  初始化
  33. void Uart_two_init (void)       
  34. {

  35.      S2CON=0x50;
  36.      BRT=0xfd;  
  37.      AUXR1=AUXR1&0xef;
  38.      IE2=IE2|0x01;

  39. }


  40. // 串口2   發送一個字符
  41. void uart_two_send(uchar l)
  42. {
  43.         ES2=0;               
  44.         S2BUF=l;
  45.         while((S2CON&0x02)!=0x02);       
  46.         S2CON&=~0x02;
  47.         ES=1;               

  48. }

  49. //串口2   發送數據
  50. void uart_two_printf(uchar *p)
  51. {
  52.   
  53.    uchar b;
  54.         for(b=0;b<=7;b++)
  55.         {
  56.         uart_two_send(p[b]);
  57.         }



  58. }






  59. /////串口1中斷子程序//////
  60. serial (void) interrupt 4
  61. {
  62. RI=0;
  63. inbuff[NRxBuff]=SBUF;
  64. NRxBuff++;
  65. if (NRxBuff>15)NRxBuff=0;
  66. }

  67. //串口1輸出子程序
  68. void sprint(uchar a)
  69. {
  70. ES=0;
  71. SBUF=a;
  72. while(!TI)
  73. {};
  74. TI=0;
  75. ES=1;
  76. }

  77. //發送讀取指令
  78. void fa_read_pro(void)
  79. {
  80. uchar a;
  81. outbuff[0]=0xa5;
  82. outbuff[1]=0x5a;
  83. outbuff[2]=0x02;
  84. outbuff[3]=0x80;
  85. outbuff[4]=0xaa;
  86. for (a=0;a<5;a++)sprint(outbuff[a]);
  87. }


  88. //  1602的顯示程序這里省略了




  89. //       主程序             //

  90. void main(void)
  91. {
  92. uint mg1,mg2,mg3,ppm1,ppm2,ppm3;

  93. uchar *s1;
  94. uchar *s2;
  95. uchar *s3;
  96. uchar s4;
  97. init_1602();

  98. s1="HCHO:";
  99. s2="mg/m3";
  100. s3="ppm";
  101. s4='.';


  102. display_1602string(0,0,s1);                         //           第一行開頭顯示 HCHO:
  103. display_1602string(0,1,s1);                         //           第二行開頭顯示 HCHO:
  104. display_1602string(11,0,s2);                  //           第一行末尾顯示 mg/m3
  105. display_1602string(13,1,s3);                 //           第二行末尾顯示 ppm



  106. EA=0;
  107. delay_nms(50);                          //  
  108. NRxBuff=0;
  109. UartInit();         //串口1  初始化


  110. Uart_two_init();  // 串口2   初始化               


  111. EA=1;
  112. delay_nms(166);       //   
  113. while(1)
  114. {

  115. fa_read_pro();////發送讀取指令
  116. delay_nms(100);//延時一段時間,大于50ms          







  117. if ((NRxBuff>=8)&&(inbuff[0]==0xA5)&&(inbuff[1]==0x5A)&&(inbuff[3]==0x80))      //如果收到8個字節的數據,進行判斷,然后處理數據。
  118. {
  119. jiaquan_mg=inbuff[4]*256+inbuff[5];////////////計算甲醛mg值
  120. jiaquan_ppm=inbuff[6]*256+inbuff[7];//////////計算甲醛ppm值




  121. NRxBuff=0;
  122. }

  123. //     想在這個位置  把從串口一接收到的8個字節數據通過RS232從串口二傳送出去 串口二只用于傳送 不用接受


  124. mg1=jiaquan_mg/100;                           //計算各位
  125. mg2=jiaquan_mg%100/10;                           //計算十分位
  126. mg3=jiaquan_mg%100%10;                           //計算千分位

  127. ppm1=jiaquan_ppm/100;
  128. ppm2=jiaquan_ppm%100/10;
  129. ppm3=jiaquan_ppm%100%10;


  130. display_1602char(7,0,s4);                        //顯示小數點
  131. display_1602char(7,1,s4);

  132. display_1602int(6,0,0x30+mg1);                  //顯示動態數字要加 0x30    顯示以mg為單位的檢測數值
  133. display_1602int(8,0,0x30+mg2);
  134. display_1602int(9,0,0x30+mg3);

  135. display_1602int(6,1,0x30+ppm1);                  //顯示動態數字要加 0x30          顯示以ppm為單位的檢測數值
  136. display_1602int(8,1,0x30+ppm2);
  137. display_1602int(9,1,0x30+ppm3);


  138. delay_nms(166);                 

  139. }



  140. }
復制代碼

作者: nephty    時間: 2018-5-1 14:26
老哥,調出來了嗎,能講講嗎




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 免费视频二区 | 欧美视频一区二区三区 | 亚洲九色| 毛片一级片 | 国产欧美精品区一区二区三区 | 久久精品国产一区二区三区 | 日韩精品a在线观看图片 | 综合久久亚洲 | 久久久亚洲精品视频 | 久久99精品久久久久久国产越南 | 国产在线拍偷自揄拍视频 | 日韩欧美成人精品 | 97精品国产 | 国产一级片网站 | 国产精品久久毛片av大全日韩 | 国产欧美精品一区 | 国产偷久久一级精品60部 | 中文字幕一区二区三区四区五区 | 亚洲成人中文字幕 | 国产在线观看一区二区三区 | 久久精品小视频 | 日韩在线精品视频 | 久久一 | 羞羞涩涩在线观看 | 一区二区三区在线 | 欧 | 欧美日韩视频 | 在线一区二区三区 | 日本精品久久 | 一区二区三区国产精品 | 一色桃子av一区二区 | 久久草在线视频 | 精国产品一区二区三区四季综 | 日韩精品在线免费 | 午夜在线免费观看 | 毛片免费看| 亚洲午夜在线 | 亚洲狠狠爱| 91亚洲精选| 7777在线视频 | 波多野结衣在线观看一区二区三区 | 久久免费看 |