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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4008|回復: 0
收起左側

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

[復制鏈接]
ID:149839 發表于 2016-11-23 23:03 | 顯示全部樓層 |閱讀模式
  1. fine  BUF_LENTH 128                  //定義串口接收緩沖長度
  2. unsigned char  uart1_wr;                  //寫計數器
  3. unsigned char  uart1_rd;                  //讀計數器
  4. unsigned char  xdata RX0_Buffer[BUF_LENTH]; //接收緩沖
  5. unsigned char flag;           //定義串口是否有接收到數據的標志位
  6. unsigned char i;           //普通的循環變量
  7. bit  B_TI;            //定義B_TI為bit類型
  8. void uart1_init(void);         //串口初始化函數聲明
  9. void Uart1_TxByte(unsigned char dat);   //串口發送單個字符函數聲明
  10. void Uart1_String(unsigned char code *puts); //串口發送字符串函數函數聲明
  11. void delay_ms(unsigned char ms);    //延時函數聲明

  12. #define MAIN_Fosc  11059200UL       //定義外部晶振的頻率
  13. #define Baudrate0  9600UL        //定義串口波特率頻率         
  14. #define BRT_Reload    (256 - MAIN_Fosc / 16 / Baudrate0) //裝入定時器1工作在1倍模式下的益出數
  15. /*************************************************************
  16. *  函數名:main( void )
  17. *  輸入:無
  18. *  輸出:無
  19. *  功能描述:串口初始化參數為9600 8 N 1.
  20.              程序一開始執行輸出"www*frotech*com",然后將
  21.     串口接收到的數據原樣返回
  22. **************************************************************/
  23. void main(void)
  24. {
  25. uart1_init();          //調用串口初始化函數
  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;        //將寫計數器0
  37.      flag = 0;          //將中斷判斷讀清0
  38.   }
  39. }
  40. }

  41. /*************************************************************
  42. *  函數名:uart1_init(void)
  43. *  輸入:無
  44. *  輸出:無
  45. *  功能描述:串口初始化參數為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  使用獨立波特率發生器作為串行口的波特率發生器    P266
  53. AUXR |=  0x04;            //BRTx12=1 波特率發生器每一個時鐘計數一次
  54. //BRT = BRT_Reload;              //把根據波特率計算的 定時器的值,裝入波特率發生器          P267
  55. BRT =0xB8;
  56. AUXR |=  0x10;                                 //BRTR=1   開啟獨立波特率發生器運行        P266                                 
  57. ES  = 1;             //IE寄存器的ES位為1 串口1中斷開         P192
  58. EA = 1;              //IE寄存器的EA位為1 CPU開中斷
  59. }
  60. /*************************************************************
  61. *  函數名:Uart1_TxByte(unsigned char dat)
  62. *  輸入:發送字符
  63. *  輸出:無
  64. *  功能描述:將單個字符通過串口發送.
  65.             
  66. **************************************************************/
  67. void Uart1_TxByte(unsigned char dat)       //串口1發送單個字符函數
  68. {
  69.     B_TI = 0;             //將B_TI置0
  70. SBUF = dat;             //將發送的數據寫入SBUF緩沖器中
  71. while(!B_TI);            //等待發送 緩沖器發送完數據
  72. B_TI = 0;             //將B_TI置位0
  73. }
  74. /*************************************************************
  75. *  函數名:Uart1_String(unsigned char code *puts)
  76. *  輸入:發送字符串
  77. *  輸出:無
  78. *  功能描述:將字符串通過調用單個字符函數發送.
  79.             
  80. **************************************************************/
  81. void Uart1_String(unsigned char code *puts)      
  82. {
  83.     for(; *puts != 0; puts++)
  84. {
  85.         Uart1_TxByte(*puts);         //以指針的形式將字符串分解為單個字符,調用上面的單個字符發送函數發送
  86. }
  87. }

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


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区二区三区乱码在线 | 日韩国产欧美一区 | 欧美视频第三页 | av男人的天堂av | 欧美成年人网站 | 国产精品国产a | www亚洲免费国内精品 | 亚洲精选久久 | 久综合 | 亚洲欧美一区二区三区1000 | 国产乱码精品一区二区三区av | 中文字幕在线观看一区二区 | 婷婷二区 | 午夜精品久久久久久久 | 羞羞网站在线观看 | 国产精品一区在线观看 | 精品免费在线 | 成人在线视频网站 | 粉嫩高清一区二区三区 | 国产在线观看一区二区三区 | 日韩欧美精品 | 亚洲人成网站777色婷婷 | 91精品国产日韩91久久久久久 | 中文字幕视频在线观看 | 激情欧美一区二区三区中文字幕 | 欧美一级高潮片免费的 | 久久精品久久久久久 | 日韩在线免费视频 | a视频在线观看 | 亚洲欧美日韩一区二区 | 国产精彩视频在线观看 | 欧美一页 | 欧美精品久久久久久久久久 | a级黄色片视频 | av免费电影在线 | 中文字幕精品一区 | 天天玩天天操天天干 | 久草网在线视频 | 国产一区二区 | 久久专区 | 美国一级黄色片 |