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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PC機VB與單片機串口通信源代碼(含上位機與下位機)

  [復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:

  1. //采用異步方式傳送數據,偶校驗,一位結束位,傳輸的數據傳輸速率為9600bit/s。每個數據幀包含10Byte信息,1Byte作為幀起始標志,8Byte數據,1Byte的校驗和。
  2. //-----------------------函數聲明,變量定義--------------------------------------------------------
  3. #include <reg51.h>
  4. #define COUNT 10                   // 定義接收緩沖區大小
  5. unsigned char buffer[COUNT];              //定義接收緩沖區
  6. unsigned char point;                   //定義接收數據個數指示變量
  7. void UART_init();                    //串口初始化函數
  8. void COM_send(void);                //串口接收函數
  9. unsigned char CLU_checkdata(void);     //計算校驗位函數
  10. //--------------------------------------------------------------------------------------------------
  11. // 函數名稱: UART_init()串口初始化函數
  12. // 函數功能: 在系統時鐘為11.059MHZ時,設定串口波特率為9600bit/s
  13. //            串口接收中斷允許,發送中斷禁止
  14. //初始化串行口和波特率發生器
  15. //--------------------------------------------------------------------------------------------------
  16. void UART_init()
  17. {                    
  18. SCON =0x58;          //選擇串口工作方式,打開接收允許
  19. TMOD =0x21;          //定時器1工作在方式2,定時器0工作在方式1
  20. TH1 =0xfd;           //實現波特率9600(系統時鐘11.0592MHZ)
  21. TR1 =1;              //啟動定時器T1
  22. ET1 =0;
  23. ES=1;                //允許串行口中斷
  24. PS=1;                //設計串行口中斷優先級
  25. EA =1;               //單片機中斷允許
  26. }
  27. //--------------------------------------------------------------------------------------------------
  28. // 函數名稱: com_interrup()串口接收中斷處理函數
  29. // 函數功能: 接收包括起始位'S'在內的十位數據到數據緩沖區
  30. //--------------------------------------------------------------------------------------------------
  31. com_interrupt(void) interrupt 4 using 3
  32. {
  33.   unsigned char RECEIVR_buffer;
  34.   if(RI)                                     //處理接收中斷
  35.   {
  36. RI=0;                                //清除中斷標志位
  37. RECEIVR_buffer=SBUF;                          //接收串口數據
  38. if(point==0)                                                 //如果還沒有接收到起始位
  39.         {
  40.          if(RECEIVR_buffer=='S')             //判斷是否起始標志位
  41.            point++;                                          //是準備接收下一位
  42.                 else
  43.                       point=0;                                          //不是,繼續等待起始位
  44.                }
  45. else if(point>0&&point<10)                                 //判斷是否接收夠十位數據
  46.              buffer[point++]=RECEIVR_buffer;             //不夠,把接收到的數據放入接收緩存區
  47. else point=0;                                         //緩沖區已滿,清除緩存區內數據重新接收
  48. }
  49. If(TI)                                   //處理發送中斷
  50. {
  51. TI=0;
  52. }
  53. }
  54. //--------------------------------------------------------------------------------------------------
  55. // 函數名稱: COM_send()串口發送函數
  56. // 函數功能: 把數據緩沖區的十位數據發送出去
  57. //--------------------------------------------------------------------------------------------------
  58. void COM_send(void)
  59. {
  60. for(point=0;point<=10,TI=1;point++)               //連續發送十位數據                                      
  61.   {
  62.    SBUF=buffer[point];                  //把緩存區的數據都發送到串口
  63.    TI=0;
  64.    }
  65. }
  66. //--------------------------------------------------------------------------------------------------
  67. // 函數名稱: CLU_checkdata()計算校驗位函數
  68. // 輸入變量: 無
  69. // 輸出變量: checkdata,包括起始位在內的前九位數據的校驗和
  70. // 函數功能: 計算校驗和
  71. //--------------------------------------------------------------------------------------------------
  72. unsigned char CLU_checkdata(void)
  73. {                                                                                 //計算校驗位
  74. unsigned char checkdata=0;
  75. for(point=0;point<9,TI=1;point++)
  76.   {
  77.    checkdata=checkdata|buffer[point];
  78.    }
  79. return(checkdata);
  80. }
  81. //--------------------------------------------------------------------------------------------------
  82. // 函數名稱: 主函數
  83. // 函數功能: 調度各子函數,完成通信過程
  84. //--------------------------------------------------------------------------------------------------
  85. void main(void)
  86. {
  87. unsigned char checkdata;
  88. do
  89. {
  90.   UART_init();                                                 //初始化串口
  91.   if(point==10)                                                 //判斷數據是否接收完成
  92.   checkdata=CLU_checkdata;                         //調用求校驗和函數
  93.   if(checkdata==buffer[9])                              //判斷校驗和是否正確
  94.   COM_send();                         //正確則調用發送程序
  95.   point=0;
  96.   }
  97.    while(1);
  98. }
復制代碼

所有資料51hei提供下載:

6.2 PC機與單片機串口通信.zip

4.62 KB, 下載次數: 157, 下載積分: 黑幣 -5

6.1 PC機與PC機串口通信.zip

3.1 KB, 下載次數: 43, 下載積分: 黑幣 -5

6.3 PC機與智能儀器串口通信.zip

4.39 KB, 下載次數: 49, 下載積分: 黑幣 -5

6.4 PC機與PLC串口通信.zip

4.89 KB, 下載次數: 42, 下載積分: 黑幣 -5

6.5 PC機與GSM短信模塊串口通信.zip

32.72 KB, 下載次數: 40, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:407305 發表于 2018-12-24 11:48 | 只看該作者
剛好在做串口通信很有用
回復

使用道具 舉報

板凳
ID:421636 發表于 2019-3-28 10:59 | 只看該作者
感謝樓主,學習學習
回復

使用道具 舉報

地板
ID:454825 發表于 2019-3-29 18:01 | 只看該作者
正在找類似的程序,牛牛牛
回復

使用道具 舉報

5#
ID:64765 發表于 2021-3-19 19:52 | 只看該作者
正在學習單片機與PC通訊,用于單片機數據采集傳輸至PC機顯示與處理。謝謝分享。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人免费在线 | 午夜免费网站 | 免费国产一区二区视频 | 日本一区二区在线视频 | 日本韩国电影免费观看 | 精品免费国产一区二区三区四区介绍 | 午夜精品一区二区三区在线播放 | 欧美亚洲综合久久 | 国产1区2区3区 | 日本超碰 | 欧美美女二区 | 国产男女精品 | 风间由美一区二区三区在线观看 | 免费在线国产视频 | 91不卡 | 最新av片| 在线免费亚洲视频 | 久久久精品一区二区三区 | 午夜影院在线观看视频 | 欧美精品一区二区三区在线 | 久久99视频精品 | 成人欧美一区二区三区黑人孕妇 | 国产一区二区在线免费视频 | 日本一区二区三区四区 | 天堂综合网久久 | 91免费入口| 97国产精品 | 一本一道久久a久久精品综合蜜臀 | 欧美日韩高清 | 亚洲日本激情 | 91精品久久久久久综合五月天 | 拍真实国产伦偷精品 | 欧美一区二区在线观看 | 日韩av一二三区 | 特级一级黄色片 | 搞黄网站在线观看 | 亚洲精品一区二区在线观看 | 欧美日韩视频在线 | 日本午夜网 | 在线观看成年人视频 | 成人午夜 |