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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

c52單片機多機通信 我的從機接收不到數據 有哪位大神幫我看下嗎 十分感謝

查看數: 3751 | 評論數: 10 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2018-7-16 02:01

正文摘要:

這個是我的主機代碼

回復

ID:372442 發表于 2018-7-16 13:43
波特率的問題
ID:371473 發表于 2018-7-16 13:24
小貓貓愛吃魚 發表于 2018-7-16 10:49
你好!你這是三機通訊嗎?一個主機、兩個從機?
主機發送數據,兩個從機同時接收?

是三機通信沒錯,主機發送地址,然后從機判別是否是他的地址,然后從機向主機發送狀態消息,最后接收數據。
ID:371473 發表于 2018-7-16 13:15
錯誤原因:
我把發送地址幀的按鍵設置成P3^0和P3^1,他們是單片機里面的接收和發送端,因為他們是控制輸入輸出的按鈕,就產生了沖突,所以從機沒有接收到信息;
后來我改了按鍵和波特率 從機就收到數據了,十分感謝上面的各位替我解決這個問題 謝謝!
ID:371473 發表于 2018-7-16 12:57
HC6800-ES-V2.0 發表于 2018-7-16 08:57
補充一點:
算了你的波特率,好像不是4800,我還算不出你的初值FD對應什么波特率。
在晶振12M情況下,誤 ...

