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

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

QQ登錄

只需一步,快速開始

搜索
查看: 7864|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

誰能教教我用RS485,max485,芯片 怎么和C52單片機(jī)建立通訊!程序怎么寫!

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 50 黑幣 回復(fù)本帖可獲得 50 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:355595 發(fā)表于 2018-11-22 10:39 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如題
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:136633 發(fā)表于 2018-11-22 19:01 | 只看該作者
單片機(jī)的P30和P31接MAX485的RO和DI就完成建立了,具體通信協(xié)議就看軟件來實(shí)現(xiàn)了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:429166 發(fā)表于 2018-11-22 20:51 | 只看該作者
RxD和TxD接RO和DI就好了,程序要慢慢來啊
回復(fù)

使用道具 舉報(bào)

地板
ID:211052 發(fā)表于 2018-11-22 21:48 | 只看該作者
單片機(jī)的P30和P31接MAX485的RO和DI就完成建立了,再用一個(gè)IO口控制RE/DE,程序就是串口發(fā)送接收,注意RE/DE的讀寫方向

485.png (21 KB, 下載次數(shù): 123)

485.png

code.zip

2.53 KB, 下載次數(shù): 124

回復(fù)

使用道具 舉報(bào)

5#
ID:431526 發(fā)表于 2018-11-22 22:52 | 只看該作者
片機(jī)的P30和P31接MAX485的RO和DI就完成建立
回復(fù)

使用道具 舉報(bào)

