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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

[復(fù)制鏈接]
ID:371473 發(fā)表于 2018-7-16 02:01 | 顯示全部樓層 |閱讀模式
這個(gè)是我的主機(jī)代碼
0101.jpg 0102.jpg


這個(gè)是我的從機(jī):
0103.png 0104.png


不知道為什么 從機(jī)總是無(wú)法接收到數(shù)據(jù),我也不知道是不是接線(xiàn)問(wèn)題 我也把接線(xiàn)圖po上來(lái)吧
011.jpg

十分希望有大神能夠?yàn)槲医鉀Q下這個(gè)問(wèn)題 !跪謝!
代碼.rar (850 Bytes, 下載次數(shù): 10)

回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-7-16 08:09 | 顯示全部樓層
我做過(guò)類(lèi)似的實(shí)驗(yàn),但只是雙機(jī)。看了你的程序和接線(xiàn)照片,我認(rèn)為有兩點(diǎn):
第一:程序中,主機(jī)的按鍵程序不對(duì)。按鍵這種器件,是需要消抖的,你好像有消抖的語(yǔ)句,但是不對(duì)嘛。
你用while是消不了抖的。你想啊:按下鍵,出現(xiàn)抖動(dòng),key1=0,但這個(gè)結(jié)果,可以有好多次的(抖動(dòng)啊),所以,while是不能消抖的,應(yīng)該用延時(shí)。
第二:硬件接線(xiàn)。應(yīng)該去掉從機(jī)的USB線(xiàn),這根線(xiàn)會(huì)占用串口,我做實(shí)驗(yàn)時(shí)就是這樣的。應(yīng)該用四根杜邦線(xiàn)連接VCC、GND、P30、P31。我的板子和你一模一樣——普中的HC6800-ES-V2.0,下面是我的雙機(jī)實(shí)驗(yàn)程序,你可以試試。雙機(jī)實(shí)驗(yàn)比你的三機(jī)實(shí)驗(yàn)要簡(jiǎn)單很多。

/*
串口實(shí)驗(yàn):?jiǎn)纹瑱C(jī)與單片機(jī)之間的通訊,這是主機(jī)程序
*/                                                                         

#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()//主函數(shù)
{
        UsartConfiguration();//設(shè)置串口
        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)//延時(shí)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);
}


/*
串口實(shí)驗(yàn):實(shí)驗(yàn)單片機(jī)與單片機(jī)通訊,此為從機(jī)程序
*/                                                                         

#include<reg51.h>

#define SMG P0//數(shù)碼管

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)//延時(shí)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;
}


程序功能是這樣的:主機(jī)通過(guò)按下矩陣鍵盤(pán),將鍵值發(fā)給從機(jī),從機(jī)接收到后,數(shù)碼管顯示鍵值,并將鍵值發(fā)回主機(jī),主機(jī)根據(jù)這個(gè)值以二進(jìn)制方式顯示LED燈。
回復(fù)

使用道具 舉報(bào)

ID:7485 發(fā)表于 2018-7-16 08:32 | 顯示全部樓層
void Init(void)                //9600bps@18.432MHz
{
        PCON &= 0x7f;                //波特率不倍速,清除最高位,其余保持不變
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD &= 0x0f;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式,設(shè)置T1,T0保持不變。
        TL1 = 0xFD;                //設(shè)定定時(shí)初值,11.0592晶振,9600波特率,根據(jù)你自己的波特率確定。
        TH1 = 0xFD;                //設(shè)定定時(shí)器重裝值  
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器1
}

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

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

你可以參考一下。
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-7-16 08:57 | 顯示全部樓層
補(bǔ)充一點(diǎn):
算了你的波特率,好像不是4800,我還算不出你的初值FD對(duì)應(yīng)什么波特率。
在晶振12M情況下,誤差小的最大波特率就是4800,且要加倍,否則誤差大了,接收和發(fā)送都會(huì)有較大的誤差,就會(huì)接收不到或接收錯(cuò)誤。
回復(fù)

使用道具 舉報(bào)

ID:303383 發(fā)表于 2018-7-16 10:49 | 顯示全部樓層
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

