EDN首页   博客首页

最新日志

发表于:2007-9-3 21:34:44
标签:RS485  

2

基于RS485和VB6.0的PC机与51单片机多机通信

前一段时间主要做了几个小项目,都是单片机与PC机的串行通信,采用RS485,上位机采用VB6.0语言编写软件。

自己看VB有一段时间了,终于等到用的机会,现在学习的程度还可以完全够用。

单片机采用了51单片机,多机通信中采用了利SM2来区分是数据还是地址,效果还可以。其中RS485部分采用了隔离转换电路,采用高速光耦6N137,效果很好。

 

通信规则:

波特率9600   11位异步串行通信   1位起始位,8位数据位,1为地址/数据控制位  一位停止位    采用和校验不采用奇偶校验   地址、数据控制位是1为地址,0为数据。

 

例如实验采用2台下位机:

第一号机地址为01H

第二号机地址为02H

 

 

 

上位机程序流程:

1.       发送地址帧:A6+地址+

2.       接受下位机应答:地址+0+校验和+

3.       若应答正确发送请求数据命令:A5+地址+

4.       上位机返回数据:A5+数据+校验和+

5.       上位机计算数据并显示

注:A6A5为命令起始字节。?为结束字节。初始化所有的从机都采用接受状态,接受上位机的数据判断若地址与本机相符,就清SM2否则继续监听。

 

实验中主要遇到了以下几个问题:

1.       建议PC机采用的RS232RS485转换头最好采用带隔离的那种,否则有时在实验室就能发现通信不正常现象。

2.       在上位机或下位机发送数据时发送的数据要采用延时,当发完数据后也要加一段延时再进行接收,而这些时间我发现不同的系统是不一样的,我是经过实验来确定的时间的。

3.       单片机中我采用的是中断的方式进行发送和接收。

4.       VB6.0中发送地址时控件MSCOMM控件采用9600,M,8,1然后改为9600,S,8,1状态准备接受单片机的数据,发送数据时就采用9600,S,8,1状态。

5.       在进行多机通信时发现有时发送数据出现错误,例如先进行一号机进行通信,通信正常,再通信2号机发现通信错误,通过仿真器观察2号机接受的数据不读,多接受数据的个数不对,研究很长时间没有找到病根,后来发现网上别人也出现过问题,不过他好像是改成查询方式就好了,而我最后在VB中采用了出错自动重发解决了这个问题。

6.  看了很多的电路图,都是在485的输出端冰上120欧的匹配电阻,这是对的,但是挂多机时要还挂个120的电阻形成回路,这个我实验时发现不对,只能挂一个120欧的电阻。

系统分类: 通信网络   |    用户分类:    |    来源: 原创

评论(20) | 阅读(1740)
发表于:2007-8-4 8:28:15
标签:无标签

1

评论(1) | 阅读(726)
发表于:2007-7-19 19:09:49
标签:无标签

2

新的起点,新的希望,新的人生!

   从家回来有一个星期了,最近的一周过的很糟糕,先是送走了我最好的朋友去工作,然后有是忙着项目,一个星期下来自己一点收获都没有,最近的状态不知道是怎么了,今天休息了一下午,放松一下同时考虑考虑自己的打算!

   7月1号,接到家里的电话急急忙忙的回家了,哎没想到自己是第一个离开学校的而且说走就走,在毕业之前自己列出一定要在毕业之前办完的10件事情,结果有两件没来得急,很是遗憾!再说与同学的分离,我是第一个走的没有送到一个同学心里很不是滋味,也是一个遗憾呀!我自能默默的祝福想想着大家一个一个上火车离开大连的情景,不过幸好我兄弟家在大连去无锡那天我送了,在火车旁抱着我兄弟的时候,突然间大哭起来我都没想到自己会这样,兄弟走后才知道自己有多么的不舍呀!祝大家一切顺利了!

  可以说现在我已经开始了我自己的研究生的生活,还有两年办呢!这几天根我一个也是保研的同学聊天都发现最近的工作热情明显的没有刚进教研室时的强烈了!我自己更是有感受,也许是自己一直以来就很忙也该放松一下了!不过最近我思考了很多,这次回家让我对人生有了新的认识,而与同学的离别,回首大学四年自己真的有很多很多的想法!

  想想自己大学四年都学会了什么,想想自己将来到底想干什么,想过什么样的生活,突然间觉得自己还没想好,现在搞技术而自己的理想并不是这样,我搞单片机已经一年半了,自己怎么会走上这条路自己都不知道。而大学四年自己到底哪些地方改变了,那些改变的地方有多少是对的,很多很多的问题一下子涌上我的头脑,突然间觉得为自己的将来准备的东西太少了!最近看了电视剧《奋斗》,它就是描述大学毕业到工作几年的几个毕业生的故事,虽然有些地方不太符合实际,但是其中的很多内容让我想到自己的未来,让我开始审视自己的人生。这些话听起来有些大,但是我要说这是我现在正在想的东西,而这恰恰也是现在令我感觉疲倦的东西。我很想成为一名商人,这在未来想要实现不是没有可能,但是总觉得自己少点什么,大学四年我的学习成绩不用说,取得了很多的荣誉,而现在想想这些荣誉确实很好,带给了我读研究生的机会,但是同样他也让我在大学四年中没学会唱一首歌,没看过一本小说,甚至一本杂志!

  不说了,越说越觉得自己有点书呆子了,不过幸好本人还不是,不过如果我的研究生生涯还是这么度过的我觉得没准等到时我真变成书呆子了!

 新的起点,新的人生,新的希望,从这7月20日起我的研究生生涯正式开始,祝福我吧,哈哈Fighting!

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(636)
发表于:2007-6-16 19:26:01
标签:抗干扰  

