打印

大家帮忙看个程序,找找问题在哪?(在线)

[复制链接]
1808|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ksslx|  楼主 | 2008-2-29 14:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define SYSCLK    24000000 //11059200
#define BAUDRATE  9600
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar fsbuf[4];
uchar fsjsq;                //发送数据计数器
bit fsbz;                 //发送标志,当为1时,正在发送,当为0时,发送完毕

//***************************** 
void delay(uint N) //N = 1000 时间为1S
{
  unsigned int i;
  for(;N>0;N--)
  { 
    for(i=0;i<124;i++)
     {;}
  }
}

//串口初始化 0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200  
void serial_init(void)
              { 
                        SCON = 0x30; /* mode 0: 8-bit UART, enable receiver */ 
//                      TH1=TL1= 0xfa;                           //定时器1的低字节(重载值),发送用
                        TL1=0xfa;
                        TH1=0xfa;            
//                        TMOD&=0xbf;
                        TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */ 
                        TR1 = 1; /* timer 1 run */ 
                        ES = 1; 
                        fsbz=0;
                        fsjsq=0;
              } 

//***************************** 
void RS232_ISR (void) interrupt 4 using 1{
     if(TI){
        TI=0;
        if(fsbz) {                      //只有发送标志时,才进行发送                    
            if(fsjsq<5){
                  SBUF=fsbuf[fsjsq];  
                  fsjsq++;
            }                           //如果未发送完5个,则继续发送
            else {
                P1=0xff;
                delay(100);
                fsbz=0;                 //发送完毕后,清发送标志,下次可以发送
                fsjsq=0;       
            }                           //发送完毕后,
    }                                   //以上为产生发送中断处理   
  }
}

/********************************************************************
功能:主程序*********************************************************
入口,出口:无*******************************************************
*********************************************************************/
void main(void)
{
  EA=0;
  serial_init();
    EA=1;                      
    while(1){
                        fsbuf[0]=0x55;
                    fsbuf[1]=0xaa;
                    fsbuf[2]=0x01;
                    fsbuf[3]=0x02;
                    fsbz=1;
                    fsjsq=0;
                    P1=0x00;
                    delay(100);
                    SBUF=fsbuf[fsjsq];                    
                    delay(100);                                           
  }
}//--------------------------------main function


以上为我的程序,我用的MCU是W78E52,串口发送数据到MAX485上,再通过波士的232-485转换器跟电脑相连,在电脑上用串口调试工具来查看收到的数据。
其中我在P1.7口上接了一个发光二极管来验证程序的正常运行,结果是:二极管能够正常工作,但是从串口工具上收不到所发的数据。
大家帮忙看看啊!问题是在哪?

相关帖子

沙发
ayb_ice| | 2008-2-29 14:28 | 只看该作者

先只要简单的往SBUF丢数据试试

初始化还是要的

使用特权

评论回复
板凳
ksslx|  楼主 | 2008-2-29 15:11 | 只看该作者

还是不行哈

我刚刚试了,还是不行啊!就发一组数据还是不行!哎!帮帮我吧!

使用特权

评论回复
地板
ksslx|  楼主 | 2008-2-29 15:13 | 只看该作者

到底是哪的问题啊

如题!

使用特权

评论回复
5
gjg191| | 2008-2-29 15:26 | 只看该作者

dd

485的控制引脚呢

使用特权

评论回复
6
孤星119| | 2008-2-29 16:31 | 只看该作者

程序没看出问题,估计硬件的毛病了.



使用特权

评论回复
7
ksslx|  楼主 | 2008-2-29 16:44 | 只看该作者

回复楼上的

我的485的两个控制引脚RE、DE都串接了个2K的电阻接5V电源了,等于是说:单片机只发不收!

使用特权

评论回复
8
emailli| | 2008-2-29 20:35 | 只看该作者

A+B-

有没有接错

仔细看看硬件先

使用特权

评论回复
9
ligaoyang| | 2008-2-29 23:08 | 只看该作者

A,B脚接反

软件看不出问题,有两种可能:
   1、串口调试工具串口波特率与你单片机的发送波特率不一致引起,建议串口调试工具用HEX显示方式查看
   2、485接口有没有跟转换器的A,B脚接反或者转换器本身有问题

使用特权

评论回复
10
ksslx|  楼主 | 2008-3-3 09:01 | 只看该作者

疑问

我用示波器测了测单片机的TXD端,根本就没发数据,郁闷呐!

使用特权

评论回复
11
ksslx|  楼主 | 2008-3-3 10:56 | 只看该作者

问题解决了

我把以前设置的SCON = 0x30;改成SCON = 0x50;就好了,为什么啊?0x30是串行方式0,0x50是方式1.对吧?有点晕,为什么这样子就好了啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

105

帖子

0

粉丝