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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2821|回復: 0
打印 上一主題 下一主題
收起左側

單片機串口連續通訊

[復制鏈接]
跳轉到指定樓層
樓主
ID:304041 發表于 2018-5-19 08:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
上一篇發的是,只能單一的發,這是連續發送,打開電腦串口助手可以接受都你發的東西,原理就是,比如你隨便輸三位數,發送給單片機,讓數碼管顯示,可是你的讓單片機知道你發是什么,分別把你的三位數,每一位都取出來,傳遞給你寫的串口通信那塊,,不要想著這樣就結束了,這樣想只能單一的發送,不能連續的發送和接收,你想怎么樣才能讓它連續的接收和發送呢。其原理差不多,就比如像你強火車票一樣,一直不停的刷新,希望有火車票一樣,(比喻不好還請見諒)而你實現連續串口發送接收原理我自己感覺差不多,就是把你串口接收發送那塊,不斷的刷新,這樣就可以實現,連續接收和發送了

單片機源程序如下:
  1. /*********************該程序可實現燈的亮滅**可以實現串口通信以及電腦控制單片機/*實現連續發送*********************************/
  2. /*該程序寫的比較好*//*通過兩個不同的標志位實現,非常棒*/
  3. //可以連續發送
  4. #include <STC15f2k60s2.h>

  5. #define u16 unsigned int
  6. #define u8  unsigned char

  7. u16 pwm_value;

  8. sbit LED = P1^0;//用于檢測電腦與單片機串口正常通信  
  9. unsigned char UART_buff;//串口的接收和發送(只能是單個字符的使用)
  10. unsigned char receive[50];//用于接收所發出來的字符串
  11. unsigned char i;
  12. int xianshi,copy;
  13. double shuju;
  14. bit New_rec = 0, Send_ed = 1, Money = 0; //定義的一些標記位
  15. unsigned char code DSY_CODE[]=
  16. {
  17. 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  18. };//這是時鐘所用到的數
  19. /*******用于一毫秒的延時****************/
  20. void delayms(unsigned int xms)
  21. {
  22. unsigned int i,j;
  23. for(i=xms;i>0;i--)
  24. for(j=110;j>0;j--);
  25. }
  26. /*數碼管顯示程序2*/
  27. void display1(int h)
  28. {
  29. P2=0xfe;
  30. P0=DSY_CODE[h/100]&0x7f;
  31. delayms(1);
  32. P2=0xff;
  33. P0=0xff;
  34. P2=0xfd;
  35. P0=DSY_CODE[h%100/10];
  36. delayms(1);
  37. P2=0xff;
  38. P0=0xff;
  39. P2=0xfb;
  40. P0=DSY_CODE[h%100%10];
  41. delayms(1);
  42. P2=0xff;
  43. P0=0xff;
  44. }

  45. //========================================================================
  46. // 函數: UpdatePwm(u8 PCA_id, u16 pwm_value)
  47. // 描述: 更新PWM值.
  48. // 參數: PCA_id: PCA序號. 取值 PCA0,PCA1,PCA2,PCA_Counter
  49. //                 pwm_value: pwm值, 這個值是輸出高電平的時間.
  50. // 返回: none.
  51. // 版本: V1.0, 2012-11-22
  52. //========================================================================
  53. void        UpdatePwm(u16 uart_date)
  54. {
  55.     pwm_value=uart_date/2;
  56.         if(pwm_value == 0)
  57.         {
  58.                 CCAP0H =0xff;       
  59.         }
  60.         else
  61.         {
  62.                 CCAP0H = (u8)(256 - pwm_value);
  63.         }               
  64. }

  65. //----------------------------------------------  
  66. void main (void)  
  67. {  
  68.    AUXR |= 0x40;   //設置1T
  69.    AUXR &= 0xfe;   //設置定時器1為串口1波特率發生器
  70.    PCON &= 0x7f;   //不加倍
  71.    TMOD = 0x20;   //定時器1工作方式2
  72.    TH1 = 0xdc;
  73.    TL1 = 0xdc;
  74.    SM0 = 0;
  75.    SM1 = 1;
  76.    REN = 1;
  77.    TR1 = 1;
  78.    ES = 1;
  79.    EA = 1;   
  80.   
  81.     while(1)  
  82.         {
  83.       while(i%3==0&&i!=0)
  84.       {
  85.       copy=i/3;
  86.      // shuju=(double)(receive[0])+(double)(receive[1])/10+(double)(receive[2])/100;
  87.       shuju=(double)(receive[(copy-1)*3])+(double)(receive[(copy-1)*3+1])/10+(double)(receive[(copy-1)*3+2])/100;
  88.       xianshi=shuju*100;
  89.       display1(xianshi);

  90.          //  PCA0初始化
  91.             AUXR1 &= ~0x30;
  92.             AUXR1 |= 0x10;        //切換IO口, 0x00: P1.2 P1.1 P1.0 P3.7,  0x10: P3.4 P3.5 P3.6 P3.7, 0x20: P2.4 P2.5 P2.6 P2.7
  93.             CCAPM0   = 0x42;        //工作模式 PWM
  94.             PCA_PWM0 = (PCA_PWM0 & ~0xc0) | 0x00;        //PWM寬度, 0x00: 8bit, 0x40: 7bit,  0x80: 6bit
  95.             CMOD  = (CMOD  & ~0xe0) | 0x08;        //選擇時鐘源, 0x00: 12T, 0x02: 2T, 0x04: Timer0溢出, 0x06: ECI, 0x08: 1T, 0x0A: 4T, 0x0C: 6T, 0x0E: 8T
  96.             CR = 1;
  97.             UpdatePwm(xianshi);
  98.       }
  99.       if ((New_rec == 1) && (Send_ed == 1))  
  100.           {  //如果收到新數據及發送完畢  
  101.         New_rec = 0;  
  102.         Send_ed = 0;  
  103.       }
  104.         }  
  105. }  
  106. //----------------------------------------------  
  107. void ser_int (void) interrupt 4   
  108. {  
  109.     if(RI == 1)
  110.     {  //如果收到.  
  111.       RI = 0;      //清除標志.  
  112.       New_rec = 1;//表明收到了信息了
  113.       if((SBUF >= '0') && (SBUF <= '9'))
  114.       {
  115.       receive[i]=SBUF-'0';//將字符串按字節放入到數組當中,起到一定的緩存作用
  116.       i++;
  117.       }
  118.       UART_buff = SBUF;  //接收.只支持字符,不支持字符串  
  119.       SBUF=UART_buff;//這個用于電腦串口的接收,也就是發送
  120.       TI = 0;      //清除標志.  
  121.       Send_ed = 1;                        
  122.     }  
  123.     else  {        //如果送畢.  
  124.       TI = 0;      //清除標志.  
  125.       Send_ed = 1;  
  126.     }  
  127. }   



  128. ///*********************該程序可實現燈的亮滅**可以實現串口通信以及電腦控制單片機/只能發送單個*********************************/
  129. ///*該程序寫的比較好*//*通過兩個不同的標志位實現,非常棒*/
  130. //#include <STC15f2k60s2.h>
  131. //
  132. //#define u16 unsigned int
  133. //#define u8  unsigned char
  134. //
  135. //u16 pwm_value;
  136. //
  137. //sbit LED = P1^0;//用于檢測電腦與單片機串口正常通信  
  138. //unsigned char UART_buff;//串口的接收和發送(只能是單個字符的使用)
  139. //unsigned char receive[50];//用于接收所發出來的字符串
  140. //unsigned char i;
  141. //int xianshi;
  142. //double shuju;
  143. //bit New_rec = 0, Send_ed = 1, Money = 0; //定義的一些標記位
  144. //unsigned char code DSY_CODE[]=
  145. //{
  146. //0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  147. //};//這是時鐘所用到的數
  148. ///*******用于一毫秒的延時****************/
  149. //void delayms(unsigned int xms)
  150. //{
  151. //unsigned int i,j;
  152. //for(i=xms;i>0;i--)
  153. //for(j=110;j>0;j--);
  154. //}
  155. ///*數碼管顯示程序2*/
  156. //void display1(int h)
  157. //{
  158. //P2=0xfe;
  159. //P0=DSY_CODE[h/100]&0x7f;
  160. //delayms(1);
  161. //P2=0xff;
  162. //P0=0xff;
  163. //P2=0xfd;
  164. //P0=DSY_CODE[h%100/10];
  165. //delayms(1);
  166. //P2=0xff;
  167. //P0=0xff;
  168. //P2=0xfb;
  169. //P0=DSY_CODE[h%100%10];
  170. //delayms(1);
  171. //P2=0xff;
  172. //P0=0xff;
  173. //}
  174. //
  175. ////========================================================================
  176. //// 函數: UpdatePwm(u8 PCA_id, u16 pwm_value)
  177. //// 描述: 更新PWM值.
  178. //// 參數: PCA_id: PCA序號. 取值 PCA0,PCA1,PCA2,PCA_Counter
  179. ////                 pwm_value: pwm值, 這個值是輸出高電平的時間.
  180. //// 返回: none.
  181. //// 版本: V1.0, 2012-11-22
  182. ////========================================================================
  183. //void        UpdatePwm(u16 uart_date)
  184. //{
  185. //    pwm_value=uart_date/2;
  186. //        if(pwm_value == 0)
  187. //        {
  188. //                CCAP0H =0xff;       
  189. //        }
  190. //        else
  191. //        {
  192. //                CCAP0H = (u8)(256 - pwm_value);
  193. //        }               
  194. //}
  195. //
  196. ////----------------------------------------------  
  197. //void main (void)  
  198. //{  
  199. //   AUXR |= 0x40;   //設置1T
  200. //   AUXR &= 0xfe;   //設置定時器1為串口1波特率發生器
  201. //   PCON &= 0x7f;   //不加倍
  202. //   TMOD = 0x20;   //定時器1工作方式2
  203. //   TH1 = 0xdc;
  204. //   TL1 = 0xdc;
  205. //   SM0 = 0;
  206. //   SM1 = 1;
  207. //   REN = 1;
  208. //   TR1 = 1;
  209. //   ES = 1;
  210. //   EA = 1;   
  211. //  
  212. //    while(1)  
  213. //        {
  214. //      while(i>=2)
  215. //      {
  216. //      shuju=(double)(receive[0])+(double)(receive[1])/10+(double)(receive[2])/100;
  217. //      xianshi=shuju*100;
  218. //      display1(xianshi);
  219. //
  220. //         //  PCA0初始化
  221. //            AUXR1 &= ~0x30;
  222. //            AUXR1 |= 0x10;        //切換IO口, 0x00: P1.2 P1.1 P1.0 P3.7,  0x10: P3.4 P3.5 P3.6 P3.7, 0x20: P2.4 P2.5 P2.6 P2.7
  223. //            CCAPM0   = 0x42;        //工作模式 PWM
  224. //            PCA_PWM0 = (PCA_PWM0 & ~0xc0) | 0x00;        //PWM寬度, 0x00: 8bit, 0x40: 7bit,  0x80: 6bit
  225. //            CMOD  = (CMOD  & ~0xe0) | 0x08;        //選擇時鐘源, 0x00: 12T, 0x02: 2T, 0x04: Timer0溢出, 0x06: ECI, 0x08: 1T, 0x0A: 4T, 0x0C: 6T, 0x0E: 8T
  226. //            CR = 1;
  227. //            UpdatePwm(xianshi);
  228. //      }
  229. //      if ((New_rec == 1) && (Send_ed == 1))  
  230. ……………………

  231. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
