找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3543|回復(fù): 5
收起左側(cè)

大牛大蝦快來,串口通信始終不能按照定義的數(shù)據(jù)發(fā)送,程序改了十幾遍了

[復(fù)制鏈接]
ID:237942 發(fā)表于 2017-10-26 16:01 | 顯示全部樓層 |閱讀模式
#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
u16 i,j;
u8 rec_buf[4]={0,0,0,0};
u8 code str1[]={0x23,0x01,0x04,0x00,0x00,0x00,0x01,0x23};  //¶¨òåËÄ×éμÆ1aD-òé
u8 code str2[]={0x23,0x01,0x04,0x00,0x00,0x00,0x02,0x23};
u8 code str3[]={0x23,0x01,0x04,0x00,0x00,0x00,0x03,0x23};
u8 code str4[]={0x23,0x01,0x04,0x00,0x00,0x00,0x04,0x23};

u8 code table1[4]={0x7E,0x41,0x06,0x0D};       //¶¨òåËÄ×éμã¸èÏμí3D-òé
u8 code table2[4]={0x7E,0x41,0x19,0x0D};
u8 code table3[4]={0x7E,0x41,0x09,0x0D};
u8 code table4[4]={0x7E,0x41,0x03,0x0D};

void InitUART(void)
{
    TMOD = 0x20;  //¶¨ê±Æ÷1¤×÷·½ê½2
    SCON = 0x50; // ′®¿ú1¤×÷·½ê½1£¬ÔêDí½óêÕ
    TH1 = 0xFA;
    TL1 = TH1;
    PCON = 0x80;  //2¨ìØÂê±¶Ôö
    EA = 1;
    ES = 1;
    TR1 = 1;
}

void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}

void main(void)
{
  InitUART();
        if(rec_buf[3]==0x06)
                 {
                         for(i=0;str1[i]!='\0';i++)
                                        {
                                                SendOneByte(str1[i]);
                                                }
           }
          else if(rec_buf[3]==0x19)
                                         {
                                                 for(i=0;str2[i]!='\0';i++)
                                                {
                                                        SendOneByte(str2[i]);
                                                }
           }
           else if(rec_buf[3]==0x09)
                                         {
                                                 for(i=0;str3[i]!='\0';i++)
                                                {
                                                        SendOneByte(str3[i]);
                                                }
           }
                                          else
                                                {
                                                        for(i=0;str4[i]!='\0';i++)
                                                        {
                                                        SendOneByte(str4[i]);
                                                        }
            }
}

void UARTInterrupt(void) interrupt 4
{
           if(RI)
        {
                                        for(j=0;j<4;j++ )
                             rec_buf[j]=SBUF;
                                                RI = 0;
    }
    else
        TI = 0;
}

回復(fù)

使用道具 舉報

ID:237942 發(fā)表于 2017-11-1 18:08 | 顯示全部樓層
yzwzfyz 發(fā)表于 2017-10-27 12:57
再回顧一下串行原理,再畫個細節(jié)框圖,估計應(yīng)找到問題了。

問題解決了,是主程序處理里面標(biāo)志位一直沒有清除的問題
回復(fù)

使用道具 舉報

ID:237942 發(fā)表于 2017-11-1 18:05 | 顯示全部樓層
無畏造英雄 發(fā)表于 2017-10-27 10:11
你把你KEIL里的字體改一下 ,就不會出現(xiàn)亂碼了

你意思是指我程序里面注釋加漢字了?
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2017-10-27 12:57 | 顯示全部樓層
再回顧一下串行原理,再畫個細節(jié)框圖,估計應(yīng)找到問題了。
回復(fù)

使用道具 舉報

ID:242454 發(fā)表于 2017-10-27 10:11 | 顯示全部樓層
你把你KEIL里的字體改一下 ,就不會出現(xiàn)亂碼了
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2017-10-26 22:11 | 顯示全部樓層
本帖最后由 zl2168 于 2017-10-26 22:14 編輯

先學(xué)學(xué)正確的東西吧!理解以后在查看自己錯在哪兒!
實例77  雙機串行通信方式1
實例77 雙機通信方式1.rar (40.4 KB, 下載次數(shù): 4)
串1.jpg
實例78  雙機串行通信方式2 實例78 雙機通信方式2.rar (46.57 KB, 下載次數(shù): 2) 串2.jpg
實例79  雙機串行通信方式3 實例79 雙機通信方式3.rar (45.3 KB, 下載次數(shù): 4) 串3.jpg

Proteus仿真一下,確認有效。以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機應(yīng)用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。仿真電路和Hex文件能在清華出版社網(wǎng)站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表