1

工业抗干扰

工业现场的环境往往存在严重干扰,这些干扰有时会严重影响仪器的硬件或软件,我一般都采取硬件和软件措施来解决。

PCB板的绘制过程中要注意:

 (1)电源转换芯片中电解电容、电感等元件尽可能靠近芯片。在输出电源处并联一个10uF的电解电容和0.1uF的陶瓷电容,有效地抑制输出电源上的纹波和高频噪声。

(2)RC低通滤波器滤除串模交流干扰。

(3)使用双端输入、共模抑制比高的差动放大器减小信号通路的共模干扰。

(4)PCB板上每一个IC都接入高频特性好的0.1uF的旁路电容,旁路电容的引线要短而且紧靠需要旁路的集成芯片的VccGND端,以消除高频干扰。

(5)布线时,电源线和地线要尽量粗一些,这样除减小压降外,更重要的是抑制电源线和地线阻抗引起的振荡。

(6)由于测量范围的要求,实际在电路中传输的信号为低频信号,采用一点接地,电路中各个功能电路的“地”直接用接地导线和零电位基准点连接。

(7) PCB板布线时避免出现90度折线和锐角折线,减少高频噪声发射。

(8) 单片机闲置的引脚不应当悬空,要接地或者是接Vcc,或者是按照技术手册的要求连接。其他集成电路IC的闲置引脚在不改变逻辑状态的情况下接电源或者接地。

(9)注意晶振布线,高频晶振会产生很大的噪声,晶振要尽量靠近单片机的相关引脚,连接线要短。

(10)模拟电路和数字电路分别在两块电路板上,数字地和模拟地在线路板上不短接,数字地和模拟地在电池输入端一点连接。

(11)布线时尽量减少回路环的面积,以降低感应噪声。

(12)IC器件尽量直接焊在电路板上,少用IC座。

(I3)对于来源于电磁感应地串模干扰,尽可能早地对被测信号进行前置放大,以提高回路中的信号噪声比。

(14)将单片机的模拟部分和数字部分分开供电,模拟电源和数字电源各自并接lOuF的担电容和O.IuF的陶瓷电容。

PCB的制作过程中现在就想到这些。

在信号通道中:

在工业产品中信号通道直接与被控对象相连,容易通过共地线引入干扰。可以采用光电耦合器进行隔离的措施来抑制此种干扰,光电耦合器使被隔离两者之间只有光的联系,而不直接发生电的联系。由于光电耦合器不是将输入侧和输出侧的电信号进行直接耦合,而是以光为媒介进行间接耦合,因而具有较高的电气隔离和抗干扰能力。推荐经济实惠的隔离器件TLP521线性光偶HCNR200一般隔离模拟信号,高速光耦6N137等。

软件中采用数字滤波技术剔除虚假信号,求取真值。还要使用看门狗,但是要有冷热驱动的区分。

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(1104)
发表于:2007-6-9 21:34:18
标签:无标签

0

