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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3917|回復: 0
打印 上一主題 下一主題
收起左側(cè)

STC12C5A16S2單片機的串口通信演示實驗

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:149839 發(fā)表于 2016-11-23 23:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. fine  BUF_LENTH 128                  //定義串口接收緩沖長度
  2. unsigned char  uart1_wr;                  //寫計數(shù)器
  3. unsigned char  uart1_rd;                  //讀計數(shù)器
  4. unsigned char  xdata RX0_Buffer[BUF_LENTH]; //接收緩沖
  5. unsigned char flag;           //定義串口是否有接收到數(shù)據(jù)的標志位
  6. unsigned char i;           //普通的循環(huán)變量
  7. bit  B_TI;            //定義B_TI為bit類型
  8. void uart1_init(void);         //串口初始化函數(shù)聲明
  9. void Uart1_TxByte(unsigned char dat);   //串口發(fā)送單個字符函數(shù)聲明
  10. void Uart1_String(unsigned char code *puts); //串口發(fā)送字符串函數(shù)函數(shù)聲明
  11. void delay_ms(unsigned char ms);    //延時函數(shù)聲明

  12. #define MAIN_Fosc  11059200UL       //定義外部晶振的頻率
  13. #define Baudrate0  9600UL        //定義串口波特率頻率         
  14. #define BRT_Reload    (256 - MAIN_Fosc / 16 / Baudrate0) //裝入定時器1工作在1倍模式下的益出數(shù)
  15. /*************************************************************
  16. *  函數(shù)名:main( void )
  17. *  輸入:無
  18. *  輸出:無
  19. *  功能描述:串口初始化參數(shù)為9600 8 N 1.
  20.              程序一開始執(zhí)行輸出"www*frotech*com",然后將
  21.     串口接收到的數(shù)據(jù)原樣返回
  22. **************************************************************/
  23. void main(void)
  24. {
  25. uart1_init();          //調(diào)用串口初始化函數(shù)
  26. Uart1_String("www*frotech*com");     //一開始就輸出"www*frotech*com"
  27. while(1)
  28. {
  29.      if(flag == 1)         //是否有串口中斷
  30.   {
  31.      
  32.      for(i = 0; i < uart1_wr; i++)   
  33.      {
  34.          Uart1_TxByte(RX0_Buffer[ i]);    //將接收到的字符串原樣輸出
  35.      }
  36.      uart1_wr = 0;        //將寫計數(shù)器0
  37.      flag = 0;          //將中斷判斷讀清0
  38.   }
  39. }
  40. }

  41. /*************************************************************
  42. *  函數(shù)名:uart1_init(void)
  43. *  輸入:無
  44. *  輸出:無
  45. *  功能描述:串口初始化參數(shù)為9600 8 N 1.
  46.             
  47. **************************************************************/
  48. void uart1_init(void)         
  49. {
  50. PCON |= 0x80;            //SMD=1    串行通訊的波特率加倍  P265
  51. SCON = 0x50;            //當SM0/FE=0 SM1=1時組成工作方式1(8位UART,波特率可變)    P264
  52. AUXR |=  0x01;            //S1BRS=1  使用獨立波特率發(fā)生器作為串行口的波特率發(fā)生器    P266
  53. AUXR |=  0x04;            //BRTx12=1 波特率發(fā)生器每一個時鐘計數(shù)一次
  54. //BRT = BRT_Reload;              //把根據(jù)波特率計算的 定時器的值,裝入波特率發(fā)生器          P267
  55. BRT =0xB8;
  56. AUXR |=  0x10;                                 //BRTR=1   開啟獨立波特率發(fā)生器運行        P266                                 
  57. ES  = 1;             //IE寄存器的ES位為1 串口1中斷開         P192
  58. EA = 1;              //IE寄存器的EA位為1 CPU開中斷
  59. }
  60. /*************************************************************
  61. *  函數(shù)名:Uart1_TxByte(unsigned char dat)
  62. *  輸入:發(fā)送字符
  63. *  輸出:無
  64. *  功能描述:將單個字符通過串口發(fā)送.
  65.             
  66. **************************************************************/
  67. void Uart1_TxByte(unsigned char dat)       //串口1發(fā)送單個字符函數(shù)
  68. {
  69.     B_TI = 0;             //將B_TI置0
  70. SBUF = dat;             //將發(fā)送的數(shù)據(jù)寫入SBUF緩沖器中
  71. while(!B_TI);            //等待發(fā)送 緩沖器發(fā)送完數(shù)據(jù)
  72. B_TI = 0;             //將B_TI置位0
  73. }
  74. /*************************************************************
  75. *  函數(shù)名:Uart1_String(unsigned char code *puts)
  76. *  輸入:發(fā)送字符串
  77. *  輸出:無
  78. *  功能描述:將字符串通過調(diào)用單個字符函數(shù)發(fā)送.
  79.             
  80. **************************************************************/
  81. void Uart1_String(unsigned char code *puts)      
  82. {
  83.     for(; *puts != 0; puts++)
  84. {
  85.         Uart1_TxByte(*puts);         //以指針的形式將字符串分解為單個字符,調(diào)用上面的單個字符發(fā)送函數(shù)發(fā)送
  86. }
  87. }

  88. /*************************************************************
  89. *  函數(shù)名:UART1_RCV (void)
  90. *  輸入:無
  91. *  輸出:無
  92. *  功能描述:定義串口的中斷處理函數(shù),串口中斷號為4.
  93.              當串口接受完或者發(fā)送完一幀數(shù)據(jù)
  94.     時產(chǎn)生中斷,告知CPU進行中斷處理
  95. **************************************************************/
  96. void UART1_RCV (void) interrupt 4       //中斷接收函數(shù) 中斷號為4    P188
  97. {
  98. if(RI)             //判斷接收的數(shù)據(jù)是否接收完,當接收到第8位時 接收結(jié)束  RI會置1   P265
  99. {
  100.   RI = 0;            //接收中斷使能位清0
  101.   RX0_Buffer[uart1_wr++] = SBUF;      //將串口緩沖器SBUF的數(shù)據(jù)放到數(shù)據(jù)接收緩沖器RX0_Buffer[]中
  102.   flag = 1;           //將標志位置1方便主函數(shù)判斷
  103. }
  104. if(TI)             //判斷發(fā)送的數(shù)據(jù)是否發(fā)送完,當發(fā)送到第8位時 發(fā)送結(jié)束  TI會置1    P265
  105. {
  106.   TI = 0;            //將發(fā)送結(jié)束標志位 TI清0
  107.   B_TI = 1;           //將B_TI 置1 方便上面的Uart1_TxByte 函數(shù)判斷
  108. }
  109. }
  110. /*************************************************************
  111. *  函數(shù)名:delay_ms(unsigned char ms)
  112. *  輸入:延時時間
  113. *  輸出:無
  114. *  功能描述:產(chǎn)生毫秒級別延時.
  115.             
  116. **************************************************************/
  117. void delay_ms(unsigned char ms)       //毫秒級延時函數(shù)
  118. {
  119.     unsigned int i;
  120. do{
  121.      i = MAIN_Fosc /1400;
  122.   while(--i);
  123. }while(--ms);
  124. }
