您的位置:程序门 -> 硬件/嵌入开发 -> 片机/工控



问一个51经485和电脑通信的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


问一个51经485和电脑通信的问题
发表于:2007-04-10 14:07:47 楼主
c51经过485-232口和pc连接    
第一次调试       弄不出来
要求电脑上发一个数字       单片机返回一个数字       用的是串口助手      
帮看看程序该怎么写吧
水平实在太差         没接触过       谁帮我改正一下吧
谢谢       调试成功       结帖加分
qq83310093

sbit     b485   =   p3^2;//232-485
sbit     bdog   =   p3^4;//watchdog
 
/*89s51     485   ltc491     watchdog   tcl1232           22.118mhz*/

#include "main.h "

sbit     power_led   =   p3^5;
sbit     rx_led         =   p3^6;
sbit     tx_led       =     p3^7;

uint8         sendbuf[16],recebuf[16];
uint8         sendcount   ,rececount=0;


watchdog()
{
uint16   i;

bdog=0;

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

bdog=1;
}
main()

{
p1   =   0xff;

p2   =   0xff;
   
power_led=0;

rx_led=0;

tx_led=0;

init();

ea=1;//开总中断
 

while(1)   {

watchdog();

if   (ri)
      {
            ri=0;

            recebuf[0]   =   sbuf;

    while(ri==0){;}


            b485=1;

    sbuf=recebuf[0];

            while(ti==0);

    ti=0;

            b485=0;

      }

              }

}


void   inittimer0(void)//1ms
{
tmod=tmod&0xf0;

tmod=tmod ¦0x01;

th0=0xf8;

tl0=0xcc;

tr0=1;

et0=1;
}

void   init(void)
{

b485   =   0;//接收

inittimer0();

inituart();

}


void   inituart(void)
{
tmod=tmod&0x0f;

tmod=0x20 ¦tmod;       //定时1     模式2  

scon=0xd0;                 //模式3     允许接收

th1=0xfa;                 //9600baud  

tl1=0xfa;

pcon=0;

tr1=1;

et1=1;

es=1;

}


发表于:2007-04-10 14:15:191楼 得分:0
描述一下硬件电路接口...

感觉你这个可能是没有考虑到485的半双工通信方式

发表于:2007-04-10 14:23:222楼 得分:0
好的
sbit     power_led   =   p3^5;电源灯
sbit     rx_led         =   p3^6;收发灯
sbit     tx_led       =     p3^7;

sbit     b485   =   p3^2;//232-485     接受输出允许位     驱动器输出允许位
p3.0     p3.1接485-232的r     d引脚    

sbit     bdog   =   p3^4;//watchdog       看门狗喂狗脚

晶振22.1184mhz
发表于:2007-04-10 15:20:423楼 得分:0
学习
发表于:2007-04-10 15:38:164楼 得分:0
首先,喂狗不要这么复杂,bdog=0;bdog=1;两条指令就够了。你的喂狗循环占用时间太多,会影响串口接收。
然后,while(ri==0){;}是什么意思?制造一个死循环吗?看门狗可要起作用了。
最后,你的485芯片用的是什么型号?如果是4线的,没有必要关闭发送允许。如果是两线的,请注意485总线上要有上拉和下拉电阻。
欢迎光临我的开发笔记网页:http://imean.idhost.cn
发表于:2007-04-10 16:16:305楼 得分:0
调整一下:
分两部调试,先调单独调收\发,再组合

收,用中断方式
发,用查询方式

单独的收发,先确定硬件可靠,然就一般就是波特率计算的问题.同样,如果232通信正常了,那就是485转换的问题

组合的时候,要注意的是:功能之间的耦合.最好一个功能就只做一件事,不要贪多...

发表于:2007-04-10 18:09:106楼 得分:0
切换到rs485发送状态后,要等待0.5毫秒等待总线稳定后在发数据
发表于:2007-04-10 19:46:127楼 得分:0
485是半双工的
发送和接受的位置,适当加nop


快速检索

最新资讯
热门点击