6#
ID:342197 發(fā)表于 2018-11-23 08:34 | 只看該作者
以下為具體實(shí)現(xiàn)通信的程序:
//RS485查詢接收到的數(shù)據(jù)
//buf:接收緩存首地址
//len:讀到的數(shù)據(jù)長(zhǎng)度
void RS485_Receive_Data(u8 *buf,u8 *len)
{
        u8 rxlen=RS485_RX_CNT;
        u8 i=0;
        *len=0;                                //默認(rèn)為0
        delay_ms(10);                //等待10ms,連續(xù)超過10ms沒有接收到一個(gè)數(shù)據(jù),則認(rèn)為接收結(jié)束
        if(rxlen==RS485_RX_CNT&&rxlen)//接收到了數(shù)據(jù),且接收完成了
        {
                for(i=0;i<rxlen;i++)
                {
                        buf[ i]=RS485_RX_BUF[ i];                        }                                *len=RS485_RX_CNT;        //記錄本次數(shù)據(jù)長(zhǎng)度                RS485_RX_CNT=0;                //清零        }}
回復(fù)

使用道具 舉報(bào)

7#
ID:214223 發(fā)表于 2018-11-23 10:15 | 只看該作者
正好最近做了一個(gè)
回復(fù)

使用道具 舉報(bào)

8#
ID:214223 發(fā)表于 2018-11-23 10:19 | 只看該作者
仿真圖如圖所示:程序:
#include <reg51.h>
#include <intrins.h>
#include "12864.c"

sbit REDE=P1^0;

//void delay(void)
//{
//     unsigned int i,j;
//         for(i=0;i<200;i++)
//           for(j=0;j<500;j++)  ;
//}
//
//void Send(unsigned char dat)
//{
//    SBUF=dat;
//        while(TI==0);
//        TI=0;
//}

void main(void)
{
    TMOD=0x20;
        SCON=0x50;
        PCON=0x00;
        TH1=0xFD;
        TR1=1;
        REN=1;
        EA=1;
        ES=1;
        LCD_Init();
        REDE=0;
    while(1);
// {
//         Send(0x23);
//        Send(0x31);
//        Send(0x32);
//        Send(0x0D);
//        delay();
// }
}

void Uart_Serve(void) interrupt 4 using 0
{
   if(RI==1)
   {
           RI=0;
        DisplayResult(SBUF);
   }
}


//12864的程序不需要贅述了吧

1.png (40.49 KB, 下載次數(shù): 133)

1.png
回復(fù)

使用道具 舉報(bào)

9#
ID:279667 發(fā)表于 2018-11-23 10:58 | 只看該作者
根據(jù)RS485串口通訊協(xié)議,按照協(xié)議要求來操作TXD和RXD
回復(fù)

使用道具 舉報(bào)

10#
ID:609968 發(fā)表于 2020-3-12 14:53 | 只看該作者
原理圖按照三樓的那樣連接,程序如下:
#include <reg52.h>
#include <intrins.h>

sbit RS485_DIR = P1^7;  //RS485方向選擇引腳

bit flagFrame = 0;  //幀接收完成標(biāo)志,即接收到一幀新數(shù)據(jù)
bit flagTxd = 0;    //單字節(jié)發(fā)送完成標(biāo)志,用來替代TXD中斷標(biāo)志位
unsigned char cntRxd = 0;   //接收字節(jié)計(jì)數(shù)器
unsigned char pdata bufRxd[64];  //接收字節(jié)緩沖區(qū)

extern void UartAction(unsigned char *buf, unsigned char len);

/* 串口配置函數(shù),baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
    RS485_DIR = 0; //RS485設(shè)置為接收方向
    SCON  = 0x50;  //配置串口為模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1為模式2
    TH1 = 256 - (11059200/12/32)/baud;  //計(jì)算T1重載值
    TL1 = TH1;     //初值等于重載值
    ET1 = 0;       //禁止T1中斷
    ES  = 1;       //使能串口中斷
    TR1 = 1;       //啟動(dòng)T1
}
/* 軟件延時(shí)函數(shù),延時(shí)時(shí)間(t*10)us */
void DelayX10us(unsigned char t)
{
    do {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    } while (--t);
}
/* 串口數(shù)據(jù)寫入,即串口發(fā)送函數(shù),buf-待發(fā)送數(shù)據(jù)的指針,len-指定的發(fā)送長(zhǎng)度 */
void UartWrite(unsigned char *buf, unsigned char len)
{
    RS485_DIR = 1;  //RS485設(shè)置為發(fā)送
    while (len--)   //循環(huán)發(fā)送所有字節(jié)
    {
        flagTxd = 0;      //清零發(fā)送標(biāo)志
        SBUF = *buf++;    //發(fā)送一個(gè)字節(jié)數(shù)據(jù)
        while (!flagTxd); //等待該字節(jié)發(fā)送完成
    }
    DelayX10us(5);  //等待最后的停止位完成,延時(shí)時(shí)間由波特率決定
    RS485_DIR = 0;  //RS485設(shè)置為接收
}
/* 串口數(shù)據(jù)讀取函數(shù),buf-接收指針,len-指定的讀取長(zhǎng)度,返回值-實(shí)際讀到的長(zhǎng)度 */
unsigned char UartRead(unsigned char *buf, unsigned char len)
{
    unsigned char i;
   
    if (len > cntRxd)  //指定讀取長(zhǎng)度大于實(shí)際接收到的數(shù)據(jù)長(zhǎng)度時(shí),
    {                  //讀取長(zhǎng)度設(shè)置為實(shí)際接收到的數(shù)據(jù)長(zhǎng)度
        len = cntRxd;
    }
    for (i=0; i<len; i++)  //拷貝接收到的數(shù)據(jù)到接收指針上
    {
        *buf++ = bufRxd[i];
    }
    cntRxd = 0;  //接收計(jì)數(shù)器清零
   
    return len;  //返回實(shí)際讀取長(zhǎng)度
}
/* 串口接收監(jiān)控,由空閑時(shí)間判定幀結(jié)束,需在定時(shí)中斷中調(diào)用,ms-定時(shí)間隔 */
void UartRxMonitor(unsigned char ms)
{
    static unsigned char cntbkp = 0;
    static unsigned char idletmr = 0;

    if (cntRxd > 0)  //接收計(jì)數(shù)器大于零時(shí),監(jiān)控總線空閑時(shí)間
    {
        if (cntbkp != cntRxd)  //接收計(jì)數(shù)器改變,即剛接收到數(shù)據(jù)時(shí),清零空閑計(jì)時(shí)
        {
            cntbkp = cntRxd;
            idletmr = 0;
        }
        else                   //接收計(jì)數(shù)器未改變,即總線空閑時(shí),累積空閑時(shí)間
        {
            if (idletmr < 30)  //空閑計(jì)時(shí)小于30ms時(shí),持續(xù)累加
            {
                idletmr += ms;
                if (idletmr >= 30)  //空閑時(shí)間達(dá)到30ms時(shí),即判定為一幀接收完畢
                {
                    flagFrame = 1;  //設(shè)置幀接收完成標(biāo)志
                }
            }
        }
    }
    else
    {
        cntbkp = 0;
    }
}
/* 串口驅(qū)動(dòng)函數(shù),監(jiān)測(cè)數(shù)據(jù)幀的接收,調(diào)度功能函數(shù),需在主循環(huán)中調(diào)用 */
void UartDriver()
{
    unsigned char len;
    unsigned char pdata buf[40];

    if (flagFrame) //有命令到達(dá)時(shí),讀取處理該命令
    {
        flagFrame = 0;
        len = UartRead(buf, sizeof(buf)-2); //將接收到的命令讀取到緩沖區(qū)中
        UartAction(buf, len);  //傳遞數(shù)據(jù)幀,調(diào)用動(dòng)作執(zhí)行函數(shù)
    }
}
/* 串口中斷服務(wù)函數(shù) */
void InterruptUART() interrupt 4
{
    if (RI)  //接收到新字節(jié)
    {
        RI = 0;  //清零接收中斷標(biāo)志位
        if (cntRxd < sizeof(bufRxd)) //接收緩沖區(qū)尚未用完時(shí),
        {                            //保存接收字節(jié),并遞增計(jì)數(shù)器
            bufRxd[cntRxd++] = SBUF;
        }
    }
    if (TI)  //字節(jié)發(fā)送完畢
    {
        TI = 0;   //清零發(fā)送中斷標(biāo)志位
        flagTxd = 1;  //設(shè)置字節(jié)發(fā)送完成標(biāo)志
    }
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人精品一区 | av日韩一区| 欧美黄色片| 国产欧美日韩在线观看 | 青青草综合 | 久久精品一区二区三区四区 | 欧美精品久久 | 亚洲视频在线观看免费 | 蜜桃视频一区二区三区 | 黄色免费网站在线看 | 在线视频第一页 | 日本免费网 | 亚洲第一中文字幕 | 在线视频一区二区 | 国产成人一区二区 | 日本又色又爽又黄又高潮 | 在线观看国产视频 | 日韩欧美三级电影在线观看 | 亚洲三区视频 | 亚洲视频一区在线观看 | 亚洲精品视频播放 | 久久久精 | 欧美男人的天堂 | 久久亚洲一区二区 | 黄色大片免费播放 | 日韩av在线一区 | 午夜在线小视频 | 日韩不卡在线观看 | 毛片黄| 久久精品亚洲精品国产欧美kt∨ | 亚洲a在线观看 | 日韩精品一区二区三区 | 日韩a在线 | 怡红院成人在线视频 | 欧美成人精品在线 | 亚洲一区二区久久久 | www.国产 | 亚洲在线日韩 | 一级一级毛片免费看 | 亚洲成人精品免费 | 大学生a级毛片免费视频 |