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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

顯示漢字<UART>下位機51單片機 上位機 易語言

[復制鏈接]
跳轉到指定樓層
樓主
ID:878235 發表于 2021-1-16 23:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用單片機,發送漢字字符串,通過RS-232 傳送到電腦電腦 用易語言,接收漢字字符串,并且顯示漢字

數據格式
開始  長度  數據區  校驗

本例題包含了,串口發送時的問題
1 時差
2 數據的屬性
3 丟包


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:878235 發表于 2021-1-16 23:18 | 只看該作者
//數據包格式

// 開始    長度 數據1 數據2 數據N 校驗
// BEGIN    3   0XF1  0XF4  0XF5  0X00 0XF6
#include <reg52.H>
//===============================================================
//==============數據包 相關變量  函數=============================
//===============================================================
//原始數據
char YS_DATA[32];
// 數據包
char  PACKET[32+8];
// 數據長度
char DATA_SIZE;
//數據校驗
int DATA_FCS;
//以上是數據包 結構
//=============================
char *P_HZ;//存放漢字
// 格式 漢字序列 格式符 \0
// 例如 你好,我是張平  \0

void ADD_DATA(); //裝載原始數據
void ADD_BEGIN();//添加 開始標志 BEGIN
void ADD_SIZE(); //添加 大小標志
void ADD_FCS();  //添加 校驗標志


void ADD_DATA()
{//裝載原始數據
   char i;
         for(i=0;i<DATA_SIZE;i++)
        {
                PACKET[i+6]=YS_DATA[i];
               
        }
}
void ADD_BEGIN()
{//添加 開始標志 BEGIN
        PACKET[0]='B';
        PACKET[1]='E';
        PACKET[2]='G';
        PACKET[3]='I';
        PACKET[4]='N';
       
}
void ADD_SIZE()
{//添加 大小標志
                PACKET[5]=DATA_SIZE;
       
}

void ADD_FCS()
{//添加 校驗標志
        int bdata num;       
        int bdata n1,n2;
  n1=YS_DATA[0];
  n2=YS_DATA[DATA_SIZE-1];
        //取出數據
        n1=n1&0x00ff;
        n2=n2&0x00ff;
        //8bit  變 16bit
        num=n1+n2;
        //計算校驗
        PACKET[DATA_SIZE+6]=num>>8;
        PACKET[DATA_SIZE+6+1]=num;
       
       
}


//===============================================================
//==============      數據包  END   =============================
//===============================================================










//===============================================================
//==============      UART  相關    =============================
//===============================================================
void rs232_init(void)
{//初始化
    SCON=0x50;           //設定串口工作方式
    PCON=0x00;           //波特率不倍增

    TMOD=0x20;           //定時器1工作于8位自動重載模式, 用于產生波特率
    EA=1;
    ES = 1;              //允許串口中斷
//---------------------------------------
           TL1=0xA0;         //波特率9600
     TH1=0xFF;

//--------------------------------------
         TR1=1;

         
}

  void senddata(char dat)
{//發送一個字節
     
                        TI = 0;
            SBUF = dat;
      while(!TI);

}
//===============================================================
//==============      UART  相關  END ===========================
//===============================================================



//===============================================================
//==============      漢字處理        ===========================
//===============================================================



//1 置漢字
//2 取漢字
//3 取個數
char HZ_GET_NUM(char *XC_P)
{//3 取個數  不算0
        char n;
        for(n=0;XC_P[n]!='\0';n++);
        //逐個檢查\0 判斷漢字串中有多少個有效字符
        return(n);
}


void HZ_SET(char *XC_P)
{//1 置漢字
        char i;
        for(i=0;i<=HZ_GET_NUM(XC_P);i++)
        {
               
                YS_DATA[i]=XC_P[i];
        }
       
       
}
char * HZ_GET(char *XC_P)
{//2 取漢字
        return(XC_P);
}

//char YS_DATA[16];
//// 數據包
//char  PACKET[16+8];
//// 數據長度
//char DATA_SIZE;
////數據校驗
//int DATA_FCS;
////以上是數據包 結構
main()
{
  char i;
//========裝載漢字================
HZ_SET("你好,我是張平"); //裝入指針
DATA_SIZE=HZ_GET_NUM("你好,我是張平");//取漢字長度 不包括0
//153 0435 2265       
       
       
       


//封包
        ADD_DATA();         //添加原始數據
        ADD_BEGIN();//添加開始
        ADD_SIZE();//添加 長度
        ADD_FCS();//添加校驗
  rs232_init();
//數據包格式 開始 長度 數據1 數據2 數據N 校驗
  for(i=0;i<10;i++)
        {//自動停止發送,10次
                        
          for(i=0;i<=DATA_SIZE+6+1;i++)
                {
                        senddata(PACKET[i]);
                        yc(8);

                }       
       
        }
               
}
// 0  1  2  3  4  5  6  7  8  9
// 42 45 47 49 4E 02 C4 E3 01 A7   

回復

使用道具 舉報