ID:371473 發(fā)表于 2018-7-16 12:31 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2018-7-16 08:09
我做過(guò)類(lèi)似的實(shí)驗(yàn),但只是雙機(jī)。看了你的程序和接線(xiàn)照片,我認(rèn)為有兩點(diǎn):
第一:程序中,主機(jī)的按鍵程序不 ...

去掉從機(jī)的usb線(xiàn)是說(shuō) 只有主機(jī)接usb嗎
回復(fù)

使用道具 舉報(bào)

ID:371473 發(fā)表于 2018-7-16 12:56 | 顯示全部樓層
ahshmj 發(fā)表于 2018-7-16 08:32
void Init(void)                //9600bps@18.432MHz
{
        PCON &= 0x7f;                //波特率不倍速,清除最高位,其余保持不變

哇!謝謝你的意見(jiàn) 我改了下波特率就好了 可能是我的波特率設(shè)置錯(cuò)了 謝謝蛤o(>ω<)o
回復(fù)

使用道具 舉報(bào)

ID:371473 發(fā)表于 2018-7-16 12:57 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2018-7-16 08:57
補(bǔ)充一點(diǎn):
算了你的波特率,好像不是4800,我還算不出你的初值FD對(duì)應(yīng)什么波特率。
在晶振12M情況下,誤 ...

我波特率可能弄錯(cuò)了   我后來(lái)改了個(gè)波特率 再加上那個(gè)延時(shí) 程序就可以了 謝謝你的意見(jiàn),嘿嘿嘿
回復(fù)

使用道具 舉報(bào)

ID:371473 發(fā)表于 2018-7-16 13:15 | 顯示全部樓層
錯(cuò)誤原因:
我把發(fā)送地址幀的按鍵設(shè)置成P3^0和P3^1,他們是單片機(jī)里面的接收和發(fā)送端,因?yàn)樗麄兪强刂戚斎胼敵龅陌粹o,就產(chǎn)生了沖突,所以從機(jī)沒(méi)有接收到信息;
后來(lái)我改了按鍵和波特率 從機(jī)就收到數(shù)據(jù)了,十分感謝上面的各位替我解決這個(gè)問(wèn)題 謝謝!
回復(fù)

使用道具 舉報(bào)

ID:371473 發(fā)表于 2018-7-16 13:24 | 顯示全部樓層
小貓貓愛(ài)吃魚(yú) 發(fā)表于 2018-7-16 10:49
你好!你這是三機(jī)通訊嗎?一個(gè)主機(jī)、兩個(gè)從機(jī)?
主機(jī)發(fā)送數(shù)據(jù),兩個(gè)從機(jī)同時(shí)接收?

是三機(jī)通信沒(méi)錯(cuò),主機(jī)發(fā)送地址,然后從機(jī)判別是否是他的地址,然后從機(jī)向主機(jī)發(fā)送狀態(tài)消息,最后接收數(shù)據(jù)。
回復(fù)

使用道具 舉報(bào)

ID:372442 發(fā)表于 2018-7-16 13:43 | 顯示全部樓層
波特率的問(wèn)題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国模一区二区三区欧美 | 欧美日韩视频在线 | 国产aaaaav久久久一区二区 | 日韩精品一区在线观看 | 国产精品一区二区三 | www.精品一区 | 亚洲国产aⅴ精品 | 免费日本视频 | 久久久av| 最近中文字幕免费 | 欧美最猛性xxxxx亚洲精品 | 一级a爱片性色毛片免费 | 欧美一区二区在线 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 99精品国自产在线观看 | 国产成人精品一区二 | 黄免费在线 | 另类视频在线 | 久久精品欧美一区二区三区麻豆 | h视频网站在线观看 | 国产成人99久久亚洲综合精品 | av黄色在线 | www.4567| 日本精品免费在线观看 | 国产成人免费视频网站高清观看视频 | 国产在线观看不卡一区二区三区 | 亚洲成人一级片 | 欧美日韩久 | av在线天天 | 国产精品视频999 | 免费精品 | 国产黄色大片网站 | www.五月婷婷.com | 欧美xxxⅹ性欧美大片 | 欧美精品一区二区三区在线播放 | 亚洲一区二区三区四区在线观看 | 国久久 | 久久国产亚洲 | 久久久久久亚洲精品 | 毛片一级片 | 国产一区二区在线视频 |