又有活了!

         毕业论文写了5天基本已经写完了,这两天偷懒了看完了韩剧:魔女幼熙。大四上学期我有一段时间也迷上了韩剧。后来看的太多都有点恶心了。那天我姐说她正在看韩剧,正好我同学也根我说魔女幼熙好看让我看看。本来想论文写累的时候看看,可是不看不知道,看了一集我就迷上了,一连看了一天半终于给看完了。挺爽的,看的我突然间都有种冲动,赶快找个女朋友吧,哈哈。其实明明知道就是3角恋或四角恋但还是想看,感情拍的实在是太细腻了。对于韩剧就不过多评价了,想看的根我要我机器里还有好几部呢。

         这两天好消息坏消息都有了,先说坏的吧,那天听师姐说她在跟老师聊天的时候,老师已经宣判了本人没有假期了,哎,真的很郁闷原来还想本科毕业了去北京好好玩玩呢,看来是不行了。

         好消息呢是又从外面接了个活,哈哈又有MONEY了,总算可以缓解一下本人紧张的经济环境。

         这两天也仔细的考虑了一下,既然假期没了,在学校继续做老师项目的时候该格外还得学点东西,决定把FPGA再好好深入一下,同时VB、VC要深入。还有要学习股票,哈哈,太想挣钱了!

       对了,毕业相发下来了,我竟然笑的嘴张的到挺大,后来仔细观察了一下过李娜同学也张着大嘴呢。哈哈缘分呀,心里还算平衡了一下。总体来说本人照的还可以。

       明天开始还要继续论文,Fighting!

系统分类: 自由话题   |    用户分类:    |    来源: 无分类

评论(4) | 阅读(720)
发表于:2007-6-5 20:30:13
标签:430  

0

430中文资料上传!

     研究了一下,终于知道怎么才分PDF了,上传一下拉!pdfpdf

系统分类: 资源共享   |    用户分类:    |    来源: 原创

评论(2) | 阅读(1250)
发表于:2007-6-5 11:04:50
标签:430  

0

MSP430英文资料!

          今天郁闷了,本来上个月中旬说好的六月初去湖南调试,是做飞机到长沙。就等这做飞机了,没想到今天下来命令,不去了。太郁闷了!我的飞机呀!!!

        

不说这扫兴的事了,有同学毕业设计用的是430单片机,就上传个英文资料,希望有些帮助!中文资料太大,本人还不知道怎么上传,稍等!

pdf

 

系统分类: 资源共享   |    用户分类:    |    来源: 原创

评论(2) | 阅读(1249)
发表于:2007-6-4 19:06:23
标签:无标签

0

看了毕业晚会太感动了!!!

         昨天晚上去看了毕业生晚会,本来就是想去看一下我们班级得女生得节目,可是没想到一直看到了最后,因为晚会实在太精彩了!

        回到宿舍后大家都有一个想法就是要首先感激我们班级得6位女生,真得是太感激了,虽然没有看到他们在舞台上得节目,但是他们为我们班级制作得DV短片真的是太好了,这个DV是在晚会开始前10分钟完成得,最感动得是她们最后每个人的几句话说的都很搞笑但却很实在,很有意义!在此我也很想对她们说一声:真心的感谢你们,这个DV我们每一位0309班的男生都会永远的收藏,也祝愿你们毕业后,身体健康,越来越漂亮,家庭生活幸福美满呀,^_^!

       晚会的节目都很精彩,竟然让我都有点忘记了自己是一名毕业生。直到播放一些同学对毕业生的赠言时,那些出自内心的话语听起来心里突然间有一种莫明的感觉,而听了两位辅导员的讲话心里更加难受,头脑中突然出现了以前很多的画面。哎,一句话太舍不得了,舍不得这个学校,舍不得同学,舍不得老师,舍不得朋友.

       不聊了,要写毕业论文了,早点写完,早点跟同学玩呀!哈哈!

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(1) | 阅读(631)
发表于:2007-6-4 18:38:40
标签:PLC  

0

西门子得进口原装下载线给退了!!!

        今天决定了将西门子的原装进口线退掉了,因为实在是找不到原因。用进口线试验单独的通信程序很好用,而试验项目的大程序时,通信的时候始终丢掉字节,从而导致其他的数据也错误。而大程序用普通的通信线却一点问题没有,这就是说程序没错误,线也没问题,实在找不到原因。拿到公司后,公司的技术人员也找不出原因,最后说可能是我通信用的是自由口模式,而自由口模式对设备的要求很高。希望看到这个问题的高手能够提点意见。

       今天去的公司是在太原街附近,在一个大厦的15楼,我也去过几家大型公司,这家的工作环境觉得相当的好,放眼望去感觉真的是太好了!真希望将来自己也能由这样得工作环境,太舒服了。