我波特率可能弄錯了   我后來改了個波特率 再加上那個延時 程序就可以了 謝謝你的意見,嘿嘿嘿
ID:371473 發表于 2018-7-16 12:56
ahshmj 發表于 2018-7-16 08:32
void Init(void)                //9600bps@18.432MHz
{
        PCON &= 0x7f;                //波特率不倍速,清除最高位,其余保持不變

哇!謝謝你的意見 我改了下波特率就好了 可能是我的波特率設置錯了 謝謝蛤o(>ω<)o
ID:371473 發表于 2018-7-16 12:31
HC6800-ES-V2.0 發表于 2018-7-16 08:09
我做過類似的實驗,但只是雙機?戳四愕某绦蚝徒泳照片,我認為有兩點:
第一:程序中,主機的按鍵程序不 ...

去掉從機的usb線是說 只有主機接usb嗎
ID:303383 發表于 2018-7-16 10:49
提示: 作者被禁止或刪除 內容自動屏蔽
ID:164602 發表于 2018-7-16 08:57
補充一點:
算了你的波特率,好像不是4800,我還算不出你的初值FD對應什么波特率。
在晶振12M情況下,誤差小的最大波特率就是4800,且要加倍,否則誤差大了,接收和發送都會有較大的誤差,就會接收不到或接收錯誤。
ID:7485 發表于 2018-7-16 08:32
void Init(void)                //9600bps@18.432MHz
{
        PCON &= 0x7f;                //波特率不倍速,清除最高位,其余保持不變
        SCON = 0x50;                //8位數據,可變波特率
        TMOD &= 0x0f;                //清除定時器1模式位
        TMOD |= 0x20;                //設定定時器1為8位自動重裝方式,設置T1,T0保持不變。
        TL1 = 0xFD;                //設定定時初值,11.0592晶振,9600波特率,根據你自己的波特率確定。
        TH1 = 0xFD;                //設定定時器重裝值  
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //啟動定時器1
}

PCON的最高位是SMOD,=1是波特率加倍,=0是不加倍

另外需要注意的是通信機之間的波特率必須相同。

你可以參考一下。
ID:164602 發表于 2018-7-16 08:09
我做過類似的實驗,但只是雙機?戳四愕某绦蚝徒泳照片,我認為有兩點:
第一:程序中,主機的按鍵程序不對。按鍵這種器件,是需要消抖的,你好像有消抖的語句,但是不對嘛。
你用while是消不了抖的。你想。喊聪骆I,出現抖動,key1=0,但這個結果,可以有好多次的(抖動。,所以,while是不能消抖的,應該用延時。
第二:硬件接線。應該去掉從機的USB線,這根線會占用串口,我做實驗時就是這樣的。應該用四根杜邦線連接VCC、GND、P30、P31。我的板子和你一模一樣——普中的HC6800-ES-V2.0,下面是我的雙機實驗程序,你可以試試。雙機實驗比你的三機實驗要簡單很多。

/*
串口實驗:單片機與單片機之間的通訊,這是主機程序
*/                                                                         

#include<reg51.h>

#define LED P2
#define JP P1

unsigned char JZ;
bit AJ;

void UsartConfiguration();
void Delay10ms(unsigned int c);
void KeyDown(void);

void main()//主函數
{
        UsartConfiguration();//設置串口
        Delay10ms(10);
        while(1)
        {
                KeyDown();
                if (AJ==1)
                {
                        AJ=0;
                        SBUF = JZ;
                        while (!TI);
                        TI = 0;
                }
        }
}

void UsartConfiguration()
{
        SCON=0X50;
        TMOD=0X20;
        PCON=0X80;
        TH1=0XF3;//波特率是4800的
        TL1=0XF3;
        TR1=1;
        EA=1;
        ES=1;
}

void Delay10ms(unsigned int c)//延時10ms
{
    unsigned char a, b;
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}

void KeyDown(void)
{
        unsigned char a=0;
        JP=0x0f;
        if(JP!=0x0f)
        {
                Delay10ms(1);//此處按鍵消抖
                if(JP!=0x0f)
                {
                        AJ=1;
                        switch(JP)
                        {
                                case(0X07):        JZ=0;break;
                                case(0X0b):        JZ=1;break;
                                case(0X0d): JZ=2;break;
                                case(0X0e):        JZ=3;break;
                        }
                        JP=0Xf0;
                        switch(JP)
                        {
                                case(0X70):        JZ=JZ;break;
                                case(0Xb0):        JZ=JZ+4;break;
                                case(0Xd0): JZ=JZ+8;break;
                                case(0Xe0):        JZ=JZ+12;break;
                        }
                        for (a=0;(a<50)&&(JP!=0xf0);a++)//松手消抖
                        {
                                Delay10ms(1);
                        }
                }
        }
}

void FSSZ(void) interrupt 4
{
        RI=0;
        LED=~SBUF;
        Delay10ms(1);
}


/*
串口實驗:實驗單片機與單片機通訊,此為從機程序
*/                                                                         

#include<reg51.h>

#define SMG P0//數碼管

unsigned char k;
unsigned char code XSM[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼

void UsartConfiguration();
void Delay10ms(unsigned int c);

void main()
{
        UsartConfiguration();
        Delay10ms(10);
        while(1)
        {
        }
}

void UsartConfiguration()
{
        SCON=0X50;
        TMOD=0X20;
        PCON=0X80;
        TH1=0XF3;//波特率是4800的
        TL1=0XF3;
        TR1=1;
        ES=1;
        EA=1;
}

void Delay10ms(unsigned int c)//延時10ms
{
    unsigned char a, b;
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}

void CKTX() interrupt 4
{
        RI=0;
        k=SBUF;
        SMG=XSM[k];
        SBUF=k;
        while (!TI);
        TI = 0;
}


程序功能是這樣的:主機通過按下矩陣鍵盤,將鍵值發給從機,從機接收到后,數碼管顯示鍵值,并將鍵值發回主機,主機根據這個值以二進制方式顯示LED燈。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色婷婷一区 | 国产精品成人久久久久 | 在线观看av网站永久 | 久久伊人亚洲 | 9色网站 | 亚洲黄色av | 亚洲激情视频在线 | 亚洲免费在线播放 | 91在线看| 福利视频网站 | 欧美国产日韩在线观看 | 精品99久久久久久 | 国产欧美在线视频 | 欧美一级视频在线观看 | 国产午夜在线 | 中文字幕精品一区二区三区精品 | 九九99精品 | 国产日韩欧美在线观看 | 日韩在线国产 | 国产精品久久久久久久久图文区 | 日韩中出| 天天拍天天插 | 日韩欧美一区在线 | 国产欧美精品一区二区 | av性色全交蜜桃成熟时 | 秋霞国产 | 精品欧美 | 午夜专区 | 精品一区二区三区中文字幕 | 欧美日韩国产一区 | 在线资源视频 | 免费视频一区 | 日韩视频福利 | 成在线人视频免费视频 | 男女免费网站 | 国产免费一级一级 | 在线观看成人精品 | 亚洲女人的天堂 | 国产精品视频免费播放 | 理论片87福利理论电影 | 国产免费人成xvideos视频 |