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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口二波特率250000接收,轉串口-9600到電腦串口助手

[復制鏈接]
跳轉到指定樓層
樓主
串口二波特率250000接收,轉串口一9600到電腦串口助,使用STC8H1K08單片機,IRC時鐘30MHz。由于存儲空間有限,串口緩存是20字節。15.6ms 以內的數據判斷為一包,超過15.6毫秒的數據,判斷為下一包數據,下次再打印到串口助手。


單片機源程序如下:
  1. #include "all.h"

  2. u8 xdata Uart_2R_1T_Buffer[Down_MAX];//串口緩存數組,串口2接收,串口1發送

  3. void Timer0_Init()
  4. {
  5.         AUXR &= 0x7F;                                                //定時器時鐘12T模式
  6.         TMOD &= 0xF0;                                                //設置定時器模式
  7.         TMOD |= 0x02;                                                //設置定時器模式
  8.         TL0 = 0x83;                                                        //設置定時初始值
  9.         TH0 = 0x83;                                                        //設置定時重載值
  10.         TF0 = 0;                                                        //清除TF0標志
  11.         TR0 = 1;                                                        //定時器0開始計時
  12.         ET0=1;
  13.         EA=1;                                                                //中斷總開關必須閉合導通
  14. }

  15. //*********************************《人人學會單片機》視頻教程,祁緒電子2021-10
  16. //時間管理函數,用于數據包區分頭尾,可以用定時器中斷代替本函數。
  17. //*********************************《人人學會單片機》視頻教程,祁緒電子2021-10
  18. void Timer0_Rountine(void) interrupt 1
  19. {
  20.         static u8 idata count1;
  21.         count1++;
  22.         if(count1>20)                                                //調整count值,使Uart_Timer每大約每1ms增加1。
  23.         {        
  24.                 count1=0;               
  25.                 Uart_Timer++;                                        //需要確保大約每1ms增加1
  26.                 if(Uart_Timer==15)                                //用于識別幀間隔,50ms定時
  27.                 {
  28.                         Uart1_Flag=1;                                //標志位允許發送下一次發送
  29.                         Uart1_Up_Data_Drive();                //調用串口發送函數(但不是每次都發送數據)
  30.                 }
  31.                 if(Uart_Timer==50)                                //用于識別幀間隔,50ms定時
  32.                 {
  33.                         Down_Count=0;                                //一幀數據包字節的位置歸0,表示首字節
  34.                 }
  35.                 if(Uart_Timer>50)                                //用于識別幀間隔,50ms定時
  36.                 {
  37.                         Uart_Timer=51;                                //超時等待,防止大于255歸0
  38.                 }
  39.         }
  40.         Uart1_Up_Data_Drive();                                //調用串口發送函數(但不是每次都發送數據)
  41. }

  42. void main()
  43. {
  44.         P1M0=0;P1M1=0;
  45.         Timer0_Init();
  46.         Uart1_Init();
  47.         Uart2_Init();
  48.         while(1)
  49.         {
  50.                
  51.         }
  52. }
復制代碼
  1. #include "all.h"                                                                                         //從工程目錄下》c_and_h文件夾查找all文件
  2. bit Uart1_Flag=1;

  3. void Uart1_Init()
  4. {
  5.         SCON = 0x50;                //8位數據,可變波特率
  6.         AUXR &= 0xBF;                //定時器時鐘12T模式
  7.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  8.         TMOD &= 0x0F;                //設置定時器模式
  9.         TL1 = 0xBF;                //設置定時初始值
  10.         TH1 = 0xFF;                //設置定時初始值
  11.         ET1 = 0;                //禁止定時器%d中斷
  12.         TR1 = 1;                //定時器1開始計時
  13.         
  14.         ES=1;                                                                                                        //允許 串口1 向CPU申請中斷
  15.                                                                                                                         //總中斷控制開關閉合EA=1;
  16. }//*/


  17. void Uart1_Up_Data_Drive()
  18. {
  19.         static u8 xdata count=0;
  20.         if(Uart1_Flag)                                                //標志允許,發送一個字節
  21.         {
  22.                 Uart1_Flag=0;                                        //標志位翻轉,只允許發送一個字節,避免擁擠
  23.                 if(count<=Down_Count)
  24.                 {
  25.                         SBUF=Uart_2R_1T_Buffer[count];//每次只發送一個字節
  26.                         count++;                                        //字節編號增加。
  27.                 }
  28.                 else
  29.                 {
  30.                         Uart1_Flag=0;                                //大于最多發送數量,不發送了
  31.                         count=0;                                        //串口TI不會置1,所以不再發送
  32.                 }
  33.         }
  34. }


  35. void Uart1_Routine() interrupt 4
  36. {
  37.         if(RI)                                                                                                        //如果是接收中斷
  38.         {
  39.                 RI=0;                                                                                                //清0標志
  40.         }
  41.         if(TI)                                                                                                        //否則應該是發送后的中斷
  42.         {
  43.                 TI=0;                                                                                                //清發送中斷標志
  44.                 Uart1_Flag=1;                                                                                //標志位允許發送下一次發送
  45.                 Uart1_Up_Data_Drive();                                                                //馬上發送下一位數據
  46.         }
  47. }//*/
復制代碼
Keil5代碼下載:
STC8H單片機串口2轉串口1.zip (44.81 KB, 下載次數: 15)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:884042 發表于 2022-7-29 21:55 | 只看該作者
您好,請問可以做一個STC單片機sram擴展的教程嗎?STC單片機內部的sram太少了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99久久99 | 综合国产在线 | 成人在线播放网站 | 男女免费观看在线爽爽爽视频 | 亚洲免费一区 | 91看片官网 | 国产亚洲精品久久yy50 | 一区二区三区亚洲 | 精品国产鲁一鲁一区二区张丽 | 亚洲高清在线 | 天天操天天干天天曰 | 日韩视频一区二区 | 成人日韩精品 | 欧美xxxx日本| 亚洲天堂日韩精品 | 久久久国产精品 | 伦理片97 | 一区精品视频在线观看 | 国产精品亚洲一区 | 日韩在线观看视频一区 | 精品日韩一区二区 | 欧美精品一二区 | 91成人免费电影 | 国产精品.xx视频.xxtv | 美日韩中文字幕 | a黄视频 | 一区二区三区四区国产 | 中文字幕国产一区 | 亚洲欧美一区二区三区国产精品 | 一区二区三区免费 | 日韩视频免费 | 97超碰人人| 黄色片免费在线观看 | 一道本在线 | 精品视频久久久久久 | 中文字幕 在线观看 | 888久久久 | 国产一区二区三区 | 国产亚洲精品久久午夜玫瑰园 | 成人午夜网 | 操久久|