系统分类: 工业控制   |    用户分类:    |    来源: 原创

评论(2) | 阅读(788)
发表于:2007-6-3 16:19:05
标签:温度测量  

1

DS18B20多点温度测量!

      最近有同学毕业设计用到DS18B20多点温度测量,到关口了牺牲了一下午的时间给他讲了一下,趁着这个机会也把我的多点温度测量的资料和程序找了出来,现在与大家一同分享。

pdfDS18B20多点温度测量

主程序:

uchar temp[2];//存放两路温度值
uchar sflag[2];//存放两路温度值的正负号
uchar readtemp[2];//每次读出温度的温度的高低位值

uchar fentemp ;//用于拆分两路温度送入显示数组

程序:for(h=0;h<2;h++)//H循环两次读两路温度
    {
      Init_DS18B20();//复位18B20
      // read_ROM();
      //resetpulse();
      WriteOneChar(0xcc);//发跳过ROM命令
      WriteOneChar(0x44);//发温度转换命令
      for(j=250;j>0;j--);//延时
      Init_DS18B20();//复位
      WriteOneChar(0x55);//发送ROM匹配命令
         for(i=0;i<8;i++)
            {
              WriteOneChar(rom[h][i]);
            }
      WriteOneChar(0xbe);//发温度转换命令
      readtemp[0]=ReadOneChar();//读取相应的温度值低位
      readtemp[1]=ReadOneChar();//读取相应的温度值高位
      sflag[h]=0;
          if((readtemp[1] & 0xf8)!=0x00)//若温度为负的处理
             {
               sflag[h]=1;
               readtemp[1]=~readtemp[1];
               readtemp[0]=~readtemp[0];
               temp[h]=readtemp[0]+1;
               readtemp[0]=temp[h];
                   if(temp[h]>255)
                     {
                        readtemp[1]++;
                     }

              }

      readtemp[1]=readtemp[1]<<4;//将高低温度和为一个字节,本方法避免了*0。0625,很简单,很准确
      readtemp[1]=readtemp[1] & 0x70;
      xx="readtemp"[0];
      xx="xx">>4;
      xx="xx"& 0x0f;
      readtemp[1]=readtemp[1] | xx;
      temp[h]=readtemp[1];
      fentemp="temp"[h];//拆分两路温度值送入显示单元
           while( fentemp/10)
              {
               displaybuf[k+1]= fentemp%10;
               fentemp= fentemp/10;
               }
      displaybuf[k]= fentemp;
      k+=2;
      if(k==3)
      k="0";

      }
k=0;

 

子程序

//18B20延时程序
void delayy(unsigned int i)
{
     while(i--);

}
//初始化18B20函数
Init_DS18B20(void)
{
 unsigned char x="0";
 DQ = 1;    //DQ复位
 delayy(8);  //稍做延时
 DQ = 0;    //单片机将DQ拉低
 delayy(80); //精确延时 大于 480us
 DQ = 1;    //拉高总线
 delayy(14);
 x=DQ;      //稍做延时后 如果x=0则初始化成功 x="1则初始化失败"
 delayy(20);
}
//18B20读一个字节
ReadOneChar(void)
{
unsigned char i="0";
unsigned char dat = 0;
for (i=8;i>0;i--)
 {
  DQ = 0; // 给脉冲信号
  dat>>=1;
  DQ = 1; // 给脉冲信号
  if(DQ)
   dat|=0x80;
  delayy(4);
 }
 return(dat);
}
//18B20写一个字节
WriteOneChar(unsigned char dat)
{
 unsigned char i="0";
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delayy(5);
  DQ = 1;
  dat>>=1;
 }
delayy(4);
}
//18B20读ROM序列号
/*void read_ROM(void)
{
 int n;

  writecommandtods18b20(0x33);
  for(n=0;n<8;n++){rom[0][n]=readdatafromds18b20();}
}*/

 

说明读取序列号时一定要独个读取。子程序参考了别人得程序

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(6) | 阅读(2020)
23下一页总共 , 当前 /