guoermvp 发表于 2011-7-12 17:47:28

stc单片机75lbc184的485遇到的一些问题

鄙人之前没有用过75lbc184图便宜从网上找一图最后产品投了板...
原理图如下:
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_657125YB5P5B.jpg
RS485部分原理图 (原文件名:485.jpg)
因为是从一个什么电子第几所的出的文章上看到的所以没有细加查看,
结果板子出来测试时发现R端光耦方向反了...
于是飞线调整电路后测试,
上电后串口调试助手会检测到一个字节的0x00,(即每次上电都会有一个字节的0x00)
此后发送正常,接收错误。
同时在不焊接75lbc184的情况下上电,用串口调试助手向没有75lbc184的板子发送12345678,
结果串口调试助手显示一段乱码后且一直不断显示0x00。
小弟检查电路没有发现别的问题后,没办法只好自己扎板子把光耦去掉进行测试,其原理图为:
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_657127R8GC4V.jpg
三极管反相 (原文件名:485_1.jpg)
现在调试板子发送完全正确且上电不会有一个字节的0x00出现,接收的8位数据位数正确但数据仍为错误。
串口调试助手图如下:
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_657130WQ7AFG.jpg
串口调试助手检测的数据 (原文件名:串口调试数据.jpg)
单片机新单片机且232通讯正常...
75lbc184新片子但是是国产的一元的片子...
有试过换新75lbc184(当然还是国产的)...
大侠们过来帮帮忙啊...

guoermvp 发表于 2011-7-12 17:48:52

鄙人测试程序如下:
#include "STC12C5201AD.H"

sbit Rxd = P3^0;
sbit Txd = P3^1;
sbit R_T = P3^5;

#define Uchar unsigned char
#define Uint unsigned int
#define FOSC 11059200
#define Uart_Get_Setting(bt,smod)        (256 - (((FOSC / 12) * (1 << smod) / 32)) / bt)
#define RS485_send() R_T = 0
#define RS485_rec() R_T = 1

void RS485_init(void)
{
        SCON = 0x50;                                                //sm0=0 sm1=1方式1 8位波特率可变
        TMOD = (TMOD & 0x0f) | 0x20;                //
        PCON = PCON & 0x3f;                                        //
        TH1= Uart_Get_Setting(9600,0);        //设置定时器1自动重装数
        TL1= Uart_Get_Setting(9600,0);
        TR1= 1;                                                        //启动T1
}

void RS485_Send_Byte(Uchar dat)
{
        TI = 0;
        SBUF = dat;
        while(!TI);
        TI = 0;
}

Uchar RS485_Rece_Byte(void)
{
        while(RI == 0);
        RI = 0;
        return SBUF;
}

void RS485_test(void)
{
        Uchar temp = {/*1,2,3,4,5,6,7,8*/0};
        Uchar i;
        Uint k;
        RS485_rec();
        for(k = 0;k < 10000;k ++);
        for(i = 0;i < 8;i ++)
        {
                temp = RS485_Rece_Byte();
        }
        RS485_send();
        for(k = 0;k < 10000;k ++);
        for(i = 0;i < 8;i ++)
        {
                RS485_Send_Byte(temp);
        }
        RS485_rec();
        for(k = 0;k < 10000;k ++);
}

void main(void)
{
        RS485_init();
        while(1)
        {
                RS485_test();
        }
}

lusson 发表于 2011-7-13 00:08:13

波特率高了吧?
试着换低的波特率试下。

wenhuaxiao 发表于 2011-7-13 09:16:54

去掉那120欧的电阻看看

jakehusonic 发表于 2011-7-13 09:23:36

Pin6,7:上下拉电阻好像反了吧

guoermvp 发表于 2011-7-13 09:42:44

回复【2楼】lusson
-----------------------------------------------------------------------

波特率我改4800结果发送12345678接收全是0但是字节数正确

HYLG 发表于 2011-7-13 09:53:16

我用的184是8毛。没看到你的收发控制。

guoermvp 发表于 2011-7-13 10:01:38

回复【6楼】HYLG
-----------------------------------------------------------------------

http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_657315I2LS2M.jpg
(原文件名:控制.jpg)

qingfeng-liang 发表于 2011-7-13 11:19:19

你看看两边的485芯片是否匹配,如果不配,那接收到就是错的了

qingfeng-liang 发表于 2011-7-13 11:21:12

以前用过两个有点不同485芯片,电路是正常的,但是就是数据错的,就要调整电阻

guoermvp 发表于 2011-7-14 09:15:36

回复【4楼】jakehusonic
-----------------------------------------------------------------------

感谢大侠指点...
的确反了...
是我75LBC184的原理图引脚画错了...
特别感谢大家的帮助!

wjchang724 发表于 2011-8-11 11:14:48

你的光耦隔离没意义。前后电源分开。
页: [1]
查看完整版本: stc单片机75lbc184的485遇到的一些问题