復制代碼


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www视频在线观看 | 午夜久久久久久久久久一区二区 | 欧美a级成人淫片免费看 | 国产精品视频网 | 国产一区二区av | 国产午夜精品久久久 | 中文字幕一区二区三区精彩视频 | 亚洲国产视频一区二区 | 在线视频一区二区三区 | 天堂网中文| 在线激情视频 | 在线播放一区二区三区 | 亚洲巨乳自拍在线视频 | 99久久久无码国产精品 | 伊人青青久久 | 亚洲欧美日韩在线不卡 | 午夜理伦三级理论三级在线观看 | 亚洲成人天堂 | 一区二区三区av | 中文字幕日韩在线观看 | 亚洲成人av在线 | 99久久精品免费看国产免费软件 | 日本精品一区二区三区在线观看视频 | 欧美综合色 | 国产精品久久久久久久久久久久久久 | 精品视频在线播放 | 午夜免费成人 | 亚洲精品久久久久久久久久久 | av天空| 不卡一区二区三区四区 | 欧美电影免费观看高清 | 国产精品99视频 | 亚洲视频在线看 | 久久高清亚洲 | 综合久久久久久久 | 91免费小视频 | 久久6视频 | 国产精品99久久久久久久vr | 95国产精品 | 亚洲看片 | 国产美女久久 |