free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問(wèn)答首頁(yè) 最新問(wèn)題 熱門問(wèn)題 等待回答標(biāo)簽廣場(chǎng)
我要提問(wèn)

RS-485

【快樂(lè)分享】用單片機(jī)做的RS232/485與網(wǎng)絡(luò)數(shù)據(jù)透?jìng)?/h1>

【一背景介紹 】     

      以太網(wǎng)具有復(fù)雜的通信協(xié)議比如TCP/IP協(xié)議簇。某個(gè)設(shè)備想要與網(wǎng)絡(luò)設(shè)備通信或者說(shuō)要開發(fā)一臺(tái)網(wǎng)絡(luò)設(shè)備,不光需要信號(hào)電平和通信協(xié)議的轉(zhuǎn)換,還需要一部分復(fù)雜的編程工作。當(dāng)然也需要硬件接口的配合來(lái)做信號(hào)的變換。所以一般的MCU需要擴(kuò)展以太網(wǎng)的接口。不僅僅一般的單片機(jī)需要擴(kuò)展,ARM家族,包括包含網(wǎng)絡(luò)功能的其直系血親Cortex系列也需要擴(kuò)展PHY。Cortex系列或者說(shuō)ARM家族所支持的網(wǎng)絡(luò)功能是位于OSI七層協(xié)議中數(shù)據(jù)鏈路層,再具體一點(diǎn)就是MAC層。對(duì)于一般的非計(jì)算機(jī)專業(yè)的電工來(lái)說(shuō),以太網(wǎng)設(shè)備的開發(fā)有一定的難度。      

    所以,有不少公司開發(fā)出了很多針對(duì)不同OSI層的芯片,使得開發(fā)越來(lái)越簡(jiǎn)化,比如RTL8139D,ENC28J60是包含MAC和PHY層的接口芯片應(yīng)用這種接口芯片TCP/IP協(xié)議簇是在軟件中實(shí)現(xiàn),一般包含在操作系統(tǒng)中。

    W5100 內(nèi)部 集成了全硬件的TCP/IP 協(xié)議簇(TCP, UDP, ICMP, IGMP, IPv4, ARP, PPPoE, Ethernet)、4個(gè)獨(dú)立的Socket接口、一個(gè)MAC和PHY、支持MDI/MDIX,本議題就是基于該芯片所開發(fā)的應(yīng)用,在沒(méi)有操作系統(tǒng)的情況下只需要做socket編程即可,也不用理睬網(wǎng)絡(luò)協(xié)議  。

                        

    Socket是應(yīng)用層與TCP/IP協(xié)議簇通信的中間軟件抽象層,它是一組接口。它把復(fù)雜的TCP/IP協(xié)議簇隱藏在Socket接口后面,對(duì)用戶來(lái)說(shuō),一組簡(jiǎn)單的接口就是全部。

【二方案】

      好了,下邊詳細(xì)介紹一下本議題的詳細(xì)方案,

      首先電源轉(zhuǎn)換是必須的。一是可直接使用的電源適配器較少,二是為了板級(jí)電源的穩(wěn)定。選用物美價(jià)廉的MC36063,加上外圍元件,成本在一元到兩元之間。

      其次,是主控單片機(jī),選用Mega128L,3.3v低電壓,內(nèi)部存儲(chǔ)器極其巨大,單片機(jī)中的航空母艦。

      再次網(wǎng)絡(luò)接口,之前說(shuō)過(guò)了選用W5100,好像是棒子國(guó)的產(chǎn)品。

      最后是兩個(gè)通用串行接口RS232/485,不詳細(xì)介紹了。需要說(shuō)明一點(diǎn)的是,RS485的接口是用一個(gè)RJ45網(wǎng)座是針對(duì)具體應(yīng)用所設(shè)計(jì)的。

      在本帖最后分享的程序,數(shù)據(jù)透?jìng)鞯幕竟δ芏家呀?jīng)實(shí)現(xiàn)。

       肯定有人會(huì)說(shuō),這樣的產(chǎn)品網(wǎng)上一大把,隨便買一個(gè)會(huì)比自己開發(fā)便宜省事。不可否認(rèn),事實(shí)的確是這樣。但是換個(gè)角度想想各位在做應(yīng)用開發(fā)的有幾個(gè)人的工作是具有開創(chuàng)性的。應(yīng)用開發(fā),只是對(duì)應(yīng)不同的需求將已經(jīng)成熟的技術(shù)拿來(lái)放在一起,僅此而已。

【三結(jié)構(gòu)簡(jiǎn)圖】

接口包括一個(gè)網(wǎng)口,一個(gè)RS232,一個(gè)RS485,電源

  

各模塊單元連接關(guān)系

【四各部分原理圖】

電源MC34063,價(jià)格好,這個(gè)設(shè)計(jì)是比較經(jīng)典的電路,很多設(shè)計(jì)中都是用這個(gè)電路

Mega128L最小系統(tǒng),不多說(shuō)

網(wǎng)絡(luò)W5100的外圍電路

