欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機模擬串口程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
51單片機做的模擬串口程序源碼


  1. #include "Usart.h"
  2. bit RXD_OK=0;                           //接收完成標志位
  3. bit TXD_OK=0;                        //發送完成標志位
  4. bit Send_State=0;                //發送開始標志位
  5. bit Sending_Flag=0;                //發送中標志位
  6. uchar RXD_Data=0;                //接收數據緩存區
  7. uchar TXD_Data=0;                //發送數據緩存區
  8. sbit led1=P3^6;
  9. sbit led2=P3^5;
  10. sbit led3=P3^4;
  11. /***************************************************************************
  12. *函數名稱:Usart_Init(uint Baud)
  13. *功能    :串口初始化                                波特率對應定時器溢出初值(11.0592)
  14. *入口參數:波特率                                        4800        192
  15. *出口參數:無                                                2400        128
  16. *說明    :                                                        1200        0
  17. ***************************************************************************/
  18. void Usart_Init(uint Baud)
  19. {                                                                       
  20.         uchar T0_Low=0;                                       
  21.         T0_Low=(Crystal/(12*Baud))/3;        //求出定時器初值  3倍采樣速率
  22.         TMOD|=0x02;                                                //定時器0自動重裝模式
  23.         TH0=TL0=256-T0_Low;
  24.         ET0=TR0=1;
  25.         EA=1;
  26. }
  27. /***************************************************************************
  28. *函數名稱:Data_RXD()
  29. *功能    :數據接收
  30. *入口參數:無
  31. *出口參數:無
  32. *說明    :
  33. ***************************************************************************/
  34. void Data_RXD()
  35. {
  36.         static uchar RXD_State=0;
  37.         static uchar RXD_Cnt=0;
  38.         static uchar RXD_Count=0;
  39.         switch (RXD_State)
  40.         {
  41.                 case 0:                                                                 //3倍采樣速率采起始位
  42.                 {                                                                         
  43.                         if(RXD_IO==0)
  44.                                 RXD_State=1;
  45.                 }break;
  46.                 case 1:                                                                 //采到兩次起始位
  47.                 {                                                                         //采樣頻率校準到1/3與2/3之前
  48.                         if(RXD_IO==0)
  49.                                 RXD_State=2;
  50.                         else RXD_State=0;
  51.                 }break;
  52.                 case 2:                                                                 //以正常波特率采樣,取出八位數據位
  53.                 {
  54.                          if(++RXD_Cnt>=3)                                 
  55.                         {
  56.                                 RXD_Cnt=0;
  57.                                 if(RXD_IO==1)
  58.                                         RXD_Data=RXD_Data|(1<<RXD_Count);
  59.                                 if(++RXD_Count>=8)
  60.                                 {
  61.                                         RXD_Count=0;
  62.                                         RXD_State=3;
  63.                                 }
  64.                         }
  65.                 }break;
  66.                 case 3:                                                                  //取出結束位
  67.                 {                                                                          //結束位正常接收完成標志位置1
  68.                         if(++RXD_Cnt>=3)
  69.                         {
  70.                                 RXD_Cnt=0;
  71.                                 if(RXD_IO==1)
  72.                                 {
  73.                                         RXD_OK=1;
  74.                                         RXD_State=0;
  75.                                 }       
  76.                                 else
  77.                                 {
  78.                                         RXD_Data=0;
  79.                                         RXD_State=0;
  80.                                 }
  81.                         }       
  82.                 }break;
  83.         }       
  84. }
  85. /***************************************************************************
  86. *函數名稱:Data_TXD_Buff(uchar Data_TXD)
  87. *功能    :數據送入發送緩存器
  88. *入口參數:待發送數據
  89. *出口參數:無
  90. *說明    :
  91. ***************************************************************************/
  92. void Data_TXD_Buff(uchar Data_TXD)
  93. {
  94.        
  95.         TXD_Data=Data_TXD;                                  //數據送入緩存區
  96.         while(Sending_Flag);                          
  97.         Send_State=1;                                          //發送開始標志位
  98. }
  99. /***************************************************************************
  100. *函數名稱:Data_TXD()
  101. *功能    :數據發送
  102. *入口參數:待發送數據
  103. *出口參數:無
  104. *說明    :
  105. ***************************************************************************/
  106. void Data_TXD()
  107. {
  108.         static uchar TXD_State=0;
  109.         static uchar TXD_Cnt=0;
  110.         static uchar TXD_i=0;
  111.         if(++TXD_i>=3)
  112.         {
  113.                 TXD_i=0;
  114.                 switch (TXD_State)
  115.                 {
  116.                         case 0:                                                 //檢測發送開始標志位
  117.                         {
  118.                                 TXD_IO=1;       
  119.                                  if(Send_State==1)
  120.                                 {       
  121.                                         Send_State=0;
  122.                                         TXD_State=1;
  123.                                         Sending_Flag=1;                 //發送中標志位置1
  124.                                         TXD_Cnt=0;
  125.                                         TXD_IO=0;                         //發送起始位
  126.                                 }
  127.                         }break;
  128.                         case 1:                                                 //發送八位數據
  129.                         {                                                         //八位數據從低到高發送
  130.                                 TXD_IO=TXD_Data&(1<<TXD_Cnt);
  131.                                  if(++TXD_Cnt>=8)
  132.                                 {
  133.                                         TXD_Cnt=0;
  134.                                         TXD_State=2;
  135.                                 }
  136.                         }break;
  137.                         case 2:
  138.                         {
  139.                                 TXD_IO=1;                                 //發送結束位
  140.                                 TXD_State=3;
  141.                         }break;
  142.                         case 3:
  143.                         {
  144.                                 TXD_State=0;
  145.                                 Sending_Flag=0;                     //發送中標志位清0
  146.                                 TXD_Data=0;
  147.                                 TXD_OK=1;       
  148.                         }break;
  149.                 }
  150.         }       
  151. }

  152. /***************************************************************************
  153. *函數名稱:TimerT0()
  154. *功能    :定時器T0中斷
  155. *入口參數:無
  156. *出口參數:無
  157. *說明    :
  158. ***************************************************************************/
  159. void TimerT0()interrupt 1
  160. {
  161.         Data_RXD();
  162.         Data_TXD();                         
  163. }
復制代碼


下載:
模擬串口.zip (41.61 KB, 下載次數: 88)

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

使用道具 舉報

沙發
ID:250483 發表于 2018-4-16 21:52 | 只看該作者
正在找這個資料呢
回復

使用道具 舉報

板凳
ID:561983 發表于 2019-6-26 13:42 | 只看該作者
有硬件原理圖嗎
回復

使用道具 舉報

地板
ID:561983 發表于 2019-6-26 13:43 | 只看該作者
有原理圖或者PCB文件嗎
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
6#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表