板凳
ID:878235 發表于 2021-1-16 23:18 | 只看該作者
.版本 2
.支持庫 spec

.程序集 窗口程序集1

.子程序 _端口1_數據到達
.參數 數據字節值, 整數型

調試輸出 (數據字節值)
函數_裝載 (數據字節值)
' 調試輸出 (“數據:” + 到文本 (數據字節值) + “定位:” + 到文本 (變量_定位))


.子程序 __啟動窗口_創建完畢

變量_數據 = 到字節集 (“AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGG”)

變量_定位 = 0
變量_開始位 [1] = 0
變量_開始位 [2] = 0
變量_開始位 [3] = 0
變量_開始位 [4] = 0
變量_開始位 [5] = 0
變量_長度位 = 0
變量_校驗高 = 0

.子程序 函數_裝載, 整數型, , 審查成功 0 失敗 12345 開始 6 長度 7。。數據
.參數 參數_1, 整數型


.如果 (參數_1 = 66)
    變量_定位 = 0
.否則

.如果結束
變量_定位 = 變量_定位 + 1
' 判斷開始,并裝載數據
' 并不對開始位進行檢查
.判斷開始 (變量_定位 = 1)
    變量_開始位 [1] = 參數_1
.判斷 (變量_定位 = 2)
    變量_開始位 [2] = 參數_1
.判斷 (變量_定位 = 3)
    變量_開始位 [3] = 參數_1
.判斷 (變量_定位 = 4)
    變量_開始位 [4] = 參數_1
.判斷 (變量_定位 = 5)
    變量_開始位 [5] = 參數_1
.默認

.判斷結束
' BEGIN
.判斷開始 (變量_定位 = 6)
    變量_長度位 = 參數_1
.默認

.判斷結束
' 長度
.判斷開始 (變量_定位 = 5 + 1 + 變量_長度位 + 1)
    變量_校驗高 = 參數_1
.默認

.判斷結束
.判斷開始 (變量_定位 = 5 + 1 + 變量_長度位 + 1 + 1)
    變量_校驗低 = 參數_1
.默認

.判斷結束

.判斷開始 (字符 (變量_開始位 [1]) + 字符 (變量_開始位 [2]) + 字符 (變量_開始位 [3]) + 字符 (變量_開始位 [4]) + 字符 (變量_開始位 [5]) = “BEGIN”)
    .判斷開始 (變量_定位 > 5 + 1 且 變量_定位 < 5 + 1 + 變量_長度位 + 1)
        變量_數據 [變量_定位] = 到字節 (參數_1)
        ' 調試輸出 (“裝載數據:” + 到文本 (到字節 (參數_1)) + “  ” + 到文本 (變量_定位))

    .默認

    .判斷結束




.默認

.判斷結束


返回 (變量_定位)


.子程序 _按鈕1_被單擊
.局部變量 i, 整數型

編輯框BEGIN.內容 = 字符 (變量_開始位 [1]) + 字符 (變量_開始位 [2]) + 字符 (變量_開始位 [3]) + 字符 (變量_開始位 [4]) + 字符 (變量_開始位 [5])

編輯框長度.內容 = 到文本 (變量_長度位)

編輯框校驗.內容 = “”
編輯框校驗.內容 = 到文本 (變量_校驗高)
編輯框校驗.內容 = 編輯框校驗.內容 + “|”
編輯框校驗.內容 = 編輯框校驗.內容 + 到文本 (變量_校驗低)



編輯框內容.內容 = “”
.計次循環首 (變量_長度位, i)
    編輯框內容.內容 = 編輯框內容.內容 + “|”
    編輯框內容.內容 = 編輯框內容.內容 + 到文本 (變量_數據 [i + 6])


.計次循環尾 ()
編輯框漢字顯示.內容 = 到文本 (取字節集中間 (變量_數據, 7, 變量_長度位))


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频在线一区二区 | 日韩欧美中文字幕在线观看 | 国产精品乱码一区二区三区 | 91精品久久久久久综合五月天 | 精品国产乱码久久久久久闺蜜 | 免费一区 | 色狠狠桃花综合 | 三级特黄特色视频 | 91国产视频在线观看 | 日韩精品1区2区3区 成人黄页在线观看 | 精品三级在线观看 | 亚洲一区二区视频 | 在线看av的网址 | 麻豆视频在线看 | 亚洲国产一区在线 | 日日噜噜夜夜爽爽狠狠 | 国产成人免费在线 | 国产午夜精品久久久久 | 免费人成在线观看网站 | 99精品国产一区二区青青牛奶 | 国产精品色| 日本特黄特色aaa大片免费 | 亚洲天天干| 色一情一乱一伦一区二区三区 | 午夜激情影院 | 日韩欧美一级 | 人人九九精 | 亚洲午夜在线 | 在线观看电影av | 国产精品一区二区av | 成人影音| 天堂综合 | 欧美高清hd | 国产精品免费看 | 99久久婷婷国产亚洲终合精品 | 成人福利在线视频 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 日韩影院在线观看 | 亚洲手机在线 | 一区2区 | 欧美性影院 |