RS232,這個(gè)也沒(méi)什么說(shuō)的

RS485,這個(gè)也是常用電路

【八部分函數(shù)】

1)W5100初始化

void W5100_Init(void)

{

        unsigned char i,j;

        SPI_Write(W5100_MODE,MODE_RST);               

        i=timer0_cnt;

        while(Interval(i)<10);                                

        SPI_Write(W5100_MODE,0);               

        for(i=0;i<4;i++)                                       

                SPI_Write(W5100_GAR+i,EEPROMread(GAR_EE+i));

        for(i=0;i<4;i++)                                       

                SPI_Write(W5100_SUBR+i,EEPROMread(SUBR_EE+i));

        for(i=0;i<6;i++)                                       

                SPI_Write(W5100_SHAR+i,EEPROMread(SHAR_EE+i));

        for(i=0;i<4;i++)                                       

                SPI_Write(W5100_SIPR+i,EEPROMread(SIPR_EE+i));

        SPI_Write(W5100_RMSR,0x55);               

        SPI_Write(W5100_TMSR,0x55);               

        SPI_Write(W5100_IMR,(IMR_CONFLICT|IMR_UNREACH|IMR_S0_INT|IMR_S1_INT|IMR_S2_INT|IMR_S3_INT));

}

2)Socket0初始化

unsigned char Socket0_Init(void)

{

        unsigned char i;

        SPI_Write(W5100_S0_MR,S_MR_TCP);               

        SPI_Write(W5100_S0_CR,S_CR_OPEN);               

        i=SPI_Read(W5100_S0_SSR);

        if(i!=S_SSR_INIT)

        {

                SPI_Write(W5100_S0_CR,S_CR_CLOSE);

                return false;

        }

        //Detect gateway

        for(i=0;i<4;i++)

                SPI_Write(W5100_S0_DIPR+1,(EEPROMread(SIPR_EE+i)+1));               

        SPI_Write(W5100_S0_CR,S_CR_CONNECT);        

        i=timer0_cnt;

        while(Interval(i)<2);                                

        for(i=0;i<6;i++)

                GateWay_PHY=SPI_Read(W5100_S0_DHAR);                                

        if(GateWay_PHY[0]==0xff)

        {

                //No gateway process

        }

        SPI_Write(W5100_S0_CR,S_CR_CLOSE);

        SPI_Write(W5100_S0_MSS,0x05);                        

        SPI_Write(W5100_S0_MSS+1,0xb4);

        return true;

}

3)Socket0連接

unsigned char Socket0_connect(void)

{

        unsigned char i;

        SPI_Write(W5100_S0_PORT,EEPROMread(S0_SPORT_EE));                        

        SPI_Write(W5100_S0_PORT+1,EEPROMread(S0_SPORT_EE+1));

        for(i=0;i<4;i++)                        

                SPI_Write(W5100_S0_DIPR+i,EEPROMread(S0_DIPR_EE+i));

        SPI_Write(W5100_S0_DPORT,EEPROMread(S0_DPORT_EE));                        

        SPI_Write(W5100_S0_DPORT+1,EEPROMread(S0_DPORT_EE+1));

        SPI_Write(W5100_S0_CR,S_CR_OPEN);                        

        i=SPI_Read(W5100_S0_SSR);

        if(i!=S_SSR_INIT)

        {

                SPI_Write(W5100_S0_CR,S_CR_CLOSE);

                return false;

        }

        SPI_Write(W5100_S0_CR,S_CR_CONNECT);                        

        return true;

}

4)Socket0偵聽(tīng)

unsigned char Socket0_listen(void)

{

        unsigned char i;

        SPI_Write(W5100_S0_PORT,EEPROMread(S0_SPORT_EE));                        

        SPI_Write(W5100_S0_PORT+1,EEPROMread(S0_SPORT_EE+1));

        SPI_Write(W5100_S0_CR,S_CR_OPEN);

        i=SPI_Read(W5100_S0_SSR);

        if(i!=S_SSR_INIT)

        {        

                SPI_Write(W5100_S0_CR,S_CR_CLOSE);

                return false;

        }

        SPI_Write(W5100_S0_CR,S_CR_LISTEN);                        

        i=timer0_cnt;

        while(Interval(i)<2);                                       

        i=SPI_Read(W5100_S0_SSR);

        if(i!=S_SSR_LISTEN)

        {

                SPI_Write(W5100_S0_CR,S_CR_CLOSE);

                return false;

        }

        return true;

}

5)Socket0_UDP模式

unsigned char Socket0_UDP(void)

{

        unsigned char i;

        SPI_Write(W5100_S0_PORT,EEPROMread(S0_SPORT_EE));                        

        SPI_Write(W5100_S0_PORT+1,EEPROMread(S0_SPORT_EE+1));

        SPI_Write(W5100_S0_MR,S_MR_UDP);                        

        SPI_Write(W5100_S0_CR,S_CR_OPEN);                        

        i=SPI_Read(W5100_S0_SSR);

        if(i!=S_SSR_UDP)

        {

                SPI_Write(W5100_S0_CR,S_CR_CLOSE);                //Close Socket 0 UDP mode

                return false;

        }

        else

                return true;

}