15電腦串口控制單片機電壓精美版1.zip (31.15 KB, 下載次數: 13)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品在线视频 | 中文字幕日韩欧美一区二区三区 | 99国产欧美 | 精国产品一区二区三区四季综 | 久久国内精品 | 久久久精品一区 | 亚洲毛片在线观看 | 国产精品久久久久aaaa樱花 | 成人精品毛片国产亚洲av十九禁 | 亚洲欧美视频一区 | 免费a级毛片在线播放 | 尤物在线 | 午夜成人在线视频 | 免费看一区二区三区 | 国产精品美女www爽爽爽 | 中文字幕在线免费视频 | 久久久精品网站 | 精品美女久久久 | 91国内精精品久久久久久婷婷 | 欧美一区二区三区在线看 | 欧美在线日韩 | 亚洲欧美综合 | 青春草在线 | 久久综合狠狠综合久久 | 成人小视频在线观看 | 中文字幕日韩欧美 | 国产一区二区在线91 | 香蕉视频一区二区 | 日韩一区二区免费视频 | 黄色三级免费 | 欧美 视频 | 国产精品久久久久久网站 | 日韩精品成人在线 | 久久国产精品视频 | 久久久一区二区三区 | 一级少妇女片 | 一区免费| h在线看| 亚洲男人天堂 | 久久成人精品 | 欧美啊v在线观看 |