国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

STC8A8K單片機串口發送接收程序

[復制鏈接]
樓主
eng 發表于 2021-7-20 16:33:16 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
STC8A8K單片機串口發送接收程序 2.jpg
  1. #include <STC8.H>
  2. #define u8 unsigned char
  3. #define u16 unsigned int

  4. void UART_Init(u16 BaudRate) //串口初使化函數  11.0592Mhz 8A8K單片機
  5. {
  6.         u8 TH1_Dat;
  7.         switch(BaudRate)
  8.     {
  9.                 case 2400:  TH1_Dat=0x70; break;
  10.                 case 4800:  TH1_Dat=0xB8; break;
  11.                 case 9600:  TH1_Dat=0xDC; break;
  12.                 case 19200: TH1_Dat=0xEE; break;
  13.                 case 57600: TH1_Dat=0xFA; break;
  14.                 case 115200: TH1_Dat=0xFD; break;
  15.     }
  16.         TMOD &= 0x0F;         //清除定時器1模式位
  17.     TMOD |= 0x20;        //定時器工作模式,0x20-工作方式2:8位自動重裝載模式
  18.     SCON = 0x50;          //串行口工作方式控制寄存器,當前為1
  19.                                         //Bit[7:6],00為工作方式0,01方式1,10方式2,11方式3
  20.     PCON |=0x00;         //Bit7-波特率倍增位:0-不培增  1-培增
  21.         AUXR |= 0x40;   //定時器1時鐘為Fosc,即1T
  22.         AUXR &= 0xfE;   //串口1選擇定時器1為波特率發生器
  23.     TH1 = TH1_Dat;         //8位自動重裝載定時器模式下,TH1被用作自動重裝載值寄存器
  24.     TL1 = TH1_Dat;  //TL1為計數寄存器
  25.     TR1 = 1;                //定時器1開始計數
  26.         ET1 = 0;        //禁止定時器1中斷
  27.     ES = 1;               //串口中斷允許位
  28.     EA = 1;               //打開總中斷
  29. }

  30. void main()
  31. {
  32.         UART_Init(115200);
  33.         while(1);               
  34. }


  35. void Usart() interrupt 4
  36. {
  37.         u8 receiveData;

  38.         receiveData=SBUF;        //出去接收到的數據
  39.         RI = 0;                                //清除接收中斷標志位
  40.         SBUF=receiveData;        //將接收到的數據放入到發送寄存器
  41.         while(!TI);                        //等待發送數據完成
  42.         TI=0;                                //清除發送完成標志位
  43. }
  44. #include <STC8.H>

  45. #define u8 unsigned char
  46. #define u16 unsigned int

  47. void UART_Init(u16 BaudRate) //串口初使化函數  11.0592Mhz 8A8K單片機
  48. {
  49.         u8 TH1_Dat;
  50.         switch(BaudRate)
  51.     {
  52.                 case 2400:  TH1_Dat=0x70; break;
  53.                 case 4800:  TH1_Dat=0xB8; break;
  54.                 case 9600:  TH1_Dat=0xDC; break;
  55.                 case 19200: TH1_Dat=0xEE; break;
  56.                 case 57600: TH1_Dat=0xFA; break;
  57.                 case 115200: TH1_Dat=0xFD; break;
  58.     }
  59.         TMOD &= 0x0F;         //清除定時器1模式位
  60.     TMOD |= 0x20;        //定時器工作模式,0x20-工作方式2:8位自動重裝載模式
  61.     SCON = 0x50;          //串行口工作方式控制寄存器,當前為1
  62.                                         //Bit[7:6],00為工作方式0,01方式1,10方式2,11方式3
  63.     PCON |=0x00;         //Bit7-波特率倍增位:0-不培增  1-培增
  64.         AUXR |= 0x40;   //定時器1時鐘為Fosc,即1T
  65.         AUXR &= 0xfE;   //串口1選擇定時器1為波特率發生器
  66.     TH1 = TH1_Dat;         //8位自動重裝載定時器模式下,TH1被用作自動重裝載值寄存器
  67.     TL1 = TH1_Dat;  //TL1為計數寄存器
  68.     TR1 = 1;                //定時器1開始計數
  69.         ET1 = 0;        //禁止定時器1中斷
  70.     ES = 1;               //串口中斷允許位
  71.     EA = 1;               //打開總中斷
  72. }

  73. void main()
  74. {
  75.         UART_Init(115200);
  76.         while(1);               
  77. }


  78. void Usart() interrupt 4
  79. {
  80.         u8 receiveData;

  81.         receiveData=SBUF;        //出去接收到的數據
  82.         RI = 0;                                //清除接收中斷標志位
  83.         SBUF=receiveData;        //將接收到的數據放入到發送寄存器
  84.         while(!TI);                        //等待發送數據完成
  85.         TI=0;                                //清除發送完成標志位
  86. }
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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