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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

數(shù)據(jù)格式
開始  長度  數(shù)據(jù)區(qū)  校驗

本例題包含了,串口發(fā)送時的問題
1 時差
2 數(shù)據(jù)的屬性
3 丟包


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:878235 發(fā)表于 2021-1-16 23:18 | 只看該作者
//數(shù)據(jù)包格式

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

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


void ADD_DATA()
{//裝載原始數(shù)據(jù)
   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];
        //取出數(shù)據(jù)
        n1=n1&0x00ff;
        n2=n2&0x00ff;
        //8bit  變 16bit
        num=n1+n2;
        //計算校驗
        PACKET[DATA_SIZE+6]=num>>8;
        PACKET[DATA_SIZE+6+1]=num;
       
       
}


//===============================================================
//==============      數(shù)據(jù)包  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)
{//發(fā)送一個字節(jié)
     
                        TI = 0;
            SBUF = dat;
      while(!TI);

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



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



//1 置漢字
//2 取漢字
//3 取個數(shù)
char HZ_GET_NUM(char *XC_P)
{//3 取個數(shù)  不算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];
//// 數(shù)據(jù)包
//char  PACKET[16+8];
//// 數(shù)據(jù)長度
//char DATA_SIZE;
////數(shù)據(jù)校驗
//int DATA_FCS;
////以上是數(shù)據(jù)包 結構
main()
{
  char i;
//========裝載漢字================
HZ_SET("你好,我是張平"); //裝入指針
DATA_SIZE=HZ_GET_NUM("你好,我是張平");//取漢字長度 不包括0
//153 0435 2265       
       
       
       


//封包
        ADD_DATA();         //添加原始數(shù)據(jù)
        ADD_BEGIN();//添加開始
        ADD_SIZE();//添加 長度
        ADD_FCS();//添加校驗
  rs232_init();
//數(shù)據(jù)包格式 開始 長度 數(shù)據(jù)1 數(shù)據(jù)2 數(shù)據(jù)N 校驗
  for(i=0;i<10;i++)
        {//自動停止發(fā)送,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 發(fā)表于 2021-1-16 23:18 | 只看該作者
.版本 2
.支持庫 spec

.程序集 窗口程序集1

.子程序 _端口1_數(shù)據(jù)到達
.參數(shù) 數(shù)據(jù)字節(jié)值, 整數(shù)型

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


.子程序 __啟動窗口_創(chuàng)建完畢

變量_數(shù)據(jù) = 到字節(jié)集 (“AAAAABBBBBCCCCCDDDDDEEEEEFFFFFGGGGG”)

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

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


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

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

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

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

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

.判斷結束

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

    .默認

    .判斷結束




.默認

.判斷結束


返回 (變量_定位)


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

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

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

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



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


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


回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久成人一区 | 欧美一区二区三区精品免费 | 精品一区二区三区不卡 | 国产色婷婷精品综合在线播放 | 欧美亚洲激情 | 精品国产一区二区三区成人影院 | 一区二区中文字幕 | 成人午夜网站 | 视频在线观看一区二区 | 国产传媒视频在线观看 | 久久婷婷麻豆国产91天堂 | 四虎影院新地址 | 中文字幕一区二区在线观看 | 在线观看视频91 | 成年人在线视频 | 免费av观看 | 成人av电影天堂 | 久久这里有精品 | 国产精品一区二 | 国产精品毛片无码 | 国产一区二区在线播放 | 成人免费精品视频 | 狠狠亚洲 | 成人福利网 | 日韩精品一区二区三区中文在线 | 久久久国产精品一区 | 成人在线视频一区二区三区 | 99久久99 | 另类一区 | 日韩精品在线视频免费观看 | 欧美成人一区二区三区 | 亚洲精品www久久久久久广东 | 亚洲一区二区精品视频 | 欧美小视频在线观看 | 亚洲网站在线观看 | 天天干天天谢 | 国产精品亚洲成在人线 | 在线观看视频91 | 成人性生交大片免费看r链接 | 精国产品一区二区三区 | 日本成人在线播放 |