6)實(shí)現(xiàn)的功能是將網(wǎng)絡(luò)數(shù)據(jù)保存到片上緩存

unsigned char S0_shift_data(unsigned int size)

{

        unsigned int i;

        if(S0_Mode==0x02)

        {

                if(size!=(Rx_buffer[10]+11))         

                        return false;

                for(i=0;i<4;i++)                                

                        UDP_DIPR=Rx_buffer;

                UDP_DPORT[0]=Rx_buffer[4];               

                UDP_DPORT[1]=Rx_buffer[5];

                size=Rx_buffer[7];                                

                for(i=0;i                        Rx_buffer=Rx_buffer[i+8];

        }

        else

        {

                if(size!=(Rx_buffer[2]+3))

                        return false;

        }

        if(Rx_buffer[0]!=0xaa)

                return false;

        if(Rx_buffer[1]!=0x55)

                return false;

        Rx_data_process();        

        return true;

}

【九資源共享】

W5100中文用戶數(shù)據(jù)手冊(cè)-v1.1.8.pdf(939.08 KB, 下載次數(shù): 61)2013-7-23 18:48 上傳點(diǎn)擊文件名下載附件

W5100_Datasheet_v1_1_8.pdf(1.47 MB, 下載次數(shù): 97)2013-7-23 18:47 上傳點(diǎn)擊文件名下載附件

說(shuō)明一下,附件源碼中針對(duì)網(wǎng)絡(luò)編程是用TCP/IP協(xié)議中的UDP協(xié)議。

【十結(jié)論】

      從整個(gè)設(shè)計(jì)的角度來(lái)說(shuō),硬件沒(méi)有難度,數(shù)據(jù)手冊(cè)描述的非常詳細(xì),按照參考設(shè)計(jì)來(lái)做電路即可。難點(diǎn)可能在socket編程?;蛟S多數(shù)電工對(duì)各種網(wǎng)絡(luò)協(xié)議并不熟悉,又或者沒(méi)有socket編程經(jīng)驗(yàn)。本設(shè)計(jì)采用的方案不用考慮過(guò)多的網(wǎng)絡(luò)協(xié)議,避免了大量網(wǎng)絡(luò)相關(guān)開發(fā),只需將共享程序中的Socket代碼稍加修改即可實(shí)現(xiàn)簡(jiǎn)單網(wǎng)絡(luò)通訊。

The End!

提問(wèn)者:niggle 地點(diǎn):- 瀏覽次數(shù):3453 提問(wèn)時(shí)間:10-15 15:59
我有更好的答案
提 交

14條回答
Dockert 05-14 09:56
好,叔球程序
yzrui 05-17 04:40
猜對(duì)有獎(jiǎng)不?
便便面天天菜 05-20 01:19


獎(jiǎng)勵(lì)小紅花一朵

@linfeng24 這是我的帖子,這個(gè)帖子修改了沒(méi)有十遍也有七八遍


蔡甸一角 05-21 08:03
不得不說(shuō)??番薯? ?這帖子真水
vnwueurw 05-21 06:58
貌似pcb畫的還像個(gè)樣子
謝璐晨123 05-13 11:17
shizhe樣啊
萌的想要飛 05-15 12:41
好牛啊lz!!
lukyhong 05-15 17:15
其實(shí),老劉還是挺牛逼的
一根玉米須 05-12 19:35


一般水吧。還沒(méi)到看海的程度吧?



2011jiangzhou 05-15 14:49
好高深的樣子,屌絲表示有點(diǎn)看不懂啊。。。。。
hgimtk 05-18 10:39
瓜哥,真NB?。?
hope710 05-13 11:43
新手報(bào)道? ?? ?? ?? ???
btvwerwer 05-16 12:35
還好了,要向叔學(xué)習(xí)啊,如果用無(wú)線就更好了,叔你是好樣的
mingodong 05-17 12:25
呵呵,W5100是個(gè)以太網(wǎng)傻瓜芯片,集成硬件TCP/IP協(xié)議,用起來(lái)的確很方便,國(guó)內(nèi)的IC設(shè)計(jì)廠商為啥就不搞這些應(yīng)用呢?這芯片全球出貨量還是蠻大的,就象VS1003B也是一樣的,唉,瓷器國(guó)最擅長(zhǎng)的可能就是蓋高樓大廈了。
撰寫答案
提 交
1 / 3
1 / 3
相關(guān)RS-485
關(guān)于RS485隔離防雷的信號(hào)地和大地的處理的疑問(wèn)
關(guān)于RS485上拉電阻和下拉電阻阻值的問(wèn)題
3.3V供電的RS485接口遠(yuǎn)距離數(shù)據(jù)通信電路設(shè)計(jì)
四種RS485防雷保護(hù)接地電路
采用C8051F020的RS485串行通信電路設(shè)計(jì)