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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求指教 stc12c5a60s2雙串口單片機第二串口通訊問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:188200 發(fā)表于 2017-4-10 20:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人以前學(xué)的一直是at89c51型單片機   現(xiàn)在學(xué)校里做一個甲醛檢測儀  原來的串口用于傳感器傳送數(shù)據(jù)  因為要做一個RS232和上位機通信  所以選用了 stc12c5a60s2雙串口單片機 。。無奈啊 第二個串口死活弄不通  

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

PS  串口二只用發(fā)送  不用接受   波特率都是9600  晶振都是11.0592
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:188200 發(fā)表于 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;   //通訊接收緩沖區(qū)記數(shù)
  10. uchar  inbuff[20];//通訊接收緩沖區(qū)數(shù)據(jù)
  11. uchar  outbuff[20];//通訊發(fā)射緩沖區(qū)數(shù)據(jù)

  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位數(shù)據(jù),可變波特率
  24.         AUXR=AUXR&0x5a;
  25.         TMOD &= 0x0f;                //清除定時器1模式位
  26.         TMOD |= 0x20;                //設(shè)定定時器1為8位自動重裝方式
  27.         TL1 = 0xFA;                //設(shè)定定時初值
  28.         TH1 = 0xFA;                //設(shè)定定時器重裝值
  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   發(fā)送一個字符
  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   發(fā)送數(shù)據(jù)
  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. //發(fā)送讀取指令
  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();////發(fā)送讀取指令
  116. delay_nms(100);//延時一段時間,大于50ms          







  117. if ((NRxBuff>=8)&&(inbuff[0]==0xA5)&&(inbuff[1]==0x5A)&&(inbuff[3]==0x80))      //如果收到8個字節(jié)的數(shù)據(jù),進行判斷,然后處理數(shù)據(jù)。
  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個字節(jié)數(shù)據(jù)通過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);                        //顯示小數(shù)點
  131. display_1602char(7,1,s4);

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

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


  138. delay_nms(166);                 

  139. }



  140. }
復(fù)制代碼
回復(fù)

使用道具 舉報

板凳
ID:290231 發(fā)表于 2018-5-1 14:26 來自觸屏版 | 只看該作者
老哥,調(diào)出來了嗎,能講講嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看一区二区三区 | 国产视频中文字幕 | www.操.com | 麻豆久久久9性大片 | 亚洲精品欧洲 | 欧美成人第一页 | 欧美国产精品一区二区三区 | 黄色一级片aaa| 欧美不卡一区二区 | 一级黄色片毛片 | 国产三区在线观看视频 | 色播久久久 | 精品国产一区探花在线观看 | www.亚洲.com| 亚洲不卡 | 欧美日韩国产一区二区三区 | 日韩一级免费观看 | 日韩在线视频精品 | 精品视频在线观看 | 亚洲国产激情 | 99精品久久久国产一区二区三 | 四虎伊人| 亚洲色在线视频 | 国产东北一级毛片 | 蜜桃免费av | 日本午夜网站 | 国产精品大片在线观看 | 成人二区| 日韩精品专区在线影院重磅 | 黄色成人免费在线观看 | 91成人在线 | 国产免费av在线 | 毛片久久久| 亚洲www啪成人一区二区 | 欧美白人做受xxxx视频 | 国产激情在线观看 | 久久精品欧美一区二区三区不卡 | 精品国产一级 | 国产在线视频三区 | 一区二区三区电影网 | 精品国产一区一区二区三亚瑟 |