1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標(biāo)題:
單片機(jī)雙機(jī)Rs485通信問(wèn)題,求前輩指點(diǎn)!
[打印本頁(yè)]
作者:
eyven0519
時(shí)間:
2020-2-8 20:08
標(biāo)題:
單片機(jī)雙機(jī)Rs485通信問(wèn)題,求前輩指點(diǎn)!
一主機(jī),用STC8A8K64S4,一從機(jī),用STC89C52,用開(kāi)發(fā)板上的MAX485模塊(兩個(gè)),進(jìn)行通信,一直無(wú)法實(shí)現(xiàn),以下是主機(jī)和從機(jī)的程序,求指點(diǎn)。
主機(jī)程序:
#include "stc8.h"
#include "intrins.h"
typedef unsigned char uchar;
typedef unsigned int uint;
#define FOSC 11059200L
#define BAUD 4800
#define BN 8
bit busy;
sbit RS485_DIR = P0^4;
uchar rebuf[8];
uchar trbuf[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x66,0xf8};
void delay(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i=0;i<110;i++);
}
}
void master(uchar command)
{
uchar aa,i;
RS485_DIR=1;
S3BUF=command;
while(S3TI==0);
delay(5);
S3CON &= ~S3TI;
RS485_DIR=0;
while(!S3RI);
S3CON &= ~S3RI;
aa=S3BUF;
if(aa==0x02)
{
for(i=0;i<BN;i++)
{
while(!S3RI);
S3CON &= ~S3RI;
rebuf[i]=S3BUF;
}
}
if(aa==0x01)
{
RS485_DIR=1;
for(i=0;i<BN;i++)
{
S3BUF=trbuf[i];
while(!S3TI);
S3CON &= ~S3TI;
}
}
}
void ConfigUART(uint Baud)
{
RS485_DIR=1;
S3CON = 0x10;
AUXR = 0x10;
T2L = (65536 - (FOSC/4/Baud/12));
T2H = (65536 - (FOSC/4/Baud/12))>>8;
}
void main()
{
uchar j;
P_SW2 =0x00; //(P0.0/RxD3, P0.1/TxD3)
ConfigUART(BAUD);
// EA = 1;
while(1)
{
master(0x01);
master(0x02);
for(j=0;j<BN;j++)
{
P2=rebuf[j];
delay(10000);
}
}
}
復(fù)制代碼
從機(jī)程序:
#include "reg52.h"
typedef unsigned int uint;
typedef unsigned char uchar;
sbit RS485DIR=P1^0;
uchar trbuf[8]={0x00,0xa4,0xf9,0x90,0xb0,0x92,0x66,0xff};
uchar rebuf[8];
void delay(uint i)
{
int j;
while(i--)
{
for(j=110;j>0;j--);
}
}
void UsartInit()
{ RS485DIR=0;
SCON=0X50;
TMOD=0X20;
PCON|=0X00;
TH1=0Xfa;
TL1=0Xfa;
TR1=1;
EA=1;
}
void main()
{
uchar j;
UsartInit();
while(1)
{
ES=1;
for(j=0;j<8;j++)
{
P0=rebuf[j];
delay(1000);
}
}
}
void Usart() interrupt 4
{
uchar a,j,i;
RI = 0;
ES=0;
a=SBUF;
delay(100);
if(a==0x02)
{
RS485DIR=1;
SBUF=0x02;
while(!TI);
TI=0;
for(j=0;j<8;j++)
{
SBUF=trbuf[j];
while(!TI);
TI=0;
}
}
if(a==0x01)
{
RS485DIR=1;
SBUF=0x01;
while(!TI);
TI=0;
for(i=0;i<8;i++)
{
RS485DIR=0;
while(!RI);
RI=0;
rebuf[i]=SBUF;
}
}
RS485DIR=0;
ES=1;
}
復(fù)制代碼
作者:
csmyldl
時(shí)間:
2020-2-9 00:32
對(duì)于程序來(lái)說(shuō),只要波特率一致就可以了,重點(diǎn)檢查兩者配置的波特率是否一致
作者:
51hei**1140
時(shí)間:
2020-2-9 09:16
你好!
1、晶振和波特率要一致
2、485收發(fā)控制要做好
3、從簡(jiǎn)到繁逐步去調(diào)試
作者:
eyven0519
時(shí)間:
2020-2-9 11:41
波特率都是4800,STC8單片機(jī)P2收到的數(shù)據(jù)全是00,STC89C52,P0數(shù)據(jù)也是00
作者:
gd2051
時(shí)間:
2020-2-10 12:37
第一步,晶振和波特率要匹配。 第二步,兩塊單片機(jī)板各自獨(dú)立用 ttl to usb 與串口助手進(jìn)行通信,先調(diào)通單片機(jī)與串口助手能通暢通信。第三步,在單片機(jī)與串口助手能通信的基礎(chǔ)上,把串口助手換成單片機(jī),調(diào)試兩個(gè)單片機(jī)進(jìn)行串口通信。 第四步,把232通信改成485通信。
作者:
weras
時(shí)間:
2020-3-13 11:44
樓主先仿真試一下
作者:
robinsonlin
時(shí)間:
2020-3-13 13:01
1.先從TTL端截取信號(hào),通過(guò)TTL轉(zhuǎn)USB到電腦調(diào)試一下,看信號(hào)發(fā)出來(lái)沒(méi)有。
2.做485傳輸?shù)臅r(shí)候,建議把公共地也對(duì)接起來(lái)。不然很容易出莫名其妙的問(wèn)題。也就是A+,B-,還有GND三個(gè)信號(hào)。
3.注意A+,B-的對(duì)應(yīng),別搞反了。
作者:
shuodongfeng
時(shí)間:
2020-3-13 14:19
485通訊測(cè)試方法如下:
1:先測(cè)試通訊雙方的TTL信號(hào)是否正常從TX引腳發(fā)出,若沒(méi)有,首先檢查代碼關(guān)于串口配置是否正確(代碼盡量簡(jiǎn)單),而檢查芯片是否正常工作,比如芯片供電,晶振配置等等!若一致則走下一步
2:示波器抓取通訊雙方的TTL的波特率是否一致,有時(shí)候即使波特率不一致能可以收到數(shù)據(jù),不過(guò)是一些亂碼,波特率若不一致,檢查程序的波特率配置、
3:檢查485收發(fā)是否正常工作,比如供電,控制收發(fā)引腳狀態(tài)是否符合控制邏輯
4:測(cè)試線路導(dǎo)通性
作者:
lem
時(shí)間:
2020-3-15 12:33
如果程序沒(méi)問(wèn)題的話檢查一下485芯片是否與單片機(jī)共地
作者:
ThomasLuan
時(shí)間:
2020-3-15 14:11
樓主你可用先用TTL電平直連測(cè)試。以便區(qū)分是否是程序問(wèn)題
作者:
熱愛(ài)單片機(jī)1425
時(shí)間:
2020-4-8 11:07
我也用的這兩個(gè)單片機(jī),也是不能通訊
作者:
pcbboy
時(shí)間:
2020-4-8 17:41
IO口初始化一下,STC單片機(jī)IO口不初始化有些端口是不能用的:
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1