|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
通訊問題 |
| 作者:gygabc 欄目:通信技術(shù) |
請(qǐng)教一下各位,通訊問題 我有四臺(tái)設(shè)備要通訊 都是485口的,四臺(tái)設(shè)備并在一起,其他三臺(tái)可以通上,只有單片機(jī)的通不上?????? (單片機(jī)) 單通可以和西門子的PLC通上, 但和令兩臺(tái)設(shè)備通不上,西門子的PLC單通可以和令兩臺(tái)設(shè)備就能通上,這是為什么??????????那為大蝦幫幫我十分感謝。 |
| 2樓: | >>參與討論 |
| 作者: chunyang 于 2005/9/16 12:19:00 發(fā)布:
最大的可能是波特率不準(zhǔn)的原因 也可能是程序流程問題。 |
|
| 3樓: | >>參與討論 |
| 作者: gygabc 于 2005/9/16 18:07:00 發(fā)布:
通訊問題 |
|
| 4樓: | >>參與討論 |
| 作者: gygabc 于 2005/9/16 18:11:00 發(fā)布:
通訊問題 都是9600的,如果程序流程有問題,單片機(jī)為什么可以和西門子的PLC通上?????? |
|
| 5樓: | >>參與討論 |
| 作者: chunyang 于 2005/9/16 18:53:00 發(fā)布:
不同產(chǎn)品的誤差容限不同 波特率是一方面,其它如485數(shù)據(jù)建立時(shí)間等等,不同設(shè)計(jì)的容限都不同,除硬指標(biāo)如波特率、電壓等外,其它的不配合都可用軟件解決或因軟件造成,如果是這方面的問題,不是“流程”是什么? |
|
| 6樓: | >>參與討論 |
| 作者: gygabc 于 2005/9/18 20:09:00 發(fā)布:
樓上的哥哥幫幫小弟吧 chunyang你好: /* MODBUS通訊規(guī)約中CRC校驗(yàn)碼地計(jì)算 */ #include "AT89X51.H" #include "INTRINS.H" #define uCHAR unsigned CHAR uCHAR in_command=0; uCHAR sbuf_count=0; CHAR getsbuf[8];/*接受字符緩沖區(qū)*/ CHAR return_xy[17]={0x01,0x01,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; CHAR *pint3; CHAR outcount=0; CHAR m=17;/*返回?cái)?shù)據(jù)字節(jié)數(shù)*/ void XyToCrc(CHAR mm,CHAR *pint); void Init_SerialComm(void); void Init_CpuIO(void); void DelayX1ms(uCHAR count); void outCHAR(CHAR i); void get_digital(void); void main(void) { CHAR *pint1; CHAR CHARx,CHARy; Init_SerialComm(); /*初始化串口*/ Init_CpuIO(); /*初始化IO口*/ for(;;) { get_digital(); /*采集數(shù)字量*/ pint1=return_xy; return_xy[1]=0x01; return_xy[2]=0x0c; XyToCrc(m-2,pint1); /*計(jì)算返回?cái)?shù)據(jù)的校驗(yàn)碼*/ CHARx=return_xy[0]; CHARy=return_xy[1]; CHARx=return_xy[2]; CHARy=return_xy[3]; CHARx=return_xy[4]; CHARy=return_xy[5]; CHARx=return_xy[6]; CHARy=return_xy[7]; CHARx=return_xy[8]; CHARy=return_xy[9]; CHARx=return_xy[10]; CHARy=return_xy[11]; CHARx=return_xy[12]; CHARy=return_xy[13]; CHARy=return_xy[14]; CHARx=return_xy[15]; CHARy=return_xy[16]; if (outcount>=m) {TI=0;RI=0;outcount=0;} if(in_command==1) { in_command=0; pint3=return_xy; outcount=0; XyToCrc(m-2,pint1); /*計(jì)算返回?cái)?shù)據(jù)的校驗(yàn)碼*/ TI=1; /*數(shù)據(jù)返回*/ } } } void Init_SerialComm(void) /*初始化串口*/ { SCON=0x50; /*SCON: serail mode 1, 8-bit UART, enable receive*/ TMOD=0x20; /*TMOD: timer 1, mode 2, 8-bit reload*/ TH1=0xfd; /*baud rate 9600b/s TH1=0xfd; */ /*TL1=0xfd;*/ PCON=0x00; /* SMOD=0*/ IE=0x90; /*IE.7=EA=1;IE.4=ES=1,IE.3=ET1=0, IE.2=EX1=0,IE.1=ET0=0,IE.0=EX0=0,Enable GLOBAL interrupt and serial interrupt*/ TR1=1; /*start timer 1*/ } void Init_CpuIO(void) /*初始化IO口*/ { P1=0xff;/*關(guān)閉采集口*/ P2=0xff;/*關(guān)閉采集口*/ /*p3_0=RXD,p3_1=TXD,p3_2=/INT0,p3_3=/INT1 P3口的第二定義在IE中設(shè)置起用*/ /*p3_4=T0,p3_5=T1,p3_6=/WR,p3_7=/RD */ } void DelayX1ms(uCHAR count) /*延時(shí)1ms*/ { uCHAR k; while(count!=0) {count--; for(k=0;k<72;k++) {} } } /*串口接收中斷處理函數(shù)*/ void Serial(void) interrupt 4 { CHAR *pint2; CHAR i,crcl=0,crch=0; if(RI) { RI=0;/* sbuf_count getsbuf[3] */ getsbuf[sbuf_count++]=SBUF; SWITCH(sbuf_count) /*接收一個(gè)數(shù)據(jù)就判斷一次是否是發(fā)給自己的命令*/ { case 0x01: if(getsbuf[0]!=return_xy[0]) sbuf_count=0x00; break; case 0x02: if(getsbuf[1]!=0x01) sbuf_count=0x00; break; case 0x03: if(getsbuf[2]!=0x00) sbuf_count=0x00; break; case 0x04: if(getsbuf[3]!=0x00) sbuf_count=0x00; break; case 0x05: if(getsbuf[4]!=0x00) sbuf_count=0x00; break; case 0x06: if(getsbuf[5]!=0x60) sbuf_count=0x00; break; case 0x07: break; case 0x08: crcl=getsbuf[6]; crch=getsbuf[7]; pint2=getsbuf; XyToCrc(6,pint2); /*計(jì)算接受數(shù)據(jù)地校驗(yàn)碼 */ if(crcl==getsbuf[6] && crch==getsbuf[7]) /*接受地校驗(yàn)碼和計(jì)算的校驗(yàn)碼相同 */ { in_command=1; /*產(chǎn)生有效命令 */ } else { in_command=0; } for(i=0;i<8;i++) { getsbuf[i]=0x00; /*清接受緩沖區(qū) */ |
|
| 7樓: | >>參與討論 |
| 作者: gygabc 于 2005/9/18 20:15:00 發(fā)布:
樓上的哥哥幫幫小弟吧. 這是控制開關(guān)觸電程序,小弟對(duì)這一點(diǎn)都不懂,能幫幫我嗎?幫我改改可以嗎?不勝感謝. |
|
| 8樓: | >>參與討論 |
| 作者: chunyang 于 2005/9/18 20:31:00 發(fā)布:
抱歉,我可沒有時(shí)間幫你看程序! 而且你可能來本壇的時(shí)間未久,如此尋求“幫助”的方式是本壇一向不提倡的。方法和方向性的指點(diǎn)俺老漢向來不吝,但如此直接給結(jié)果的還從未有過。過去、現(xiàn)在和未來,均此。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |